This is the mail archive of the gcc@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: Source of Ada bootstrap failure on x86


On Wed, Jul 21, 2004 at 08:46:28AM -0400, Richard Kenner wrote:
> But I'm thinking it's best simply to remove the call to set_mem_attributes
> here (with appropriate comment, of course).  What do you think?

Yep.  There are two occurrences in this function.  With the following,
I can bootstrap C and Ada on x86.  We now die building libada with

+===========================GNAT BUG DETECTED==============================+
| 3.5.0 20040722 (experimental) (i686-pc-linux-gnu) GCC error:             |
| in set_level, at tree-ssa-loop-im.c:460                                  |
| Error detected at i-cobol.adb:1026:1                                     |

I'm going to put this through a regular test cycle without ada and
commit in the morning if it passes.


r~



Index: expr.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/expr.c,v
retrieving revision 1.688
diff -c -p -d -r1.688 expr.c
*** expr.c	21 Jul 2004 19:23:02 -0000	1.688
--- expr.c	22 Jul 2004 09:41:34 -0000
*************** emit_push_insn (rtx x, enum machine_mode
*** 3250,3265 ****
  
  	  target = gen_rtx_MEM (BLKmode, temp);
  
! 	  if (type != 0)
! 	    {
! 	      set_mem_attributes (target, type, 1);
! 	      /* Function incoming arguments may overlap with sibling call
! 		 outgoing arguments and we cannot allow reordering of reads
! 		 from function arguments with stores to outgoing arguments
! 		 of sibling calls.  */
! 	      set_mem_alias_set (target, 0);
! 	    }
! 
  	  /* ALIGN may well be better aligned than TYPE, e.g. due to
  	     PARM_BOUNDARY.  Assume the caller isn't lying.  */
  	  set_mem_align (target, align);
--- 3250,3260 ----
  
  	  target = gen_rtx_MEM (BLKmode, temp);
  
! 	  /* We do *not* set_mem_attributes here, because incoming arguments
! 	     may overlap with sibling call outgoing arguments and we cannot
! 	     allow reordering of reads from function arguments with stores
! 	     to outgoing arguments of sibling calls.  We do, however, want
! 	     to record the alignment of the stack slot.  */
  	  /* ALIGN may well be better aligned than TYPE, e.g. due to
  	     PARM_BOUNDARY.  Assume the caller isn't lying.  */
  	  set_mem_align (target, align);
*************** emit_push_insn (rtx x, enum machine_mode
*** 3355,3369 ****
  	    addr = memory_address (mode, gen_rtx_PLUS (Pmode, args_addr,
  						       args_so_far));
  	  dest = gen_rtx_MEM (mode, addr);
! 	  if (type != 0)
! 	    {
! 	      set_mem_attributes (dest, type, 1);
! 	      /* Function incoming arguments may overlap with sibling call
! 		 outgoing arguments and we cannot allow reordering of reads
! 		 from function arguments with stores to outgoing arguments
! 		 of sibling calls.  */
! 	      set_mem_alias_set (dest, 0);
! 	    }
  
  	  emit_move_insn (dest, x);
  	}
--- 3350,3364 ----
  	    addr = memory_address (mode, gen_rtx_PLUS (Pmode, args_addr,
  						       args_so_far));
  	  dest = gen_rtx_MEM (mode, addr);
! 
! 	  /* We do *not* set_mem_attributes here, because incoming arguments
! 	     may overlap with sibling call outgoing arguments and we cannot
! 	     allow reordering of reads from function arguments with stores
! 	     to outgoing arguments of sibling calls.  We do, however, want
! 	     to record the alignment of the stack slot.  */
! 	  /* ALIGN may well be better aligned than TYPE, e.g. due to
! 	     PARM_BOUNDARY.  Assume the caller isn't lying.  */
! 	  set_mem_align (dest, align);
  
  	  emit_move_insn (dest, x);
  	}


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