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);
}