From: Eric Fiselier Date: Fri, 20 Jan 2017 01:47:26 +0000 (+0000) Subject: Disable aligned new/delete on Apple platforms without posix_memalign X-Git-Tag: llvmorg-5.0.0-rc1~14924 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=efea04512c28e1b8dea3d732e18a9213f3ed33c6;p=platform%2Fupstream%2Fllvm.git Disable aligned new/delete on Apple platforms without posix_memalign Summary: This patch disables the aligned new/delet overloads on Apple platforms without `posix_memalign`. This fixes libc++.dylib build regressions on such platforms. This fixes http://llvm.org/PR31448. This patch should also be merged into the 4.0 release branch Reviewers: mclow.lists, rsmith, dexonsmith, jeremyhu Reviewed By: mclow.lists Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D28931 llvm-svn: 292564 --- diff --git a/libcxx/include/__config b/libcxx/include/__config index f214c7b..63f477b 100644 --- a/libcxx/include/__config +++ b/libcxx/include/__config @@ -848,6 +848,18 @@ template struct __static_assert_check {}; #define _DECLARE_C99_LDBL_MATH 1 #endif +#if defined(__APPLE__) +# if !defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && \ + defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) +# define __MAC_OS_X_VERSION_MIN_REQUIRED __ENVIROMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ +# endif +# if defined(__MAC_OS_X_VERSION_MIN_REQUIRED) +# if __MAC_OS_X_VERSION_MIN_REQUIRED < 1060 +# define _LIBCPP_HAS_NO_ALIGNED_ALLOCATION +# endif +# endif +#endif // defined(__APPLE__) + #if defined(__APPLE__) || defined(__FreeBSD__) #define _LIBCPP_HAS_DEFAULTRUNELOCALE #endif diff --git a/libcxx/include/new b/libcxx/include/new index 6589f16..6e43501 100644 --- a/libcxx/include/new +++ b/libcxx/include/new @@ -101,8 +101,9 @@ void operator delete[](void* ptr, void*) noexcept; # define _LIBCPP_HAS_NO_SIZED_DEALLOCATION #endif -#if !(defined(_LIBCPP_BUILDING_NEW) || _LIBCPP_STD_VER > 14 || \ - (defined(__cpp_aligned_new) && __cpp_aligned_new >= 201606)) +#if !defined(_LIBCPP_HAS_NO_ALIGNED_ALLOCATION) && \ + (!(defined(_LIBCPP_BUILDING_NEW) || _LIBCPP_STD_VER > 14 || \ + (defined(__cpp_aligned_new) && __cpp_aligned_new >= 201606))) # define _LIBCPP_HAS_NO_ALIGNED_ALLOCATION #endif diff --git a/libcxx/src/new.cpp b/libcxx/src/new.cpp index 391718f..b1e8ee3 100644 --- a/libcxx/src/new.cpp +++ b/libcxx/src/new.cpp @@ -151,6 +151,8 @@ operator delete[] (void* ptr, size_t) _NOEXCEPT ::operator delete[](ptr); } +#if !defined(_LIBCPP_HAS_NO_ALIGNED_ALLOCATION) + _LIBCPP_WEAK void * operator new(std::size_t size, std::align_val_t alignment) _THROW_BAD_ALLOC @@ -275,6 +277,8 @@ operator delete[] (void* ptr, size_t, std::align_val_t alignment) _NOEXCEPT ::operator delete[](ptr, alignment); } +#endif // !defined(_LIBCPP_HAS_NO_ALIGNED_ALLOCATION) + #endif // !__GLIBCXX__ namespace std