kayvan@APPLE.COM (05/03/89)
There are two modules, gnulib.c and stmt.c, in which function pointers are used as functions in the gcc code. Unless there something in ANSI C that I don't know about (a distinct possibility), I believe this is an error. GCC itself generates correct code for both modules without even a warning about the function pointers used as functions. This is unfortunate. Anyway, here's the diff wrt the gcc-1.34 sources. When I get gcc-1.35 (after getting gcc-1.34 to actually link code... by either getting an assembler that understands AT&T syntax, or by doing the masm tm files) and if people agree with this, I'll post diffs to gcc-1.35. ---Kayvan Kayvan Sylvan @ Transact Software, Inc. -*- Mountain View, CA (415) 961-6112 Internet: mrspoc!kayvan@apple.com UUCP: ...!{apple,pyramid,mips}!mrspoc!kayvan *** orig/stmt.c Sat Apr 29 01:38:55 1989 --- stmt.c Mon May 1 01:17:48 1989 *************** *** 2811,2815 if (node_is_bounded (node->right)) { ! emit_jump_insn (gen_bgt_pat (label_rtx (node->right->code_label))); if (node_is_bounded (node->left)) emit_jump (label_rtx (node->left->code_label)); --- 2811,2815 ----- if (node_is_bounded (node->right)) { ! emit_jump_insn ((*gen_bgt_pat) (label_rtx (node->right->code_label))); if (node_is_bounded (node->left)) emit_jump (label_rtx (node->left->code_label)); *************** *** 2821,2825 { if (node_is_bounded (node->left)) ! emit_jump_insn (gen_blt_pat (label_rtx (node->left->code_label))); else { --- 2821,2825 ----- { if (node_is_bounded (node->left)) ! emit_jump_insn ((*gen_blt_pat) (label_rtx (node->left->code_label))); else { *************** *** 2826,2830 node->right->test_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE); ! emit_jump_insn (gen_bgt_pat (label_rtx (node->right->test_label))); emit_case_nodes (index, node->left, default_label, unsignedp); --- 2826,2830 ----- node->right->test_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE); ! emit_jump_insn ((*gen_bgt_pat) (label_rtx (node->right->test_label))); emit_case_nodes (index, node->left, default_label, unsignedp); *************** *** 2846,2850 { emit_cmp_insn (index, expand_expr (node->high, 0, VOIDmode, 0), 0, 0, 0); ! emit_jump_insn (gen_blt_pat (default_label)); } if (node_is_bounded (node->right)) --- 2846,2850 ----- { emit_cmp_insn (index, expand_expr (node->high, 0, VOIDmode, 0), 0, 0, 0); ! emit_jump_insn ((*gen_blt_pat) (default_label)); } if (node_is_bounded (node->right)) *************** *** 2875,2879 eliminate any testing and branch directly to the target code. */ ! emit_jump_insn (gen_bgt_pat (label_rtx (node->right->code_label))); } else --- 2875,2879 ----- eliminate any testing and branch directly to the target code. */ ! emit_jump_insn ((*gen_bgt_pat) (label_rtx (node->right->code_label))); } else *************** *** 2883,2887 node->right->test_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE); ! emit_jump_insn (gen_bgt_pat (label_rtx (node->right->test_label))); } emit_cmp_insn (index, expand_expr (node->low, 0, VOIDmode, 0), 0, 0, 0); --- 2883,2887 ----- node->right->test_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE); ! emit_jump_insn ((*gen_bgt_pat) (label_rtx (node->right->test_label))); } emit_cmp_insn (index, expand_expr (node->low, 0, VOIDmode, 0), 0, 0, 0); *************** *** 2886,2890 } emit_cmp_insn (index, expand_expr (node->low, 0, VOIDmode, 0), 0, 0, 0); ! emit_jump_insn (gen_bge_pat (label_rtx (node->code_label))); if (node_is_bounded (node->left)) { --- 2886,2890 ----- } emit_cmp_insn (index, expand_expr (node->low, 0, VOIDmode, 0), 0, 0, 0); ! emit_jump_insn ((*gen_bge_pat) (label_rtx (node->code_label))); if (node_is_bounded (node->left)) { *************** *** 2906,2910 { emit_cmp_insn (index, expand_expr (node->low, 0, VOIDmode, 0), 0, 0, 0); ! emit_jump_insn (gen_blt_pat (default_label)); } emit_cmp_insn (index, expand_expr (node->high, 0, VOIDmode, 0), 0, 0, 0); --- 2906,2910 ----- { emit_cmp_insn (index, expand_expr (node->low, 0, VOIDmode, 0), 0, 0, 0); ! emit_jump_insn ((*gen_blt_pat) (default_label)); } emit_cmp_insn (index, expand_expr (node->high, 0, VOIDmode, 0), 0, 0, 0); *************** *** 2909,2913 } emit_cmp_insn (index, expand_expr (node->high, 0, VOIDmode, 0), 0, 0, 0); ! emit_jump_insn (gen_ble_pat (label_rtx (node->code_label))); if (node_is_bounded (node->right)) { --- 2909,2913 ----- } emit_cmp_insn (index, expand_expr (node->high, 0, VOIDmode, 0), 0, 0, 0); ! emit_jump_insn ((*gen_ble_pat) (label_rtx (node->code_label))); if (node_is_bounded (node->right)) { *************** *** 2926,2930 { emit_cmp_insn (index, expand_expr (node->high, 0, VOIDmode, 0), 0, 0, 0); ! emit_jump_insn (gen_bgt_pat (default_label)); } emit_cmp_insn (index, expand_expr (node->low, 0, VOIDmode, 0), 0, 0, 0); --- 2926,2930 ----- { emit_cmp_insn (index, expand_expr (node->high, 0, VOIDmode, 0), 0, 0, 0); ! emit_jump_insn ((*gen_bgt_pat) (default_label)); } emit_cmp_insn (index, expand_expr (node->low, 0, VOIDmode, 0), 0, 0, 0); *************** *** 2929,2933 } emit_cmp_insn (index, expand_expr (node->low, 0, VOIDmode, 0), 0, 0, 0); ! emit_jump_insn (gen_bge_pat (label_rtx (node->code_label))); if (node_is_bounded (node->left)) { --- 2929,2933 ----- } emit_cmp_insn (index, expand_expr (node->low, 0, VOIDmode, 0), 0, 0, 0); ! emit_jump_insn ((*gen_bge_pat) (label_rtx (node->code_label))); if (node_is_bounded (node->left)) { *************** *** 2949,2953 { emit_cmp_insn (index, expand_expr (node->high, 0, VOIDmode, 0), 0, 0, 0); ! emit_jump_insn (gen_bgt_pat (default_label)); } if (!node_has_low_bound (node)) --- 2949,2953 ----- { emit_cmp_insn (index, expand_expr (node->high, 0, VOIDmode, 0), 0, 0, 0); ! emit_jump_insn ((*gen_bgt_pat) (default_label)); } if (!node_has_low_bound (node)) *************** *** 2954,2958 { emit_cmp_insn (index, expand_expr (node->low, 0, VOIDmode, 0), 0, 0, 0); ! emit_jump_insn (gen_bge_pat (label_rtx (node->code_label))); } /* We allow the default case to drop through since --- 2954,2958 ----- { emit_cmp_insn (index, expand_expr (node->low, 0, VOIDmode, 0), 0, 0, 0); ! emit_jump_insn ((*gen_bge_pat) (label_rtx (node->code_label))); } /* We allow the default case to drop through since *** orig/gnulib.c Sat Apr 29 01:27:08 1989 --- gnulib.c Mon May 1 01:17:46 1989 *************** *** 467,471 for (i = 0; i < nelts; i++) { ! ctor (p); p += size; } --- 467,471 ----- for (i = 0; i < nelts; i++) { ! (*ctor) (p); p += size; } *************** *** 530,534 { ptr -= size; ! dtor (ptr, auto_delete); } --- 530,534 ----- { ptr -= size; ! (*dtor) (ptr, auto_delete); }