This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Source of Ada bootstrap failure on x86
- From: Richard Henderson <rth at redhat dot com>
- To: Richard Kenner <kenner at vlsi1 dot ultra dot nyu dot edu>
- Cc: gcc at gcc dot gnu dot org
- Date: Thu, 22 Jul 2004 02:47:04 -0700
- Subject: Re: Source of Ada bootstrap failure on x86
- References: <10407211246.AA12339@vlsi1.ultra.nyu.edu>
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);
}