summaryrefslogtreecommitdiffstats
path: root/libcxx/src/exception.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
commit5d25843f66fbe0bed55bb2ae196e2748d94496c8 (patch)
treecefeeaac240751e48baad2a274202f2237542ec4 /libcxx/src/exception.cpp
parente772e066860a6fac1df66dd1bb05629c00a26206 (diff)
downloadbcm5719-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/exception.cpp')
-rw-r--r--libcxx/src/exception.cpp6
1 files changed, 4 insertions, 2 deletions
diff --git a/libcxx/src/exception.cpp b/libcxx/src/exception.cpp
index 96bd7ee59a0..ec8969aaf4c 100644
--- a/libcxx/src/exception.cpp
+++ b/libcxx/src/exception.cpp
@@ -12,7 +12,8 @@
#include "exception"
#include "new"
-#if defined(__APPLE__) && !defined(LIBCXXRT)
+#if defined(__APPLE__) && !defined(LIBCXXRT) && \
+ !defined(_LIBCPP_BUILDING_HAS_NO_ABI_LIBRARY)
#include <cxxabi.h>
using namespace __cxxabiv1;
@@ -106,7 +107,8 @@ bool uncaught_exception() _NOEXCEPT { return uncaught_exceptions() > 0; }
int uncaught_exceptions() _NOEXCEPT
{
-#if defined(__APPLE__) || defined(_LIBCPPABI_VERSION)
+#if !defined(_LIBCPP_BUILDING_HAS_NO_ABI_LIBRARY) && \
+ (defined(__APPLE__) || defined(_LIBCPPABI_VERSION))
// on Darwin, there is a helper function so __cxa_get_globals is private
# if _LIBCPPABI_VERSION > 1101
return __cxa_uncaught_exceptions();
OpenPOWER on IntegriCloud