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

Reply via email to