$ arm-linux-eabi-gcc foo.c -Wall -S -O2 unsigned foo(unsigned* ptr) { union { unsigned long long v64; struct { unsigned a, b; } v32; } tmp = { 0 }; <= this initialization was eliminated by optimizer but initializer was emited into .rodata. tmp.v32.a = *ptr; return tmp.v32.a; } .file "foo.c" .section .rodata .align 3 .type C.0.1149, %object .size C.0.1149, 8 C.0.1149: <== useless data. .space 8 <== .text .align 2 .global foo .type foo, %function foo: ldr r0, [r0, #0] bx lr .size foo, .-foo .ident "GCC: (GNU) 4.0.1"
-- Summary: compiler emits useless local symbol (initializer). Product: gcc Version: 4.1.0 Status: UNCONFIRMED Severity: normal Priority: P2 Component: other AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: pluto at agmk dot net CC: gcc-bugs at gcc dot gnu dot org GCC build triplet: i686-pld-linux GCC host triplet: i686-pld-linux GCC target triplet: arm-linux-eabi http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23123