diff options
Diffstat (limited to 'libcxx/include')
| -rw-r--r-- | libcxx/include/exception | 6 | ||||
| -rw-r--r-- | libcxx/include/new | 26 | ||||
| -rw-r--r-- | libcxx/include/typeinfo | 7 |
3 files changed, 31 insertions, 8 deletions
diff --git a/libcxx/include/exception b/libcxx/include/exception index 98e1f37f919..db11c36d806 100644 --- a/libcxx/include/exception +++ b/libcxx/include/exception @@ -82,6 +82,10 @@ template <class E> void rethrow_if_nested(const E& e); #include <cstdlib> #include <type_traits> +#if defined(_LIBCPP_ABI_MICROSOFT) +#include <vcruntime_exception.h> +#endif + #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) #pragma GCC system_header #endif @@ -89,6 +93,7 @@ template <class E> void rethrow_if_nested(const E& e); namespace std // purposefully not using versioning namespace { +#if !defined(_LIBCPP_ABI_MICROSOFT) class _LIBCPP_EXCEPTION_ABI exception { public: @@ -105,6 +110,7 @@ public: virtual ~bad_exception() _NOEXCEPT; virtual const char* what() const _NOEXCEPT; }; +#endif // !_LIBCPP_ABI_MICROSOFT typedef void (*unexpected_handler)(); _LIBCPP_FUNC_VIS unexpected_handler set_unexpected(unexpected_handler) _NOEXCEPT; diff --git a/libcxx/include/new b/libcxx/include/new index 86428f281dc..c0e7b2dafe5 100644 --- a/libcxx/include/new +++ b/libcxx/include/new @@ -92,6 +92,10 @@ void operator delete[](void* ptr, void*) noexcept; #include <cstdlib> #endif +#if defined(_LIBCPP_ABI_MICROSOFT) +#include <new.h> +#endif + #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) #pragma GCC system_header #endif @@ -110,6 +114,10 @@ void operator delete[](void* ptr, void*) noexcept; namespace std // purposefully not using versioning namespace { +#if !defined(_LIBCPP_ABI_MICROSOFT) +struct _LIBCPP_TYPE_VIS nothrow_t {}; +extern _LIBCPP_FUNC_VIS const nothrow_t nothrow; + class _LIBCPP_EXCEPTION_ABI bad_alloc : public exception { @@ -128,9 +136,15 @@ public: virtual const char* what() const _NOEXCEPT; }; +typedef void (*new_handler)(); +_LIBCPP_FUNC_VIS new_handler set_new_handler(new_handler) _NOEXCEPT; +_LIBCPP_FUNC_VIS new_handler get_new_handler() _NOEXCEPT; + +#endif // !_LIBCPP_ABI_MICROSOFT + _LIBCPP_NORETURN _LIBCPP_FUNC_VIS void __throw_bad_alloc(); // not in C++ spec -#if defined(_LIBCPP_BUILDING_NEW) || (_LIBCPP_STD_VER > 11) +#if defined(_LIBCPP_BUILDING_LIBRARY) || (_LIBCPP_STD_VER > 11) class _LIBCPP_EXCEPTION_ABI bad_array_length : public bad_alloc @@ -153,12 +167,6 @@ enum align_val_t { __zero = 0, __max = (size_t)-1 }; #endif #endif -struct _LIBCPP_TYPE_VIS nothrow_t {}; -extern _LIBCPP_FUNC_VIS const nothrow_t nothrow; -typedef void (*new_handler)(); -_LIBCPP_FUNC_VIS new_handler set_new_handler(new_handler) _NOEXCEPT; -_LIBCPP_FUNC_VIS new_handler get_new_handler() _NOEXCEPT; - } // std #if defined(_LIBCPP_CXX03_LANG) @@ -167,6 +175,8 @@ _LIBCPP_FUNC_VIS new_handler get_new_handler() _NOEXCEPT; #define _THROW_BAD_ALLOC #endif +#if !defined(_LIBCPP_ABI_MICROSOFT) + _LIBCPP_OVERRIDABLE_FUNC_VIS void* operator new(std::size_t __sz) _THROW_BAD_ALLOC; _LIBCPP_OVERRIDABLE_FUNC_VIS void* operator new(std::size_t __sz, const std::nothrow_t&) _NOEXCEPT _NOALIAS; _LIBCPP_OVERRIDABLE_FUNC_VIS void operator delete(void* __p) _NOEXCEPT; @@ -206,6 +216,8 @@ inline _LIBCPP_INLINE_VISIBILITY void* operator new[](std::size_t, void* __p) _N inline _LIBCPP_INLINE_VISIBILITY void operator delete (void*, void*) _NOEXCEPT {} inline _LIBCPP_INLINE_VISIBILITY void operator delete[](void*, void*) _NOEXCEPT {} +#endif // !_LIBCPP_ABI_MICROSOFT + _LIBCPP_BEGIN_NAMESPACE_STD inline _LIBCPP_INLINE_VISIBILITY void *__allocate(size_t __size) { diff --git a/libcxx/include/typeinfo b/libcxx/include/typeinfo index fdc25c81e94..4145ac1a373 100644 --- a/libcxx/include/typeinfo +++ b/libcxx/include/typeinfo @@ -69,7 +69,9 @@ public: #pragma GCC system_header #endif -#if defined(_LIBCPP_NONUNIQUE_RTTI_BIT) +#if defined(_LIBCPP_ABI_MICROSOFT) +#include <vcruntime_typeinfo.h> +#elif defined(_LIBCPP_NONUNIQUE_RTTI_BIT) #define _LIBCPP_HAS_NONUNIQUE_TYPEINFO #else #define _LIBCPP_HAS_UNIQUE_TYPEINFO @@ -78,6 +80,7 @@ public: namespace std // purposefully not using versioning namespace { +#if !defined(_LIBCPP_ABI_MICROSOFT) class _LIBCPP_EXCEPTION_ABI type_info { type_info& operator=(const type_info&); @@ -187,6 +190,8 @@ public: virtual const char* what() const _NOEXCEPT; }; +#endif // !_LIBCPP_ABI_MICROSOFT + } // std _LIBCPP_BEGIN_NAMESPACE_STD |

