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.