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