summaryrefslogtreecommitdiff
path: root/memory.cc
diff options
context:
space:
mode:
authorDavid Chisnall <theraven@FreeBSD.org>2011-11-26 14:18:39 +0000
committerDavid Chisnall <theraven@FreeBSD.org>2011-11-26 14:18:39 +0000
commit1b99eac6fdcc6d6ae1a6abcc52c0c8bd5f55e752 (patch)
tree3c1b7a8a2dff35fa8a0f8fe3d14f3be77a7f32c8 /memory.cc
parent1d4efa7c24f8c9b65164ed9bf06aeab1f5fa2dfa (diff)
Imported the latest version of libcxxrt.vendor/libcxxrt/8931d9e5180830a5433d16ae6b3ad8dd9e629512
Approved by: dim (mentor)
Notes
svn path=/vendor/libcxxrt/dist/; revision=227995 svn path=/vendor/libcxxrt/8931d9e5180830a5433d16ae6b3ad8dd9e629512/; revision=227997; tag=vendor/libcxxrt/8931d9e5180830a5433d16ae6b3ad8dd9e629512
Diffstat (limited to 'memory.cc')
-rw-r--r--memory.cc8
1 files changed, 6 insertions, 2 deletions
diff --git a/memory.cc b/memory.cc
index 655c76107a13..027bc3fef7fa 100644
--- a/memory.cc
+++ b/memory.cc
@@ -11,6 +11,10 @@
#include <stdlib.h>
#include "stdexcept.h"
+#if !__has_builtin(__sync_swap)
+#define __sync_swap __sync_lock_test_and_set
+#endif
+
namespace std
{
struct nothrow_t {};
@@ -33,7 +37,7 @@ namespace std
__attribute__((weak))
new_handler set_new_handler(new_handler handler)
{
- return __sync_lock_test_and_set(&new_handl, handler);
+ return __sync_swap(&new_handl, handler);
}
}
@@ -103,7 +107,7 @@ void * operator new[](size_t size)
__attribute__((weak))
-void operator delete[](void * ptr)
+void operator delete[](void * ptr) throw()
{
::operator delete(ptr);
}