http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47324
Summary: g++.dg/torture/stackalign failures with -O3 -g at -m32 on darwin Product: gcc Version: 4.6.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target AssignedTo: unassig...@gcc.gnu.org ReportedBy: howa...@nitro.med.uc.edu This is the last remaining breakage with the stackalign tests on x86 darwin10. We are failing... FAIL: g++.dg/torture/stackalign/eh-alloca-1.C -O3 -g execution test FAIL: g++.dg/torture/stackalign/eh-vararg-1.C -O3 -g execution test FAIL: g++.dg/torture/stackalign/eh-vararg-2.C -O3 -g execution test FAIL: g++.dg/torture/stackalign/eh-alloca-1.C -O3 -g execution test FAIL: g++.dg/torture/stackalign/eh-vararg-1.C -O3 -g execution test FAIL: g++.dg/torture/stackalign/eh-vararg-2.C -O3 -g execution test These tests don't fail their execution tests if the -g is omitted. However if I take a failing test and strip the eh-alloca-1.o object file created with -g using 'strip -S eh-alloca-1.o' and relink the testcase it still fails. So the failure is dependent on -g being passed to the testcase but not the debug code generated. Comparing the disassembled eh-alloca-1.o file (using 'otool -tv eh-alloca-1.o') created with -g0 to that created with -g and then stripped with 'strip -S', I find the following diff. --- disasm_g0.txt 2011-01-16 16:33:15.000000000 -0500 +++ disasm_g_stripped.tex 2011-01-16 16:52:28.000000000 -0500 @@ -76,10 +76,10 @@ 000000ed calll 0x100000000 000000f2 movl $0x00000004,(%esp) 000000f9 calll 0x100000000 -000000fe movl 0x000002cb(%ebx),%edx +000000fe movl 0x00000d50(%ebx),%edx 00000104 addl $0x0c,%edx 00000107 movl %edx,(%eax) -00000109 movl 0x000002d3(%ebx),%edx +00000109 movl 0x00000d58(%ebx),%edx 0000010f movl $0x00000000,0x08(%esp) 00000117 movl %eax,(%esp) 0000011a movl %edx,0x04(%esp)