Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/llvm/llvm-project.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorReid Kleckner <reid@kleckner.net>2014-10-04 00:03:47 +0400
committerReid Kleckner <reid@kleckner.net>2014-10-04 00:03:47 +0400
commitcf6b0c64b96cecaf961ef59f2b1db87f08f30881 (patch)
treea76732b016aace85f40ee07d0f1b355b918f880a /libcxxabi/src/cxa_default_handlers.cpp
parent3c51fa6aae263ee92a1340ca315da604264be9bc (diff)
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.cpp14
1 files changed, 8 insertions, 6 deletions
diff --git a/libcxxabi/src/cxa_default_handlers.cpp b/libcxxabi/src/cxa_default_handlers.cpp
index a26ea2a05b60..d34341aa3287 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);
}