summaryrefslogtreecommitdiff
path: root/src/typeinfo.cpp
diff options
context:
space:
mode:
authorEric Fiselier <eric@efcs.ca>2017-01-02 21:58:06 +0000
committerEric Fiselier <eric@efcs.ca>2017-01-02 21:58:06 +0000
commitea38cde827cdb83134adb7eade860a9b77a486b6 (patch)
treed153d0f0e3141f6a0722defcd5e47a3698a1e47c /src/typeinfo.cpp
parent766e557e5aba9a26c63ca89bd8d7384a60b20c4c (diff)
downloadlibcxx-ea38cde827cdb83134adb7eade860a9b77a486b6.tar.gz
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. git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290839 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'src/typeinfo.cpp')
-rw-r--r--src/typeinfo.cpp12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/typeinfo.cpp b/src/typeinfo.cpp
index 3033c9800..d0a7dae38 100644
--- a/src/typeinfo.cpp
+++ b/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()