https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91610

            Bug ID: 91610
           Summary: fvar-tracking degrades -O0 debug info
           Product: gcc
           Version: 10.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: debug
          Assignee: unassigned at gcc dot gnu.org
          Reporter: vries at gcc dot gnu.org
  Target Milestone: ---

Consider this test-case:
...
$ cat test2.c
#include <stdio.h>

signed char
add_signed_char (signed char u, signed char v)
{
  return u + v;
}

signed char
wack_signed_char (signed char u, signed char v)
{
  signed char l = u, r = v;
  l = add_signed_char (l, r);
  return l + r;
}

int
main ()
{
  signed char res = wack_signed_char (-1, -2);
  printf ("%d\n", res);
  return 0;
}
...

When compiled with debug-info at -O0:
...
$ gcc test2.c -g
...

We get the expected value l == 2 out of this debug session:
...
$ gdb -q a.out -ex "b test2.c:13" -ex run
Reading symbols from a.out...done.
Breakpoint 1 at 0x400541: file test2.c, line 13.
Starting program: /data/gdb_versions/devel/a.out 

Breakpoint 1, wack_signed_char (u=-1 '\377', v=-2 '\376') at test2.c:13
13        l = add_signed_char (l, r);
(gdb) p l
$1 = -1 '\377'
(gdb) p r
$2 = -2 '\376'
(gdb) set variable l = 4
(gdb) p l
$3 = 4 '\004'
(gdb) n
14        return l + r;
(gdb) p l
$4 = 2 '\002'
...

However, with -fvar-tracking added:
...
$ gcc test2.c -g -fvar-tracking
...
we get an incorrect l == -3:
...
$ gdb -q a.out -ex "b test2.c:13" -ex run
Reading symbols from a.out...done.
Breakpoint 1 at 0x400541: file test2.c, line 13.
Starting program: /data/gdb_versions/devel/a.out 

Breakpoint 1, wack_signed_char (u=u@entry=-1 '\377', v=v@entry=-2 '\376') at
test2.c:13
13        l = add_signed_char (l, r);
(gdb) p l
$1 = -1 '\377'
(gdb) p r
$2 = -2 '\376'
(gdb) set variable l = 4
(gdb) p l
$3 = 4 '\004'
(gdb) n
14        return l + r;
(gdb) p l
$4 = -3 '\375'
...

Running -fvar-tracking at -O0 can improve debug info for local variables with
register storage class.

But it should not degrade debug info for local variables that have a stack
location assigned.

Reply via email to