desktop-packages team mailing list archive
-
desktop-packages team
-
Mailing list archive
-
Message #157684
[Bug 1488254]
(In reply to comment #39)
> (In reply to comment #38)
> > The new ABI requires the full gcc abi-tag support to be compatible with
> > gcc. If you compile everything with clang and disable dual ABI support
> > you can get away with less, but what is the point? Just use the clang
> > libc++ instead, which requires no changes.
>
> [...]
>
> We need libc++ to work on the supported architectures with and without GNU
> libraries. Getting rid of the GNU counterparts is out of the question for
> any practical purpose.
So you're saying there is a use case to compile everything with clang
and libstdc++? If that is actually something you need, and you don't
need to be compatible to any name mangling, you just need the part of
the patch in D12834 accepting abi tags and you should be fine (no dual
ABI support ofc); no modifications to the name mangling
(lib/AST/ItaniumMangle.cpp) are necessary for that.
--
You received this bug notification because you are a member of Desktop
Packages, which is subscribed to llvm-toolchain-3.6 in Ubuntu.
https://bugs.launchpad.net/bugs/1488254
Title:
clang++ no longer ABI-compatible with g++
Status in LLVM:
Confirmed
Status in llvm-toolchain-3.6 package in Ubuntu:
Confirmed
Bug description:
$ cat foo.cc
#include <string>
std::string hello = "Hello, world!\n";
$ cat bar.cc
#include <string>
#include <iostream>
extern std::string hello;
int main() {
std::cout << hello;
return 0;
}
$ g++ -c foo.cc && g++ foo.o bar.cc && ./a.out
Hello, world!
$ clang++ -c foo.cc && clang++ foo.o bar.cc && ./a.out
Hello, world!
$ g++ -c foo.cc && clang++ foo.o bar.cc && ./a.out
/tmp/bar-34fb23.o: In function `main':
bar.cc:(.text+0x14): undefined reference to `hello'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
$ clang++ -c foo.cc && g++ foo.o bar.cc && ./a.out
/tmp/ccqU38Mh.o: In function `main':
bar.cc:(.text+0x5): undefined reference to `hello[abi:cxx11]'
collect2: error: ld returned 1 exit status
In practice, this means that many programs using C++ libraries other
than libstdc++ fail to compile with clang++. For example, mosh fails
with undefined references to
google::protobuf::internal::empty_string_,
google::protobuf::MessageLite::InitializationErrorString() const, and
google::protobuf::MessageLite::SerializeAsString() const.
To manage notifications about this bug go to:
https://bugs.launchpad.net/llvm/+bug/1488254/+subscriptions
References