http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49032
Summary: -gstabs generates reference to deleted static variable Product: gcc Version: 4.7.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: debug AssignedTo: unassig...@gcc.gnu.org ReportedBy: arthur.j.odw...@gmail.com Created attachment 24272 --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=24272 Output of "ajo-gcc -w -O1 -gstabs test.c -o a.out -v" This reproduces for me with svn revision 173589 (2011-05-09). It doesn't reproduce with gcc 4.5.1. I'm on Ubuntu 10.10, x86-64. cat >test.c <<EOF static struct S2 { int x; } g_239[8] = {42}; int main() { struct S2 *l_845[2][9] = {{0,0,0,0,0,0,0,0,0}, {0,0,0,0, &g_239[6], &g_239[6], &g_239[6], &g_239[6], &g_239[6]}}; return 0; } EOF gcc -w -O1 -gstabs test.c -o a.out /tmp/ccknU0Y6.o: In function `main': test.c:9: undefined reference to `g_239' collect2: ld returned 1 exit status This linker error is due to the following lines in the generated test.s: .Lscope1: .stabs "g_239:S(0,22)=ar(0,23)=r(0,23);0;-1;;0;7;(0,21)",38,0,0,g_239 Someone sees that g_239 is an unused file-static variable and therefore deletes it --- correctly, IMHO --- but incorrectly forgets to also remove the debug information's references to g_239. This test case is reduced from the output of Csmith 2.1.0 (git hash 541a6480, https://github.com/csmith-project/csmith/), using the following command line: csmith --no-paranoid --no-longlong --pointers --arrays --jumps --consts --no-volatiles --no-checksum --divs --no-muls --bitfields --no-packed-struct -s 891890068