This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH, testsuite]: Fix PR 65944, FAIL: g++.dg/lto/pr65276: undefined reference to std2::exception::~exception()


On Thu, Jun 18, 2015 at 11:05 AM, Uros Bizjak <ubizjak@gmail.com> wrote:

>> This patch causes failures in arm-none-linux-gnueabihf testing:
>>
>> PASS->FAIL: g++.dg/lto/pr65276 cp_lto_pr65276_0.o-cp_lto_pr65276_1.o link, -flto -O0 -std=c++11
>>
>> .../arm-none-linux-gnueabihf/obj/gcc4/gcc/testsuite/g++2/../../xg++ -B.../arm-none-linux-gnueabihf/obj/gcc4/gcc/testsuite/g++2/../../ cp_lto_pr65276_0.o cp_lto_pr65276_1.o -fno-diagnostics-show-caret -fdiagnostics-color=never -nostdinc++ -I.../arm-none-linux-gnueabihf/obj/gcc4/arm-none-linux-gnueabihf/libstdc++-v3/include/arm-none-linux-gnueabihf -I.../arm-none-linux-gnueabihf/obj/gcc4/arm-none-linux-gnueabihf/libstdc++-v3/include -I.../gcc/libstdc++-v3/libsupc++ -I.../gcc/libstdc++-v3/include/backward -I.../gcc/libstdc++-v3/testsuite/util -fmessage-length=0 -flto -O0 -std=c++11 -L.../arm-none-linux-gnueabihf/obj/gcc4/arm-none-linux-gnueabihf/./libstdc++-v3/src/.libs -B.../arm-none-linux-gnueabihf/obj/gcc4/arm-none-linux-gnueabihf/./libstdc++-v3/src/.libs -L.../arm-none-linux-gnueabihf/obj/gcc4/arm-none-linux-gnueabihf/./libstdc++-v3/src/.libs -o g++-dg-lto-pr65276-01.exe
>> cp_lto_pr65276_1.o (symbol from plugin): In function `typeinfo for std2::runtime_error':
>> (.text+0x0): multiple definition of `typeinfo name for std2::exception'
>> cp_lto_pr65276_0.o (symbol from plugin):(.text+0x0): first defined here
>> cp_lto_pr65276_1.o (symbol from plugin): In function `typeinfo for std2::runtime_error':
>> (.text+0x0): multiple definition of `typeinfo for std2::exception'
>> cp_lto_pr65276_0.o (symbol from plugin):(.text+0x0): first defined here
>> collect2: error: ld returned 1 exit status
>> compiler exited with status 1
>> output is:
>> cp_lto_pr65276_1.o (symbol from plugin): In function `typeinfo for std2::runtime_error':
>> (.text+0x0): multiple definition of `typeinfo name for std2::exception'
>> cp_lto_pr65276_0.o (symbol from plugin):(.text+0x0): first defined here
>> cp_lto_pr65276_1.o (symbol from plugin): In function `typeinfo for std2::runtime_error':
>> (.text+0x0): multiple definition of `typeinfo for std2::exception'
>> cp_lto_pr65276_0.o (symbol from plugin):(.text+0x0): first defined here
>> collect2: error: ld returned 1 exit status
>
> I discussed this patch privately with Jon, where he suggested that the
> approach is OK. The patch also works for me on both, CentOS 5.11 and
> Fedora 22.
>
> I'm out of ideas why this doesn't work on your system. Can you investigate it?

FYI, patched testcase compiles to following assembly on CentOS 5.11:

cp_lto_pr65276_0.o:     file format elf64-x86-64

Disassembly of section .text:

0000000000000000 <_ZN4std29exceptionD1Ev>:
  0:   55                      push   %rbp
  1:   48 89 e5                mov    %rsp,%rbp
  4:   48 83 ec 10             sub    $0x10,%rsp
  8:   48 89 7d f8             mov    %rdi,0xfffffffffffffff8(%rbp)
  c:   ba 00 00 00 00          mov    $0x0,%edx
                       d: R_X86_64_32  _ZTVN4std29exceptionE+0x10
 11:   48 8b 45 f8             mov    0xfffffffffffffff8(%rbp),%rax
 15:   48 89 10                mov    %rdx,(%rax)
 18:   b8 00 00 00 00          mov    $0x0,%eax
 1d:   85 c0                   test   %eax,%eax
 1f:   74 0c                   je     2d <_ZN4std29exceptionD1Ev+0x2d>
 21:   48 8b 45 f8             mov    0xfffffffffffffff8(%rbp),%rax
 25:   48 89 c7                mov    %rax,%rdi
 28:   e8 00 00 00 00          callq  2d <_ZN4std29exceptionD1Ev+0x2d>
                       29: R_X86_64_PC32       _ZdlPv+0xfffffffffffffffc
 2d:   c9                      leaveq
 2e:   c3                      retq
 2f:   90                      nop

0000000000000030 <_ZN4std29exceptionD0Ev>:
 30:   55                      push   %rbp
 31:   48 89 e5                mov    %rsp,%rbp
 34:   48 83 ec 10             sub    $0x10,%rsp
 38:   48 89 7d f8             mov    %rdi,0xfffffffffffffff8(%rbp)
 3c:   48 8b 45 f8             mov    0xfffffffffffffff8(%rbp),%rax
 40:   48 89 c7                mov    %rax,%rdi
 43:   e8 00 00 00 00          callq  48 <_ZN4std29exceptionD0Ev+0x18>
                       44: R_X86_64_PC32
_ZN4std29exceptionD1Ev+0xfffffffffffffffc
 48:   48 8b 45 f8             mov    0xfffffffffffffff8(%rbp),%rax
 4c:   48 89 c7                mov    %rax,%rdi
 4f:   e8 00 00 00 00          callq  54 <_ZN4std29exceptionD0Ev+0x24>
                       50: R_X86_64_PC32       _ZdlPv+0xfffffffffffffffc
 54:   c9                      leaveq
 55:   c3                      retq

Unpatched testcase produces empty object file.

Uros.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]