[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#834492: marked as done (clang-3.9: "non-virtual thunk" abi_tag mangling is different from g++)



Your message dated Sun, 4 Sep 2016 13:46:35 +0200
with message-id <86abefe7-ff14-92a5-2098-518e208b48a8@debian.org>
and subject line Fixed in 6.2.0-2
has caused the Debian Bug report #834492,
regarding clang-3.9: "non-virtual thunk" abi_tag mangling is different from g++
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
834492: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=834492
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- Begin Message ---
Package: clang-3.9
Version: 1:3.9~+rc1-1~exp1
Severity: important

Dear Maintainer,

The new mangling behavior of clang++ for GCC abi_tag attribute seems to be
different from the g++ one on some edge cases.

Consider the following code:
$ cat classes.hpp
#include <string>

struct Mother
{
  virtual ~Mother() {};
  int bar;
};

struct Father
{
  virtual std::string get_foo()  = 0;
};

class Derived:
  public Mother,
  public Father
{
public:
  std::string get_foo();
};

$ cat classes.cpp
#include "classes.hpp"

std::string Derived::get_foo() { return ""; }

$ cat main.cpp
#include "classes.hpp"

struct Final:
  public Derived
{
};

int main()
{
  Final().get_foo();
}

When compiling the classes with clang++ and trying to link the executable with
g++ one gets the following link error:
$ clang++-3.9 -c classes.cpp && g++-5 main.cpp classes.o
/tmp/cchpctTt.o:main.cpp:vtable for Final : erreur : référence à « non-
virtual thunk to Derived::get_foo() » non définie
collect2: error: ld returned 1 exit status

And it seems this symbol is mangled differently by clang++ and g++:
$ clang++-3.9 -c classes.cpp && nm -C classes.o | grep get_foo
0000000000000000 T Derived::get_foo[abi:cxx11]()
0000000000000070 T non-virtual thunk to Derived::get_foo[abi:cxx11]()

$ g++-5 -c classes.cpp && nm -C classes.o | grep get_foo
0000000000000000 T Derived::get_foo[abi:cxx11]()
0000000000000065 T non-virtual thunk to Derived::get_foo()



-- System Information:
Debian Release: stretch/sid
  APT prefers testing
  APT policy: (990, 'testing'), (800, 'stable-updates'), (800, 'stable'), (700, 'unstable'), (90, 'experimental')
Architecture: amd64 (x86_64)

Kernel: Linux 4.6.0-1-amd64 (SMP w/8 CPU cores)
Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)

Versions of packages clang-3.9 depends on:
ii  binutils                 2.26.1-1
ii  libc6                    2.23-4
ii  libc6-dev                2.23-4
ii  libclang-common-3.9-dev  1:3.9~+rc1-1~exp1
ii  libclang1-3.9            1:3.9~+rc1-1~exp1
ii  libgcc-6-dev             6.1.1-10
ii  libgcc1                  1:6.1.1-10
ii  libllvm3.9               1:3.9~+rc1-1~exp1
ii  libobjc-6-dev            6.1.1-10
ii  libstdc++-6-dev          6.1.1-10
ii  libstdc++6               6.1.1-10

Versions of packages clang-3.9 recommends:
ii  llvm-3.9-dev  1:3.9~+rc1-1~exp1
ii  python        2.7.11-2

Versions of packages clang-3.9 suggests:
pn  clang-3.9-doc  <none>
pn  gnustep        <none>
pn  gnustep-devel  <none>

-- no debconf information

--- End Message ---
--- Begin Message ---
Version: 6.2.0-2

--- End Message ---

Reply to: