summaryrefslogtreecommitdiff
path: root/gc_cpp.cc
diff options
context:
space:
mode:
authorIvan Maidanski <ivmai@mail.ru>2018-06-15 11:20:42 +0300
committerIvan Maidanski <ivmai@mail.ru>2018-06-15 11:20:42 +0300
commit4399253c2e84ce8bdddab1bd8b551fe9862e8807 (patch)
tree65d293ed122316a7c9614cbad37b8dc7b0ad2f57 /gc_cpp.cc
parent38b46be3ed7dd89bcda5418a67b01edc6dfd4a9c (diff)
downloadbdwgc-4399253c2e84ce8bdddab1bd8b551fe9862e8807.tar.gz
Do not specify throw(bad_alloc) in gc_cpp.h
(fix of commit cb1194d17) * gc_cpp.cc (GC_NEW_DELETE_NEED_THROW, GC_DECL_NEW_THROW): Move from gc_cpp.h. * include/gc_cpp.h (gc::new, new): Remove GC_DECL_NEW_THROW specifier. * include/gc_cpp.h [GC_OPERATOR_NEW_ARRAY] (gc::new[], new[]): Likewise.
Diffstat (limited to 'gc_cpp.cc')
-rw-r--r--gc_cpp.cc12
1 files changed, 12 insertions, 0 deletions
diff --git a/gc_cpp.cc b/gc_cpp.cc
index b8c8ad28..621a3165 100644
--- a/gc_cpp.cc
+++ b/gc_cpp.cc
@@ -29,8 +29,20 @@ built-in "new" and "delete".
#include "gc_cpp.h"
+#if !defined(GC_NEW_DELETE_THROW_NOT_NEEDED) \
+ && !defined(GC_NEW_DELETE_NEED_THROW) && GC_GNUC_PREREQ(4, 2) \
+ && (__cplusplus < 201103L || defined(__clang__))
+# define GC_NEW_DELETE_NEED_THROW
+#endif
+
#if !defined(_MSC_VER) && !defined(__DMC__)
+# ifdef GC_NEW_DELETE_NEED_THROW
+# define GC_DECL_NEW_THROW throw(std::bad_alloc)
+# else
+# define GC_DECL_NEW_THROW /* empty */
+# endif
+
void* operator new(size_t size) GC_DECL_NEW_THROW {
void* obj = GC_MALLOC_UNCOLLECTABLE(size);
GC_OP_NEW_OOM_CHECK(obj);