diff options
author | David Chisnall <csdavec@swan.ac.uk> | 2012-02-29 12:59:17 +0000 |
---|---|---|
committer | David Chisnall <csdavec@swan.ac.uk> | 2012-02-29 12:59:17 +0000 |
commit | e1da544e0bc73a39a8d519f8b68fc80467fb7d6d (patch) | |
tree | 6e34cbce1a3f7625280d8ac1d16238052a64dc10 /libcxx | |
parent | c7b718eb538a0a1a5110000778e646fb039bdd68 (diff) | |
download | bcm5719-llvm-e1da544e0bc73a39a8d519f8b68fc80467fb7d6d.tar.gz bcm5719-llvm-e1da544e0bc73a39a8d519f8b68fc80467fb7d6d.zip |
Some libcxxrt-compatibility cleanups (avoid defining things twice).
llvm-svn: 151717
Diffstat (limited to 'libcxx')
-rw-r--r-- | libcxx/src/exception.cpp | 52 | ||||
-rw-r--r-- | libcxx/src/new.cpp | 7 | ||||
-rw-r--r-- | libcxx/src/typeinfo.cpp | 2 |
3 files changed, 31 insertions, 30 deletions
diff --git a/libcxx/src/exception.cpp b/libcxx/src/exception.cpp index ac3a24165e7..92234b21d0f 100644 --- a/libcxx/src/exception.cpp +++ b/libcxx/src/exception.cpp @@ -32,51 +32,54 @@ static std::unexpected_handler __unexpected_handler; #endif // __APPLE__ +namespace std +{ + #if !defined(LIBCXXRT) && !defined(_LIBCPPABI_VERSION) // libcxxrt provides implementations of these functions itself. -std::unexpected_handler -std::set_unexpected(std::unexpected_handler func) _NOEXCEPT +unexpected_handler +set_unexpected(unexpected_handler func) _NOEXCEPT { return __sync_lock_test_and_set(&__unexpected_handler, func); } -std::unexpected_handler -std::get_unexpected() _NOEXCEPT +unexpected_handler +get_unexpected() _NOEXCEPT { - return __sync_fetch_and_add(&__unexpected_handler, (std::unexpected_handler)0); + return __sync_fetch_and_add(&__unexpected_handler, (unexpected_handler)0); } _ATTRIBUTE(noreturn) void -std::unexpected() +unexpected() { - (*std::get_unexpected())(); + (*get_unexpected())(); // unexpected handler should not return - std::terminate(); + terminate(); } -std::terminate_handler -std::set_terminate(std::terminate_handler func) _NOEXCEPT +terminate_handler +set_terminate(terminate_handler func) _NOEXCEPT { return __sync_lock_test_and_set(&__terminate_handler, func); } -std::terminate_handler -std::get_terminate() _NOEXCEPT +terminate_handler +get_terminate() _NOEXCEPT { - return __sync_fetch_and_add(&__terminate_handler, (std::terminate_handler)0); + return __sync_fetch_and_add(&__terminate_handler, (terminate_handler)0); } _ATTRIBUTE(noreturn) void -std::terminate() _NOEXCEPT +terminate() _NOEXCEPT { #ifndef _LIBCPP_NO_EXCEPTIONS try { #endif // _LIBCPP_NO_EXCEPTIONS - (*std::get_terminate())(); + (*get_terminate())(); // handler should not return ::abort (); #ifndef _LIBCPP_NO_EXCEPTIONS @@ -90,23 +93,17 @@ std::terminate() _NOEXCEPT } #endif // !defined(LIBCXXRT) && !defined(_LIBCPPABI_VERSION) -bool std::uncaught_exception() _NOEXCEPT +#ifndef LIBCXXRT +bool uncaught_exception() _NOEXCEPT { #if __APPLE__ // on Darwin, there is a helper function so __cxa_get_globals is private return __cxa_uncaught_exception(); -#elif LIBCXXRT - __cxa_eh_globals * globals = __cxa_get_globals(); - return (globals->uncaughtExceptions != 0); -#else // __APPLE__ #warning uncaught_exception not yet implemented ::abort(); #endif // __APPLE__ } -namespace std -{ - #ifndef _LIBCPPABI_VERSION exception::~exception() _NOEXCEPT @@ -128,6 +125,7 @@ const char* bad_exception::what() const _NOEXCEPT } #endif // _LIBCPPABI_VERSION +#endif //LIBCXXRT exception_ptr::~exception_ptr() _NOEXCEPT { @@ -184,15 +182,14 @@ nested_exception::rethrow_nested() const rethrow_exception(__ptr_); } -} // std -std::exception_ptr std::current_exception() _NOEXCEPT +exception_ptr current_exception() _NOEXCEPT { #if HAVE_DEPENDENT_EH_ABI // be nicer if there was a constructor that took a ptr, then // this whole function would be just: // return exception_ptr(__cxa_current_primary_exception()); - std::exception_ptr ptr; + exception_ptr ptr; ptr.__ptr_ = __cxa_current_primary_exception(); return ptr; #else // __APPLE__ @@ -202,7 +199,7 @@ std::exception_ptr std::current_exception() _NOEXCEPT } _ATTRIBUTE(noreturn) -void std::rethrow_exception(exception_ptr p) +void rethrow_exception(exception_ptr p) { #if HAVE_DEPENDENT_EH_ABI __cxa_rethrow_primary_exception(p.__ptr_); @@ -213,3 +210,4 @@ void std::rethrow_exception(exception_ptr p) ::abort(); #endif // __APPLE__ } +} // std diff --git a/libcxx/src/new.cpp b/libcxx/src/new.cpp index 11d7be62aff..1c171a871b9 100644 --- a/libcxx/src/new.cpp +++ b/libcxx/src/new.cpp @@ -24,7 +24,7 @@ static std::new_handler __new_handler; #endif -//#ifndef _LIBCPPABI_VERSION +#if !defined (LIBCXXRT) // && !defined(_LIBCPPABI_VERSION) // Implement all new and delete operators as weak definitions // in this shared library, so that they can be overriden by programs @@ -134,7 +134,7 @@ operator delete[] (void* ptr, const std::nothrow_t&) _NOEXCEPT ::operator delete[](ptr); } -//#endif // _LIBCPPABI_VERSION +#endif // !_LIBCPPABI_VERSION && !LIBCXXRT namespace std { @@ -155,6 +155,8 @@ get_new_handler() _NOEXCEPT return __sync_fetch_and_add(&__new_handler, (new_handler)0); } +#ifndef LIBCXXRT + bad_alloc::bad_alloc() _NOEXCEPT { } @@ -184,6 +186,7 @@ bad_array_new_length::what() const _NOEXCEPT } #endif +#endif //LIBCXXRT void __throw_bad_alloc() diff --git a/libcxx/src/typeinfo.cpp b/libcxx/src/typeinfo.cpp index 129998e5cd1..cfc64ef57a6 100644 --- a/libcxx/src/typeinfo.cpp +++ b/libcxx/src/typeinfo.cpp @@ -13,7 +13,7 @@ #include "typeinfo" -#ifndef _LIBCPPABI_VERSION +#if !(defined(_LIBCPPABI_VERSION) || defined(LIBCXXRT)) std::bad_cast::bad_cast() _NOEXCEPT { |