summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoranonymous <local@localhost>2011-01-09 05:08:40 +0600
committeranonymous <local@localhost>2011-01-09 05:08:40 +0600
commitd473efff11e07e5761b3a873e3d00664e21159e2 (patch)
tree4bec2baa0660a4c125b8f8da61f29d37a081742f /src
parentdfec1c218c7a78adb160e74eece66a1e0ffb99f1 (diff)
downloadlibcxxrt-d473efff11e07e5761b3a873e3d00664e21159e2.tar.gz
libcxxrt-d473efff11e07e5761b3a873e3d00664e21159e2.tar.bz2
libcxxrt-d473efff11e07e5761b3a873e3d00664e21159e2.tar.xz
nothrow operator new was implemented (fix for COMPILER-8913)
Diffstat (limited to 'src')
-rw-r--r--src/memory.cc21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/memory.cc b/src/memory.cc
index f8719e7..16167ff 100644
--- a/src/memory.cc
+++ b/src/memory.cc
@@ -41,6 +41,27 @@ void * operator new(size_t size) {
}
+namespace std {
+ struct nothrow_t {};
+}
+
+__attribute__((weak))
+void * operator new(size_t size, const std::nothrow_t &) throw() {
+
+ void * mem = malloc(size);
+ while(mem == NULL) {
+ if(new_handl != NULL) {
+ new_handl();
+ } else {
+ return NULL;
+ }
+ mem = malloc(size);
+ }
+
+ return mem;
+}
+
+
__attribute__((weak))
void operator delete(void * ptr) {
free(ptr);