https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89905

            Bug ID: 89905
           Summary: gcc generates wrong debug information at -Og
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: debug
          Assignee: unassigned at gcc dot gnu.org
          Reporter: qrzhang at gatech dot edu
  Target Milestone: ---

It affects gcc-8 to trunk. Gcc-7 works fine.

Bisection points to r247596.

The correct value is "i=830100328". However, with "-Og", gdb outputs
"i=830100327".

$ gcc-trunk -v
gcc version 9.0.1 20190401 (experimental) [trunk revision 270054] (GCC)

$ gdb -v
GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.5) 7.11.1


#correct output#
$ gcc-trunk -g abc.c outer.c
$ gdb -x cmds -batch a.out
Breakpoint 1 at 0x40057a: file abc.c, line 22.

Breakpoint 1, i () at abc.c:22
22          optimize_me_not();
$1 = 830100328


#incorrect output#
$ gcc-trunk -g abc.c outer.c -Og
$ gdb -x cmds -batch a.out
Breakpoint 1 at 0x4004f3: file abc.c, line 22.

Breakpoint 1, i () at abc.c:22
22          optimize_me_not();
$1 = 830100327




$ cat abc.c
char c, d = 22, f;
short e, g;
int h;
char(a)() {}
char(b)() { return 0; }
void i() {
  char j;
  for (; h < 1;) {
    short k[9] = {1, 1, 1, 1, 1, 1, 1, 1, 1};
    int l, i = 830100327;
    short m[3] = {0, 0, 0};
    for (; h < 7; h++)
      for (; d >= 33;) {
        ++k[8];
        f = (c || a()) && g;
      }
    i++;
    j = b() || m[2];
    l = 0;
    for (; l <= 6; l = d)
      e = k[8];
    optimize_me_not();
  }
}
int main() { i(); }


$ cat cmds
b 22
r
p i
kill
q


$ cat outer.c
void optimize_me_not() {}

Reply via email to