diff options
author | Reid Kleckner <reid@kleckner.net> | 2014-10-03 20:03:47 +0000 |
---|---|---|
committer | Reid Kleckner <reid@kleckner.net> | 2014-10-03 20:03:47 +0000 |
commit | cf6b0c64b96cecaf961ef59f2b1db87f08f30881 (patch) | |
tree | a76732b016aace85f40ee07d0f1b355b918f880a /libcxxabi/src/cxa_default_handlers.cpp | |
parent | 3c51fa6aae263ee92a1340ca315da604264be9bc (diff) | |
download | bcm5719-llvm-cf6b0c64b96cecaf961ef59f2b1db87f08f30881.tar.gz bcm5719-llvm-cf6b0c64b96cecaf961ef59f2b1db87f08f30881.zip |
Use __atomic_exchange_n instead of Clang's __sync_swap
Also remove an extra extern "C" from a global variable redeclaration.
This allows building libcxxabi with GCC on my system.
Reviewers: majnemer
Differential Revision: http://reviews.llvm.org/D5604
llvm-svn: 219012
Diffstat (limited to 'libcxxabi/src/cxa_default_handlers.cpp')
-rw-r--r-- | libcxxabi/src/cxa_default_handlers.cpp | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/libcxxabi/src/cxa_default_handlers.cpp b/libcxxabi/src/cxa_default_handlers.cpp index a26ea2a05b6..d34341aa328 100644 --- a/libcxxabi/src/cxa_default_handlers.cpp +++ b/libcxxabi/src/cxa_default_handlers.cpp @@ -101,9 +101,10 @@ namespace std unexpected_handler set_unexpected(unexpected_handler func) _NOEXCEPT { - if (func == 0) - func = default_unexpected_handler; - return __sync_swap(&__cxa_unexpected_handler, func); + if (func == 0) + func = default_unexpected_handler; + return __atomic_exchange_n(&__cxa_unexpected_handler, func, + __ATOMIC_ACQ_REL); // Using of C++11 atomics this should be rewritten // return __cxa_unexpected_handler.exchange(func, memory_order_acq_rel); } @@ -111,9 +112,10 @@ set_unexpected(unexpected_handler func) _NOEXCEPT terminate_handler set_terminate(terminate_handler func) _NOEXCEPT { - if (func == 0) - func = default_terminate_handler; - return __sync_swap(&__cxa_terminate_handler, func); + if (func == 0) + func = default_terminate_handler; + return __atomic_exchange_n(&__cxa_terminate_handler, func, + __ATOMIC_ACQ_REL); // Using of C++11 atomics this should be rewritten // return __cxa_terminate_handler.exchange(func, memory_order_acq_rel); } |