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.

Reply via email to