http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45962
--- Comment #15 from Hans-Peter Nilsson <hp at gcc dot gnu.org> 2010-10-19 02:37:49 UTC --- (In reply to comment #14) > I haven't yet figured out which function's stack-frame is borked / where > exactly the saved value of r7 is clobbered. Tomorrow. Ookay, so... With r165240+c165382 and simd-5.c and -O0, gcc feels it needs to dynamically (allocate and) align the stack-location for the resulting vectors, though the vector alignment is neither explicit nor mandatory. No such dynamic allocation at r165239. When doing so, it feels it needs to save the stack-pointer. That's redundant; it's already saved when a frame-pointer is needed. It so emits "move.d $sp,[$r8-8]" (i.e. (set (mem (plus frame_pointer_rtx -8)) stack_pointer_rtx)). Where it gets the -8 from, I don't know, I'll look further. That insn just clobbers; it overwrites a saved register that held an address, which at return to the function, is referenced and causes the SEGV. Code at the two revisions are identical for -O1 as well as for-O2; no dynamic allocation or anything needed, so I guess the new dynamic alignment at -O0 is not an issue that needs to be investigated per se. Regarding the earlier "these are not regressions, dammit"-type comments, I see I made a boo-boo when quoting which failures were regressions: the new FAILs from gcc.dg/torture/stackalign (13 of them) snuck in. (To bystanders, the c165240 "floodgated" check_effective_target_automatic_stack_alignment, but it's only used in g++.dg/torture/stackalign and gcc.dg/torture/stackalign, outside of gcc.target/i386/stackalign). Here's the list of the 62 true regressions (by definition of contrib/regression/btest-gcc.sh) caused by r165240(+c165382) for cris-elf: g++.sum tmpdir-g++.dg-struct-layout-1/t001 g++.sum tmpdir-g++.dg-struct-layout-1/t002 g++.sum tmpdir-g++.dg-struct-layout-1/t003 g++.sum tmpdir-g++.dg-struct-layout-1/t004 g++.sum tmpdir-g++.dg-struct-layout-1/t005 g++.sum tmpdir-g++.dg-struct-layout-1/t006 g++.sum tmpdir-g++.dg-struct-layout-1/t007 g++.sum tmpdir-g++.dg-struct-layout-1/t008 g++.sum tmpdir-g++.dg-struct-layout-1/t009 g++.sum tmpdir-g++.dg-struct-layout-1/t010 g++.sum tmpdir-g++.dg-struct-layout-1/t011 g++.sum tmpdir-g++.dg-struct-layout-1/t012 g++.sum tmpdir-g++.dg-struct-layout-1/t013 g++.sum tmpdir-g++.dg-struct-layout-1/t014 g++.sum tmpdir-g++.dg-struct-layout-1/t015 g++.sum tmpdir-g++.dg-struct-layout-1/t016 g++.sum tmpdir-g++.dg-struct-layout-1/t017 g++.sum tmpdir-g++.dg-struct-layout-1/t018 g++.sum tmpdir-g++.dg-struct-layout-1/t019 g++.sum tmpdir-g++.dg-struct-layout-1/t020 g++.sum tmpdir-g++.dg-struct-layout-1/t021 g++.sum tmpdir-g++.dg-struct-layout-1/t022 g++.sum tmpdir-g++.dg-struct-layout-1/t023 g++.sum tmpdir-g++.dg-struct-layout-1/t024 g++.sum tmpdir-g++.dg-struct-layout-1/t025 g++.sum tmpdir-g++.dg-struct-layout-1/t026 g++.sum tmpdir-g++.dg-struct-layout-1/t027 g++.sum tmpdir-g++.dg-struct-layout-1/t028 g++.sum tmpdir-g++.dg-struct-layout-1/t029 g++.sum tmpdir-g++.dg-struct-layout-1/t030 gcc.sum gcc.c-torture/execute/20060420-1.c gcc.sum gcc.c-torture/execute/simd-5.c gcc.sum gcc.dg/compat/vector-1 gcc.sum gcc.dg/compat/vector-2 gcc.sum tmpdir-gcc.dg-struct-layout-1/t001 gcc.sum tmpdir-gcc.dg-struct-layout-1/t002 gcc.sum tmpdir-gcc.dg-struct-layout-1/t003 gcc.sum tmpdir-gcc.dg-struct-layout-1/t004 gcc.sum tmpdir-gcc.dg-struct-layout-1/t005 gcc.sum tmpdir-gcc.dg-struct-layout-1/t006 gcc.sum tmpdir-gcc.dg-struct-layout-1/t007 gcc.sum tmpdir-gcc.dg-struct-layout-1/t008 gcc.sum tmpdir-gcc.dg-struct-layout-1/t009 gcc.sum tmpdir-gcc.dg-struct-layout-1/t010 gcc.sum tmpdir-gcc.dg-struct-layout-1/t011 gcc.sum tmpdir-gcc.dg-struct-layout-1/t012 gcc.sum tmpdir-gcc.dg-struct-layout-1/t013 gcc.sum tmpdir-gcc.dg-struct-layout-1/t014 gcc.sum tmpdir-gcc.dg-struct-layout-1/t015 gcc.sum tmpdir-gcc.dg-struct-layout-1/t016 gcc.sum tmpdir-gcc.dg-struct-layout-1/t017 gcc.sum tmpdir-gcc.dg-struct-layout-1/t018 gcc.sum tmpdir-gcc.dg-struct-layout-1/t019 gcc.sum tmpdir-gcc.dg-struct-layout-1/t020 gcc.sum tmpdir-gcc.dg-struct-layout-1/t021 gcc.sum tmpdir-gcc.dg-struct-layout-1/t022 gcc.sum tmpdir-gcc.dg-struct-layout-1/t023 gcc.sum tmpdir-gcc.dg-struct-layout-1/t024 gcc.sum tmpdir-gcc.dg-struct-layout-1/t025 gcc.sum tmpdir-gcc.dg-struct-layout-1/t026 gcc.sum tmpdir-gcc.dg-struct-layout-1/t027 gcc.sum tmpdir-gcc.dg-struct-layout-1/t028 The initial description is missing the c++ part of the log, but I don't think that adds anything interesting. The important text for the C tests is already there; just the gcc.dg/torture/stackalign results too.