diff options
author | anonymous <local@localhost> | 2011-01-09 05:08:40 +0600 |
---|---|---|
committer | anonymous <local@localhost> | 2011-01-09 05:08:40 +0600 |
commit | d473efff11e07e5761b3a873e3d00664e21159e2 (patch) | |
tree | 4bec2baa0660a4c125b8f8da61f29d37a081742f /src | |
parent | dfec1c218c7a78adb160e74eece66a1e0ffb99f1 (diff) | |
download | libcxxrt-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.cc | 21 |
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); |