diff options
author | Eric Fiselier <eric@efcs.ca> | 2019-03-05 01:57:01 +0000 |
---|---|---|
committer | Eric Fiselier <eric@efcs.ca> | 2019-03-05 01:57:01 +0000 |
commit | e69290dc7ff7319acf5904f15ab6630fad07ab58 (patch) | |
tree | 35b89875fe5bc992c80f093fbaa91547aa06f9af /libcxx/src/new.cpp | |
parent | 3fd4a968ad80d603ea4dbd616c00824cf165e384 (diff) | |
download | bcm5719-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/new.cpp')
-rw-r--r-- | libcxx/src/new.cpp | 6 |
1 files changed, 3 insertions, 3 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 |