diff options
author | Eric Fiselier <eric@efcs.ca> | 2017-01-02 21:58:06 +0000 |
---|---|---|
committer | Eric Fiselier <eric@efcs.ca> | 2017-01-02 21:58:06 +0000 |
commit | 5d25843f66fbe0bed55bb2ae196e2748d94496c8 (patch) | |
tree | cefeeaac240751e48baad2a274202f2237542ec4 /libcxx/src/typeinfo.cpp | |
parent | e772e066860a6fac1df66dd1bb05629c00a26206 (diff) | |
download | bcm5719-llvm-5d25843f66fbe0bed55bb2ae196e2748d94496c8.tar.gz bcm5719-llvm-5d25843f66fbe0bed55bb2ae196e2748d94496c8.zip |
Fix configuring and building libc++ w/o an ABI library.
Typically libc++ uses libc++abi or libcxxrt to provide the ABI and runtime bits
of the C++ STL. However we also support building w/o an ABI library entirely.
This patch fixes building libc++ w/o an ABI library (and incorporates the
`~type_info()` fix in D28211).
The main changes in this patch are:
1) Add `-DLIBCXX_CXX_ABI=default` instead of using the empty string to mean "default".
2) Fix CMake bits which treated "none" as "default" on OS X.
3) Teach the source files to respect `-D_LIBCPP_BUILDING_HAS_NO_ABI_LIBRARY`.
4) Define ~type_info() when _LIBCPP_BUILDING_HAS_NO_ABI_LIBRARY is defined.
Unfortunately this patch doesn't help clean up the macro mess that we use to
configure for different ABI libraries.
llvm-svn: 290839
Diffstat (limited to 'libcxx/src/typeinfo.cpp')
-rw-r--r-- | libcxx/src/typeinfo.cpp | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/libcxx/src/typeinfo.cpp b/libcxx/src/typeinfo.cpp index 3033c9800f1..d0a7dae3802 100644 --- a/libcxx/src/typeinfo.cpp +++ b/libcxx/src/typeinfo.cpp @@ -8,13 +8,19 @@ //===----------------------------------------------------------------------===// #include <stdlib.h> -#if defined(__APPLE__) || defined(LIBCXXRT) || \ - defined(LIBCXX_BUILDING_LIBCXXABI) +#if !defined(_LIBCPP_BUILDING_HAS_NO_ABI_LIBRARY) && \ + (defined(__APPLE__) || defined(LIBCXXRT) || defined(LIBCXX_BUILDING_LIBCXXABI)) #include <cxxabi.h> #endif #include "typeinfo" +#if defined(_LIBCPP_BUILDING_HAS_NO_ABI_LIBRARY) +std::type_info::~type_info() +{ +} +#endif + #if !defined(LIBCXXRT) && !defined(_LIBCPPABI_VERSION) std::bad_cast::bad_cast() _NOEXCEPT @@ -47,7 +53,7 @@ std::bad_typeid::what() const _NOEXCEPT return "std::bad_typeid"; } -#ifdef __APPLE__ +#if defined(__APPLE__) && !defined(_LIBCPP_BUILDING_HAS_NO_ABI_LIBRARY) // On Darwin, the cxa_bad_* functions cannot be in the lower level library // because bad_cast and bad_typeid are defined in his higher level library void __cxxabiv1::__cxa_bad_typeid() |