This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug ada/18819] [4.1/4.2 Regression] ACATS cdd2a01 cdd2a02 fail at runtime
- From: "uweigand at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 20 Jan 2006 18:39:04 -0000
- Subject: [Bug ada/18819] [4.1/4.2 Regression] ACATS cdd2a01 cdd2a02 fail at runtime
- References: <bug-18819-7210@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #14 from uweigand at gcc dot gnu dot org 2006-01-20 18:39 -------
Some additional details about the s390x failure. This is caused by a
miscompile of the fdd2a00__write__2 support routine:
lg %r4,168(%r15) # 35 *movdi_64/8 [length = 6]
lg %r3,160(%r15) # 36 *movdi_64/8 [length = 6]
cgr %r4,%r3 # 37 *cmpdi_ccs/1 [length = 4]
stg %r2,168(%r15) # 33 *movdi_64/9 [length = 6]
Note how insn 35 reads a stack slot that is uninitialized because
insn 33 has been scheduled later. This is apparently caused by
an alias set issue. The code at the .t97.final_cleanup level reads:
A.63 = system__arith_64__add_with_ovflo_check (D.1421, D.1426);
R38b = (ada__streams__Tstream_element_offsetB *) &A.63;
where the data type of A.63 is system__arith_64__int64.
This gets expanded into
(insn 32 31 33 3 (set (reg:DI 60)
(reg:DI 2 %r2)) -1 (nil)
(nil))
(insn 33 32 34 3 (set (mem/c/i:DI (plus:DI (reg/f:DI 39 virtual-stack-vars)
(const_int -8 [0xfffffffffffffff8])) [26 A.63+0 S8 A64])
(reg:DI 60)) -1 (nil)
(nil))
(insn 34 33 35 3 (parallel [
(set (reg:DI 43 [ R38b ])
(plus:DI (reg/f:DI 39 virtual-stack-vars)
(const_int -8 [0xfffffffffffffff8])))
(clobber (reg:CC 33 %cc))
]) -1 (nil)
(nil))
(insn 35 34 36 3 (set (reg:DI 48 [ D.1430 ])
(mem:DI (reg:DI 43 [ R38b ]) [27 S8 A64])) -1 (nil)
(nil))
Note alias set 26 in insn 33 vs. alias set 27 in insn 35.
Any ideas why this would be the case?
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18819