https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93941
Bug ID: 93941 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 appears to be a recent regression. My bisect points to g:82e8e335f917b9ce40801838c (needs double check). $ gcc-trunk -v gcc version 10.0.1 20200225 (experimental) [master revision 2473c81cb2d:31b6c240eeb:81c833b311b16cfd87a947374d5ffbbd48facd03] (GCC) ## correct output $ gcc abc.c ; ./a.out 10 ## wrong value (i=1) at -O2 $ gcc-trunk -g -O2 abc.c $ gdb -x cmds -batch a.out Breakpoint 1 at 0x400451: file abc.c, line 15. Breakpoint 1, main () at abc.c:15 15 printf("%d\n", i); $1 = 1 Kill the program being debugged? (y or n) [answered Y; input not from terminal] [Inferior 1 (process 2788) killed] $ cat abc.c volatile int a; char b[10][10][1]; int c; int main() { int i, d; i = 0; for (; i < 10; i++) { c = 0; for (; c < 10; c++) { d = 0; for (; d < 1; d++) a = b[i][c][d]; } } printf("%d\n", i); } $ cat cmds b abc.c:15 r p i kill q