Distinguish between library and language support for aligned allocation.
authorEric Fiselier <eric@efcs.ca>
Thu, 11 Oct 2018 00:17:24 +0000 (00:17 +0000)
committerEric Fiselier <eric@efcs.ca>
Thu, 11 Oct 2018 00:17:24 +0000 (00:17 +0000)
commit42f9868cd80d2e09c75f4642e0a66c7ecd38cf18
tree848b536158c20f7d3a43b96c833fb3e16b2a4d71
parentf953ea5fb6edbaee6c5bf051212e775dbabea8ff
Distinguish between library and language support for aligned allocation.

There are two cases:
1. The library has all it needs to provide align_val_t and the
new/delete overloads needed to support aligned allocation.
2. The compiler has actually turned the language feature on.

There are times where libc++ needs to distinguish between the two.

This patch adds the additional macro
_LIBCPP_HAS_NO_LIBRARY_ALIGNED_ALLOCATION which denotes when case (1)
does not hold. _LIBCPP_HAS_NO_ALIGNED_ALLOCATION is defined whenever
_LIBCPP_HAS_NO_LIBRARY_ALIGNED_ALLOCATION is defined, or when the
compiler has not enabled the language feature.

Additionally this patch cleans up a number of other macros related
to detection of aligned allocation machinery.

llvm-svn: 344207
libcxx/include/__config
libcxx/include/memory
libcxx/include/new
libcxx/src/new.cpp