This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: function.c has unprotected call to FUNCTION_ARG_PASS_BY_REFERENCE


On Jul  7, 2004, Richard Henderson <rth@redhat.com> wrote:

> On Wed, Jul 07, 2004 at 08:02:56PM -0300, Alexandre Oliva wrote:
>> Hmm...  Maybe it should be defined to 0 in defaults.h?

> I had planned to put this in expr.h with the other related macros.

I went ahead and handled a few other macros that looked easy.  Then I
commented them out from i386.h and verified it built.  Then I put them
back in and started a bootstrap.  Will have results in a while.  Ok to
install if it bootstraps?

Index: gcc/ChangeLog
from  Alexandre Oliva  <aoliva@redhat.com>

	* expr.h (FUNCTION_ARG_PARTIAL_NREGS): Default to 0.
	(FUNCTION_ARG_PASS_BY_REFERENCE): Likewise.
	(FUNCTION_ARG_CALLEE_COPIES): Likewise.
	* calls.c: Remove ifdefs of macros above.
	* functions.c: Likewise.
	* expr.c: Likewise.

Index: gcc/calls.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/calls.c,v
retrieving revision 1.344
diff -u -p -r1.344 calls.c
--- gcc/calls.c 8 Jul 2004 05:58:35 -0000 1.344
+++ gcc/calls.c 8 Jul 2004 06:26:35 -0000
@@ -975,16 +975,13 @@ initialize_argument_information (int num
       /* See if this argument should be passed by invisible reference.  */
       if (CONTAINS_PLACEHOLDER_P (TYPE_SIZE (type))
 	  || TREE_ADDRESSABLE (type)
-#ifdef FUNCTION_ARG_PASS_BY_REFERENCE
 	  || FUNCTION_ARG_PASS_BY_REFERENCE (*args_so_far, TYPE_MODE (type),
 					     type, argpos < n_named_args)
-#endif
 	  )
 	{
 	  /* If we're compiling a thunk, pass through invisible
              references instead of making a copy.  */
 	  if (call_from_thunk_p
-#ifdef FUNCTION_ARG_CALLEE_COPIES
 	      || (FUNCTION_ARG_CALLEE_COPIES (*args_so_far, TYPE_MODE (type),
 					     type, argpos < n_named_args)
 		  /* If it's in a register, we must make a copy of it too.  */
@@ -992,7 +989,6 @@ initialize_argument_information (int num
 		  && !(TREE_CODE (args[i].tree_value) == VAR_DECL
 		       && REG_P (DECL_RTL (args[i].tree_value)))
 		  && ! TREE_ADDRESSABLE (type))
-#endif
 	      )
 	    {
 	      /* C++ uses a TARGET_EXPR to indicate that we want to make a
@@ -1095,12 +1091,10 @@ initialize_argument_information (int num
       args[i].tail_call_reg = args[i].reg;
 #endif
 
-#ifdef FUNCTION_ARG_PARTIAL_NREGS
       if (args[i].reg)
 	args[i].partial
 	  = FUNCTION_ARG_PARTIAL_NREGS (*args_so_far, mode, type,
 					argpos < n_named_args);
-#endif
 
       args[i].pass_on_stack = MUST_PASS_IN_STACK (mode, type);
 
@@ -3541,10 +3535,8 @@ emit_library_call_value_1 (int retval, r
       argvec[count].partial = 0;
 
       argvec[count].reg = FUNCTION_ARG (args_so_far, Pmode, NULL_TREE, 1);
-#ifdef FUNCTION_ARG_PARTIAL_NREGS
       if (FUNCTION_ARG_PARTIAL_NREGS (args_so_far, Pmode, NULL_TREE, 1))
 	abort ();
-#endif
 
       locate_and_pad_parm (Pmode, NULL_TREE,
 #ifdef STACK_PARMS_IN_REG_PARM_AREA
@@ -3582,15 +3574,12 @@ emit_library_call_value_1 (int retval, r
 	  && ! (CONSTANT_P (val) && LEGITIMATE_CONSTANT_P (val)))
 	val = force_operand (val, NULL_RTX);
 
-#ifdef FUNCTION_ARG_PASS_BY_REFERENCE
       if (FUNCTION_ARG_PASS_BY_REFERENCE (args_so_far, mode, NULL_TREE, 1))
 	{
 	  rtx slot;
 	  int must_copy = 1
-#ifdef FUNCTION_ARG_CALLEE_COPIES
 	    && ! FUNCTION_ARG_CALLEE_COPIES (args_so_far, mode,
 					     NULL_TREE, 1)
-#endif
 	    ;
 
 	  /* loop.c won't look at CALL_INSN_FUNCTION_USAGE of const/pure
@@ -3643,19 +3632,14 @@ emit_library_call_value_1 (int retval, r
 	  mode = Pmode;
 	  val = force_operand (XEXP (slot, 0), NULL_RTX);
 	}
-#endif
 
       argvec[count].value = val;
       argvec[count].mode = mode;
 
       argvec[count].reg = FUNCTION_ARG (args_so_far, mode, NULL_TREE, 1);
 
-#ifdef FUNCTION_ARG_PARTIAL_NREGS
       argvec[count].partial
 	= FUNCTION_ARG_PARTIAL_NREGS (args_so_far, mode, NULL_TREE, 1);
-#else
-      argvec[count].partial = 0;
-#endif
 
       locate_and_pad_parm (mode, NULL_TREE,
 #ifdef STACK_PARMS_IN_REG_PARM_AREA
Index: gcc/expr.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/expr.c,v
retrieving revision 1.672
diff -u -p -r1.672 expr.c
--- gcc/expr.c 7 Jul 2004 21:26:28 -0000 1.672
+++ gcc/expr.c 8 Jul 2004 06:26:42 -0000
@@ -1423,11 +1423,9 @@ block_move_libcall_safe_for_call_parm (v
 	rtx tmp = FUNCTION_ARG (args_so_far, mode, NULL_TREE, 1);
 	if (!tmp || !REG_P (tmp))
 	  return false;
-#ifdef FUNCTION_ARG_PARTIAL_NREGS
 	if (FUNCTION_ARG_PARTIAL_NREGS (args_so_far, mode,
 					NULL_TREE, 1))
 	  return false;
-#endif
 	FUNCTION_ARG_ADVANCE (args_so_far, mode, NULL_TREE, 1);
       }
   }
Index: gcc/expr.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/expr.h,v
retrieving revision 1.160
diff -u -p -r1.160 expr.h
--- gcc/expr.h 7 Jul 2004 19:23:58 -0000 1.160
+++ gcc/expr.h 8 Jul 2004 06:26:43 -0000
@@ -203,6 +203,18 @@ do {							\
 #define FUNCTION_ARG_BOUNDARY(MODE, TYPE)	PARM_BOUNDARY
 #endif
 
+#ifndef FUNCTION_ARG_PARTIAL_NREGS
+#define FUNCTION_ARG_PARTIAL_NREGS(CUM, MODE, TYPE, NAMED) 0
+#endif
+
+#ifndef FUNCTION_ARG_PASS_BY_REFERENCE
+#define FUNCTION_ARG_PASS_BY_REFERENCE(CUM, MODE, TYPE, NAMED) 0
+#endif
+
+#ifndef FUNCTION_ARG_CALLEE_COPIES
+#define FUNCTION_ARG_CALLEE_COPIES(CUM, MODE, TYPE, NAMED) 0
+#endif
+
 tree split_complex_types (tree);
 tree split_complex_values (tree);
 
Index: gcc/function.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/function.c,v
retrieving revision 1.548
diff -u -p -r1.548 function.c
--- gcc/function.c 7 Jul 2004 23:02:22 -0000 1.548
+++ gcc/function.c 8 Jul 2004 06:26:47 -0000
@@ -2246,10 +2246,8 @@ assign_parm_find_data_types (struct assi
      the machine requires these objects be passed that way.  */
   if (CONTAINS_PLACEHOLDER_P (TYPE_SIZE (passed_type))
       || TREE_ADDRESSABLE (passed_type)
-#ifdef FUNCTION_ARG_PASS_BY_REFERENCE
       || FUNCTION_ARG_PASS_BY_REFERENCE (all->args_so_far, passed_mode,
 					 passed_type, data->named_arg)
-#endif
       )
     {
       passed_type = nominal_type = build_pointer_type (passed_type);
@@ -2366,7 +2364,6 @@ assign_parm_find_entry_rtl (struct assig
   if (MUST_PASS_IN_STACK (data->promoted_mode, data->passed_type))
     entry_parm = 0;
 
-#ifdef FUNCTION_ARG_PARTIAL_NREGS
   if (entry_parm)
     {
       int partial;
@@ -2409,7 +2406,6 @@ assign_parm_find_entry_rtl (struct assig
 	  all->extra_pretend_bytes = all->pretend_args_size;
 	}
     }
-#endif
 
   locate_and_pad_parm (data->promoted_mode, data->passed_type, in_regs,
 		       entry_parm ? data->partial : 0, current_function_decl,
@@ -2854,7 +2850,6 @@ assign_parm_setup_reg (struct assign_par
       data->stack_parm = NULL;
     }
 
-#ifdef FUNCTION_ARG_CALLEE_COPIES
   /* If we are passed an arg by reference and it is our responsibility
      to make a copy, do it now.
      PASSED_TYPE and PASSED mode now refer to the pointer, not the
@@ -2899,7 +2894,6 @@ assign_parm_setup_reg (struct assign_par
 	  did_conversion = true;
 	}
     }
-#endif /* FUNCTION_ARG_CALLEE_COPIES */
 
   /* Mark the register as eliminable if we did no conversion and it was
      copied from memory at a fixed offset, and the arg pointer was not
-- 
Alexandre Oliva             http://www.ic.unicamp.br/~oliva/
Red Hat Compiler Engineer   aoliva@{redhat.com, gcc.gnu.org}
Free Software Evangelist  oliva@{lsd.ic.unicamp.br, gnu.org}

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]