[gnu.gcc.bug] Function pointers used as functions in gcc-1.34

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