http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49888

           Summary: VTA: -O2 -g variable value changes, it does not change
                    in the source
           Product: gcc
           Version: 4.7.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: debug
        AssignedTo: unassig...@gcc.gnu.org
        ReportedBy: jan.kratoch...@redhat.com
                CC: aol...@gcc.gnu.org
            Target: x86_64-unknown-linux-gnu


static int v;
static void __attribute__((noinline, noclone))
f (int *p)
{
  int c = *p;
  v = c;
  *p = 2;
  v = 0; /* break-here */
}
int
main ()
{
  int v = 2;
  f (&v);
  return 0;
}
--------------------------------------------------------------------------------
FAIL: gcc (GCC) 4.5.4 20110728 (prerelease)
FAIL: gcc (GCC) 4.6.2 20110728 (prerelease)
FAIL: gcc (GCC) 4.7.0 20110728 (experimental)
-Wall -g -O2
--------------------------------------------------------------------------------
Breakpoint 1, f (p=0x7fffffffda44) at 8.c:7
7      *p = 2;
(gdb) disass
Dump of assembler code for function f:
=> 0x0000000000400480 <+0>:    movl   $0x2,(%rdi)
   0x0000000000400486 <+6>:    movl   $0x0,0x2003e8(%rip)        # 0x600878 <v>
   0x0000000000400490 <+16>:    retq   
End of assembler dump.
(gdb) p c
$1 = 1
(gdb) stepi
8      v = 0; /* break-here */
(gdb) p c

Actual:
$2 = 2
Expected:
$2 = 1

`c' is never changed in the source code, it should not change in runtime.
    <63>   DW_AT_location    : 2 byte block: 75 0       (DW_OP_breg5 (rdi): 0)

<optimized out> would be better than a wrong value.

Reply via email to