[Bug c/56143] New: Incorrect code generation with -O0 in x86_64

pcpa at mandriva dot com.br gcc-bugzilla@gcc.gnu.org
Wed Jan 30 01:59:00 GMT 2013


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

             Bug #: 56143
           Summary: Incorrect code generation with -O0 in x86_64
    Classification: Unclassified
           Product: gcc
           Version: 4.8.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
        AssignedTo: unassigned@gcc.gnu.org
        ReportedBy: pcpa@mandriva.com.br


Created attachment 29303
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=29303
lightning.i

$ rpm -q gcc
gcc-4.8.0-0.6.fc19.x86_64

I could not create a reduced example that would trigger the bug.
Attached is the .i file.
Search for "*_jit->pc.ui++ = i0 - (_jit->pc.w + 4);" for the two
occurrences of bad code generation.

If I modify the code to somewhat like:

"long w = i0 - (_jit->pc.w + 4); *_jit->pc.ui++ = w;" it works.


Some extra information just in case...

$ git clone git://git.savannah.gnu.org/lightning.git
$ cd lightning
$ autoreconf -ifs
$ ./configure --prefix=/usr
$ make CFLAGS="-O0 -g3 -Wall"
$ cd check
$ make debug
(gdb) r -v fib.tst
    0x7ffff7bff000      jmpq   0x7ffff7bff068 main:fib.tst:28
    0x7ffff7bff005      nopl   (%rax)
# nfibs:fib.tst:9
    0x7ffff7bff008      sub    $0x30,%rsp
    0x7ffff7bff00c      mov    %rbx,0x28(%rsp)
    0x7ffff7bff011      mov    %rbp,(%rsp)
    0x7ffff7bff015      mov    %rsp,%rbp
    0x7ffff7bff018      sub    $0x18,%rsp
    0x7ffff7bff01c      mov    %rdi,%r11
    0x7ffff7bff01f      mov    $0x1,%r10d
    0x7ffff7bff025      cmp    $0x2,%r11
    0x7ffff7bff029      jb     0x7ffff7bff050 nfibs:fib.tst:23
    0x7ffff7bff02f      sub    $0x1,%r11
    0x7ffff7bff033      mov    $0x1,%eax
# nfibs:fib.tst:17
    0x7ffff7bff038      sub    $0x1,%r11
    0x7ffff7bff03c      lea    (%rax,%r10,1),%rbx
    0x7ffff7bff040      mov    %r10,%rax
    0x7ffff7bff043      lea    0x1(%rbx),%r10
    0x7ffff7bff047      test   %r11,%r11
    0x7ffff7bff04a      jne    0x7ffff7bff034 nfibs:fib.tst:9   <<<< error here
# nfibs:fib.tst:23
[...]
Program received signal SIGSEGV, Segmentation fault.
0x00007ffff7bff034 in ?? ()

It did miscalculate the displacement, should have been
jne    0x7ffff7bff038
what happens if creating a temporary.



More information about the Gcc-bugs mailing list