summaryrefslogtreecommitdiffstats
path: root/libcxxabi/src/cxa_new_delete.cpp
diff options
context:
space:
mode:
authorAsiri Rathnayake <asiri.rathnayake@arm.com>2016-05-31 12:01:32 +0000
committerAsiri Rathnayake <asiri.rathnayake@arm.com>2016-05-31 12:01:32 +0000
commit57e446dafafe4609d25395c05ee3c26b05499903 (patch)
tree08a58b8d85e6744c4e7eeedcf36301a94782bef2 /libcxxabi/src/cxa_new_delete.cpp
parent8f961aab25906379f84301082a899a11ad2af8f7 (diff)
downloadbcm5719-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.cpp12
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;
}
OpenPOWER on IntegriCloud