optimization/10877: [3.3/3.4 regression] miscompilation with -O3 -fPIC on x86

Andrew Pinski pinskia@physics.uc.edu
Tue May 20 03:06:00 GMT 2003


It does not fail for me though on i686-pc-linux-gnu with GCC: 3.4  
20030517 (experimental).
Or on i686-unkown-openbsd3.1 with gcc version 3.4 20030519  
(experimental).

tin:~/src/gnu/gcc>g++ -O3 -fPIC ../gcctest/testpic.cc
tin:~/src/gnu/gcc>./a.out
tin:~/src/gnu/gcc>more ../gcctest/testpic.cc
     int* i;

     int& get_x() {
       return *i;
     }

     int main() {
       int j;
       i = &j;
       get_x();
     }

Thanks,
Andrew Pinski

PS here is the asm from a working version:

         .file   "testpic.cc"
.globl i
         .bss
         .align 4
         .type   i, @object
         .size   i, 4
i:
         .zero   4
         .text
         .align 2
         .p2align 4,,15
.globl _Z5get_xv
         .type   _Z5get_xv, @function
_Z5get_xv:
.LFB4:
         call    __i686.get_pc_thunk.ax
         addl    $_GLOBAL_OFFSET_TABLE_, %eax
         pushl   %ebp
.LCFI0:
         movl    i@GOT(%eax), %edx
         movl    %esp, %ebp
.LCFI1:
         popl    %ebp
         movl    (%edx), %eax
         ret
.LFE4:
         .size   _Z5get_xv, .-_Z5get_xv
         .align 2
         .p2align 4,,15
.globl main
         .type   main, @function
main:
.LFB5:
         pushl   %ebp
.LCFI2:
         movl    %esp, %ebp
.LCFI3:
         leal    -8(%ebp), %eax
         pushl   %ebx
.LCFI4:
         subl    $4, %esp
.LCFI5:
         andl    $-16, %esp
         call    __i686.get_pc_thunk.bx
         addl    $_GLOBAL_OFFSET_TABLE_, %ebx
         movl    i@GOT(%ebx), %ecx
         movl    %eax, (%ecx)
         call    _Z5get_xv@PLT
         movl    -4(%ebp), %ebx
         xorl    %eax, %eax
         leave
         ret
.LFE5:
         .size   main, .-main
         .section         
.gnu.linkonce.t.__i686.get_pc_thunk.ax,"ax",@progbits
.globl __i686.get_pc_thunk.ax
         .hidden __i686.get_pc_thunk.ax
         .type   __i686.get_pc_thunk.ax, @function
__i686.get_pc_thunk.ax:
         movl    (%esp), %eax
         ret
         .section         
.gnu.linkonce.t.__i686.get_pc_thunk.bx,"ax",@progbits
.globl __i686.get_pc_thunk.bx
         .hidden __i686.get_pc_thunk.bx
         .type   __i686.get_pc_thunk.bx, @function
__i686.get_pc_thunk.bx:
         movl    (%esp), %ebx
         ret
         .ident  "GCC: (GNU) 3.4 20030517 (experimental)"


http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit- 
trail&database=gcc&pr=10877



More information about the Gcc-bugs mailing list