summaryrefslogtreecommitdiffstats
path: root/libcxx/src
diff options
context:
space:
mode:
authorEric Fiselier <eric@efcs.ca>2019-03-05 01:57:01 +0000
committerEric Fiselier <eric@efcs.ca>2019-03-05 01:57:01 +0000
commite69290dc7ff7319acf5904f15ab6630fad07ab58 (patch)
tree35b89875fe5bc992c80f093fbaa91547aa06f9af /libcxx/src
parent3fd4a968ad80d603ea4dbd616c00824cf165e384 (diff)
downloadbcm5719-llvm-e69290dc7ff7319acf5904f15ab6630fad07ab58.tar.gz
bcm5719-llvm-e69290dc7ff7319acf5904f15ab6630fad07ab58.zip
Make VCRuntime ABI configuration a first-class option.
Summary: On Windows we currently provide two separate ABI configurations. One which defers to `vcruntime` to provide the C++ runtime and another which doesn't. Using `vcruntime` allows interoperability which programs compiled against the MSVC STL, and should be preferred whenever possible. When deferring to `vcruntime` much of the ABI we provide changes. Including the layout of `<stdexcept>` types, their vtables, and how the linkage of their members. This patch introduces the `_LIBCPP_ABI_VCRUNTIME` macro to denote this configuration. It also cleans up the existing configuration for using `vcruntime`. This cleanup lays the groundwork for fixing a number of ABI and interoperability bugs in `<stdexcept>`. Reviewers: thomasanderson, ldionne, smeenai Reviewed By: smeenai Subscribers: jdoerfert, libcxx-commits, #libc Differential Revision: https://reviews.llvm.org/D58942 llvm-svn: 355366
Diffstat (limited to 'libcxx/src')
-rw-r--r--libcxx/src/new.cpp6
-rw-r--r--libcxx/src/stdexcept.cpp2
-rw-r--r--libcxx/src/support/runtime/exception_msvc.ipp4
-rw-r--r--libcxx/src/typeinfo.cpp4
4 files changed, 8 insertions, 8 deletions
diff --git a/libcxx/src/new.cpp b/libcxx/src/new.cpp
index 4acb69391e0..eb629b36fa3 100644
--- a/libcxx/src/new.cpp
+++ b/libcxx/src/new.cpp
@@ -12,7 +12,7 @@
#include "include/atomic_support.h"
#if defined(_LIBCPP_ABI_MICROSOFT)
-#if defined(_LIBCPP_NO_VCRUNTIME)
+#if !defined(_LIBCPP_ABI_VCRUNTIME)
#include "support/runtime/new_handler_fallback.ipp"
#endif
#elif defined(LIBCXX_BUILDING_LIBCXXABI)
@@ -54,7 +54,7 @@ __throw_bad_alloc()
} // std
#if !defined(__GLIBCXX__) && \
- !defined(_LIBCPP_DEFER_NEW_TO_VCRUNTIME) && \
+ !defined(_LIBCPP_ABI_VCRUNTIME) && \
!defined(_LIBCPP_DISABLE_NEW_DELETE_DEFINITIONS)
// Implement all new and delete operators as weak definitions
@@ -298,4 +298,4 @@ operator delete[] (void* ptr, size_t, std::align_val_t alignment) _NOEXCEPT
}
#endif // !_LIBCPP_HAS_NO_LIBRARY_ALIGNED_ALLOCATION
-#endif // !__GLIBCXX__ && (!_LIBCPP_ABI_MICROSOFT || _LIBCPP_NO_VCRUNTIME) && !_LIBCPP_DISABLE_NEW_DELETE_DEFINITIONS
+#endif // !__GLIBCXX__ && !_LIBCPP_ABI_VCRUNTIME && !_LIBCPP_DISABLE_NEW_DELETE_DEFINITIONS
diff --git a/libcxx/src/stdexcept.cpp b/libcxx/src/stdexcept.cpp
index 179c25017bc..1507062a2a2 100644
--- a/libcxx/src/stdexcept.cpp
+++ b/libcxx/src/stdexcept.cpp
@@ -77,7 +77,7 @@ runtime_error::what() const _NOEXCEPT
return __imp_.c_str();
}
-#if !defined(_LIBCPP_ABI_MICROSOFT) || defined(_LIBCPP_NO_VCRUNTIME)
+#if !defined(_LIBCPP_ABI_VCRUNTIME)
logic_error::~logic_error() _NOEXCEPT {}
domain_error::~domain_error() _NOEXCEPT {}
diff --git a/libcxx/src/support/runtime/exception_msvc.ipp b/libcxx/src/support/runtime/exception_msvc.ipp
index 21119b0e987..7315b8261b7 100644
--- a/libcxx/src/support/runtime/exception_msvc.ipp
+++ b/libcxx/src/support/runtime/exception_msvc.ipp
@@ -82,7 +82,7 @@ int uncaught_exceptions() _NOEXCEPT {
return __uncaught_exceptions();
}
-#if defined(_LIBCPP_NO_VCRUNTIME)
+#if !defined(_LIBCPP_ABI_VCRUNTIME)
bad_cast::bad_cast() _NOEXCEPT
{
}
@@ -158,6 +158,6 @@ bad_array_new_length::what() const _NOEXCEPT
{
return "bad_array_new_length";
}
-#endif // _LIBCPP_NO_VCRUNTIME
+#endif // !_LIBCPP_ABI_VCRUNTIME
} // namespace std
diff --git a/libcxx/src/typeinfo.cpp b/libcxx/src/typeinfo.cpp
index b49c98273c5..5b893b1e68b 100644
--- a/libcxx/src/typeinfo.cpp
+++ b/libcxx/src/typeinfo.cpp
@@ -8,7 +8,7 @@
#include "typeinfo"
-#if defined(_LIBCPP_ABI_MICROSOFT) && defined(_LIBCPP_NO_VCRUNTIME)
+#if defined(_LIBCPP_ABI_MICROSOFT) && !defined(_LIBCPP_ABI_VCRUNTIME)
#include <string.h>
int std::type_info::__compare(const type_info &__rhs) const _NOEXCEPT {
@@ -49,7 +49,7 @@ size_t std::type_info::hash_code() const _NOEXCEPT {
// FIXME: Remove the _LIBCPP_BUILDING_HAS_NO_ABI_LIBRARY configuration.
#if (!defined(LIBCXX_BUILDING_LIBCXXABI) && !defined(LIBCXXRT) && \
!defined(__GLIBCXX__) && !defined(__APPLE__) && \
- !(defined(_LIBCPP_ABI_MICROSOFT) && !defined(_LIBCPP_NO_VCRUNTIME))) || \
+ !defined(_LIBCPP_ABI_VCRUNTIME)) || \
defined(_LIBCPP_BUILDING_HAS_NO_ABI_LIBRARY)
std::type_info::~type_info()
{
OpenPOWER on IntegriCloud