summaryrefslogtreecommitdiff
path: root/src/typeinfo.cpp
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2013-04-27 17:27:12 +0000
committerDimitry Andric <dim@FreeBSD.org>2013-04-27 17:27:12 +0000
commit527d9fcb66574fdd657c3235c0d7cba7c5439d5c (patch)
treef4dbdda47a8f2e8eb8196e6a33ed834e8400837e /src/typeinfo.cpp
parentc7f918d0681828afdbddfdcc354b6f3dfc2a7b68 (diff)
Notes
Diffstat (limited to 'src/typeinfo.cpp')
-rw-r--r--src/typeinfo.cpp18
1 files changed, 14 insertions, 4 deletions
diff --git a/src/typeinfo.cpp b/src/typeinfo.cpp
index 6bab0771f427..60828944a1bc 100644
--- a/src/typeinfo.cpp
+++ b/src/typeinfo.cpp
@@ -12,7 +12,7 @@
#define __has_include(inc) 0
#endif
-#if __APPLE__
+#ifdef __APPLE__
#include <cxxabi.h>
#elif defined(LIBCXXRT) || __has_include(<cxxabi.h>)
#include <cxxabi.h>
@@ -50,11 +50,21 @@ std::bad_typeid::what() const _NOEXCEPT
return "std::bad_typeid";
}
-#if __APPLE__
+#ifdef __APPLE__
// 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() { throw std::bad_typeid(); }
- void __cxxabiv1::__cxa_bad_cast() { throw std::bad_cast(); }
+ void __cxxabiv1::__cxa_bad_typeid()
+ {
+#ifndef _LIBCPP_NO_EXCEPTIONS
+ throw std::bad_typeid();
+#endif
+ }
+ void __cxxabiv1::__cxa_bad_cast()
+ {
+#ifndef _LIBCPP_NO_EXCEPTIONS
+ throw std::bad_cast();
+#endif
+ }
#endif
#endif // _LIBCPPABI_VERSION