diff options
| author | Asiri Rathnayake <asiri.rathnayake@arm.com> | 2016-05-31 12:01:32 +0000 |
|---|---|---|
| committer | Asiri Rathnayake <asiri.rathnayake@arm.com> | 2016-05-31 12:01:32 +0000 |
| commit | 57e446dafafe4609d25395c05ee3c26b05499903 (patch) | |
| tree | 08a58b8d85e6744c4e7eeedcf36301a94782bef2 /libcxxabi/src/cxa_new_delete.cpp | |
| parent | 8f961aab25906379f84301082a899a11ad2af8f7 (diff) | |
| download | bcm5719-llvm-57e446dafafe4609d25395c05ee3c26b05499903.tar.gz bcm5719-llvm-57e446dafafe4609d25395c05ee3c26b05499903.zip | |
[libcxxabi] Introduce a -fno-exceptions libc++abi libary variant
Currently there is only support for a -fno-exceptions libc++ build. This is
problematic for functions such as std::terminate() which are defined in
libc++abi and using any of those functions throws away most of the benefits
of using -fno-exceptions (code-size). This patch introduces a -fno-exceptions
libc++abi build to address this issue.
This new variant of libc++abi cannot be linked against any with-exceptions
code as some symbols necessary for handling exceptions are missing in this
library.
Differential revision: http://reviews.llvm.org/D20677
Reviewers: EricWF, mclow.lists, bcraig
llvm-svn: 271267
Diffstat (limited to 'libcxxabi/src/cxa_new_delete.cpp')
| -rw-r--r-- | libcxxabi/src/cxa_new_delete.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/libcxxabi/src/cxa_new_delete.cpp b/libcxxabi/src/cxa_new_delete.cpp index 25a5454e05e..7a2c864c311 100644 --- a/libcxxabi/src/cxa_new_delete.cpp +++ b/libcxxabi/src/cxa_new_delete.cpp @@ -47,7 +47,11 @@ operator new(std::size_t size) if (nh) nh(); else +#ifndef _LIBCXXABI_NO_EXCEPTIONS throw std::bad_alloc(); +#else + break; +#endif } return p; } @@ -74,13 +78,17 @@ operator new(size_t size, const std::nothrow_t&) #endif { void* p = 0; +#ifndef _LIBCXXABI_NO_EXCEPTIONS try { +#endif p = ::operator new(size); +#ifndef _LIBCXXABI_NO_EXCEPTIONS } catch (...) { } +#endif return p; } @@ -115,13 +123,17 @@ operator new[](size_t size, const std::nothrow_t&) #endif { void* p = 0; +#ifndef _LIBCXXABI_NO_EXCEPTIONS try { +#endif p = ::operator new[](size); +#ifndef _LIBCXXABI_NO_EXCEPTIONS } catch (...) { } +#endif return p; } |

