[Bug c++/53186] [C++11] missing devirtualization for operators "final"
vincenzo.innocente at cern dot ch
gcc-bugzilla@gcc.gnu.org
Thu May 3 06:43:00 GMT 2012
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53186
--- Comment #3 from vincenzo Innocente <vincenzo.innocente at cern dot ch> 2012-05-03 06:42:46 UTC ---
not bad…
hope it could be back ported to 4.7.1
c++ -std=gnu++11 -c opFinal.cpp; nm opFinal.o; otool -t -v -V -X opFinal.o |
c++filt
00000000000000b0 s EH_frame1
0000000000000021 T __Z4fooAR1A
0000000000000060 T __Z5fooF1R2F1
0000000000000094 T __Z5fooF2R2F2
0000000000000000 T __Z6fooAopR1A
0000000000000046 T __Z7fooF1opR2F1
000000000000007a T __Z7fooF2opR2F2
U __ZN2F11mEv
U __ZN2F1clEv
U __ZN2F21mEv
U __ZN2F2clEv
fooAop(A&):
pushq %rbp
movq %rsp,%rbp
subq $0x10,%rsp
movq %rdi,0xf8(%rbp)
movq 0xf8(%rbp),%rax
movq (%rax),%rax
movq (%rax),%rax
movq 0xf8(%rbp),%rdx
movq %rdx,%rdi
call *%rax
leave
ret
fooA(A&):
pushq %rbp
movq %rsp,%rbp
subq $0x10,%rsp
movq %rdi,0xf8(%rbp)
movq 0xf8(%rbp),%rax
movq (%rax),%rax
addq $0x08,%rax
movq (%rax),%rax
movq 0xf8(%rbp),%rdx
movq %rdx,%rdi
call *%rax
leave
ret
fooF1op(F1&):
pushq %rbp
movq %rsp,%rbp
subq $0x10,%rsp
movq %rdi,0xf8(%rbp)
movq 0xf8(%rbp),%rax
movq %rax,%rdi
callq F1::operator()()
leave
ret
fooF1(F1&):
pushq %rbp
movq %rsp,%rbp
subq $0x10,%rsp
movq %rdi,0xf8(%rbp)
movq 0xf8(%rbp),%rax
movq %rax,%rdi
callq F1::m()
leave
ret
fooF2op(F2&):
pushq %rbp
movq %rsp,%rbp
subq $0x10,%rsp
movq %rdi,0xf8(%rbp)
movq 0xf8(%rbp),%rax
movq %rax,%rdi
callq F2::operator()()
leave
ret
fooF2(F2&):
pushq %rbp
movq %rsp,%rbp
subq $0x10,%rsp
movq %rdi,0xf8(%rbp)
movq 0xf8(%rbp),%rax
movq %rax,%rdi
callq F2::m()
leave
ret
More information about the Gcc-bugs
mailing list