https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92387
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |wrong-debug Status|UNCONFIRMED |NEW Last reconfirmed| |2019-11-06 CC| |aoliva at gcc dot gnu.org, | |rguenth at gcc dot gnu.org Version|unknown |10.0 Ever confirmed|0 |1 --- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> --- Possibly caused by changed unroll heuristics. We end up with <bb 2> [local count: 119292717]: [t.c:7:3] # DEBUG BEGIN_STMT [t.c:7:11] # DEBUG d => 0 [t.c:8:3] # DEBUG BEGIN_STMT [t.c:8:3] c (); [t.c:9:3] # DEBUG BEGIN_STMT [t.c:9:5] # DEBUG i => 0 [t.c:10:3] # DEBUG BEGIN_STMT # DEBUG i => 0 [t.c:10:10] # DEBUG BEGIN_STMT # DEBUG i => 0 [t.c:11:5] # DEBUG BEGIN_STMT [t.c:11:5] c (); [t.c:12:5] # DEBUG BEGIN_STMT [t.c:10:17] # DEBUG BEGIN_STMT # DEBUG i => 1 [t.c:10:10] # DEBUG BEGIN_STMT # DEBUG i => 1 [t.c:11:5] # DEBUG BEGIN_STMT [t.c:11:5] c (); [t.c:12:5] # DEBUG BEGIN_STMT [t.c:10:17] # DEBUG BEGIN_STMT # DEBUG i => 2 [t.c:10:10] # DEBUG BEGIN_STMT # DEBUG i => 2 [t.c:11:5] # DEBUG BEGIN_STMT [t.c:11:5] c (); [t.c:12:5] # DEBUG BEGIN_STMT [t.c:10:17] # DEBUG BEGIN_STMT # DEBUG i => 3 [t.c:10:10] # DEBUG BEGIN_STMT # DEBUG i => 3 [t.c:11:5] # DEBUG BEGIN_STMT [t.c:11:5] c (); [t.c:12:5] # DEBUG BEGIN_STMT [t.c:10:17] # DEBUG BEGIN_STMT # DEBUG i => 4 [t.c:10:10] # DEBUG BEGIN_STMT # DEBUG i => 4 [t.c:11:5] # DEBUG BEGIN_STMT [t.c:11:5] c (); [t.c:12:5] # DEBUG BEGIN_STMT [t.c:10:17] # DEBUG BEGIN_STMT # DEBUG i => 5 [t.c:10:10] # DEBUG BEGIN_STMT # DEBUG i => 5 [t.c:11:5] # DEBUG BEGIN_STMT [t.c:11:5] c (); [t.c:12:5] # DEBUG BEGIN_STMT [t.c:10:17] # DEBUG BEGIN_STMT # DEBUG i => 6 [t.c:10:10] # DEBUG BEGIN_STMT # DEBUG i => 6 [t.c:11:5] # DEBUG BEGIN_STMT [t.c:11:5] c (); [t.c:12:5] # DEBUG BEGIN_STMT [t.c:10:17] # DEBUG BEGIN_STMT # DEBUG i => 7 [t.c:10:10] # DEBUG BEGIN_STMT # DEBUG i => 7 [t.c:11:5] # DEBUG BEGIN_STMT [t.c:11:5] c (); [t.c:12:5] # DEBUG BEGIN_STMT [t.c:10:17] # DEBUG BEGIN_STMT # DEBUG i => 8 [t.c:10:10] # DEBUG BEGIN_STMT [<built-in>:0:0] return 0; which also shows inconsistencies, when breaking on c() and looking at the 'up' location: (gdb) b c Breakpoint 1 at 0x400472: file t.c, line 4. Breakpoint 1, c () at t.c:4 4 b = 5 ^ a[b & 5]; (gdb) up #1 0x0000000000400487 in main () at t.c:8 8 c (); (gdb) p i $1 = <optimized out> Breakpoint 1, c () at t.c:4 4 b = 5 ^ a[b & 5]; (gdb) up #1 0x0000000000400491 in main () at t.c:11 11 c (); (gdb) p i $2 = 0 Breakpoint 1, c () at t.c:4 4 b = 5 ^ a[b & 5]; (gdb) up #1 0x000000000040049b in main () at t.c:12 12 if (d) printf("index = %d\n", i); // stop here. (gdb) p i $3 = 1 (gdb) c Breakpoint 1, c () at t.c:4 4 b = 5 ^ a[b & 5]; (gdb) up #1 0x00000000004004a5 in main () at t.c:12 12 if (d) printf("index = %d\n", i); // stop here. (gdb) p i $3 = 2 ... which also explains the original observation.