https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92417
Bug ID: 92417 Summary: gcc generates wrong debug information at -O2 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 happens at O2 only. "-O1" and "-O3" works fine. It's a recent regression since "gcc-9 -O2" also works. The expected value of l_1162[0][0][0] should be 61344 or opt-out. However, with "-O2", gdb outputs "l_1162[0][0][0]=3". $ gcc-trunk -v Thread model: posix Supported LTO compression algorithms: zlib gcc version 10.0.0 20191107 (experimental) [trunk revision 277920] (GCC) #expected output $ gcc-trunk -O1 -g abc.c $ gdb-trunk -x cmds -batch a.out Breakpoint 1 at 0x400576: file abc.c, line 23. Breakpoint 1, n () at abc.c:23 23 if (b) // optimize_me_not() $1 = 61344 #wrong output at O2 $ gcc-trunk -O2 -g abc.c $ gdb-trunk -x cmds -batch a.out Breakpoint 1 at 0x400616: file abc.c, line 23. Breakpoint 1, n () at abc.c:23 23 if (b) // optimize_me_not() $1 = 3 $ cat abc.c int a, d, e, f, h, l; short b, g, i, m; char c; void n() { char o; int p = 0, j, k; int q[70] = {0}; for (; i <= 1; i++) { unsigned short l_1162[6][2][2]; l = 0; for (; l < 6; l++) { j = 0; for (; j < 2; j++) { k = 0; for (; k < 2; k++) l_1162[l][j][k] = 61344; } } for (; f <= 1; f++) if (d) for (; p >= 0; p--) d = q[f]; if (b) // optimize_me_not() h = l_1162[4][1][0]; for (; e; e++) g = l_1162[5][0][1] <= o; c = a ? c : 0; q[1] = m; } } int main() { n(); printf("%X\n"); } $ cat cmds b abc.c:23 r p l_1162[0][0][0] kill q