diff --git a/libcxx/src/new.cpp b/libcxx/src/new.cpp --- a/libcxx/src/new.cpp +++ b/libcxx/src/new.cpp @@ -57,6 +57,11 @@ !defined(_LIBCPP_ABI_VCRUNTIME) && \ !defined(_LIBCPP_DISABLE_NEW_DELETE_DEFINITIONS) +// Sanitizer runtimes provide their own definitions of new and delete operators. +#if !__has_feature(address_sanitizer) && \ + !__has_feature(hwaddress_sanitizer) && \ + !__has_feature(thread_sanitizer) + // Implement all new and delete operators as weak definitions // in this shared library, so that they can be overridden by programs // that define non-weak copies of the functions. @@ -298,4 +303,5 @@ } #endif // !_LIBCPP_HAS_NO_LIBRARY_ALIGNED_ALLOCATION +#endif // !address_sanitizer && !hwaddress_sanitizer && !thread_sanitizer #endif // !__GLIBCXX__ && !_LIBCPP_ABI_VCRUNTIME && !_LIBCPP_DISABLE_NEW_DELETE_DEFINITIONS diff --git a/libcxxabi/src/stdlib_new_delete.cpp b/libcxxabi/src/stdlib_new_delete.cpp --- a/libcxxabi/src/stdlib_new_delete.cpp +++ b/libcxxabi/src/stdlib_new_delete.cpp @@ -17,6 +17,12 @@ #error The _THROW_BAD_ALLOC, _NOEXCEPT, and _LIBCXXABI_WEAK libc++ macros must \ already be defined by libc++. #endif + +// Sanitizer runtimes provide their own definitions of new and delete operators. +#if !__has_feature(address_sanitizer) && \ + !__has_feature(hwaddress_sanitizer) && \ + !__has_feature(thread_sanitizer) + // Implement all new and delete operators as weak definitions // in this shared library, so that they can be overridden by programs // that define non-weak copies of the functions. @@ -259,4 +265,5 @@ ::operator delete[](ptr, alignment); } +#endif // !address_sanitizer && !hwaddress_sanitizer && !thread_sanitizer #endif // !_LIBCPP_HAS_NO_LIBRARY_ALIGNED_ALLOCATION