Libc++ needs to know when aligned allocation is supported by clang, but is otherwise unavailable at link time. Otherwise, libc++ will incorrectly end up generating calls to __builtin_operator_new/__builtin_operator_delete which alignment arguments.
This patch implements the following changes:
- The __cpp_aligned_new feature test macro to no longer be defined when aligned allocation is otherwise enabled but unavailable.
- The Darwin driver no longer passes -faligned-alloc-unavailable when the user manually specifies any of -faligned-allocation, -fno-aligned-allocation, or -nostdinc++. (Though I'm not sure we should this for -nostdinc++ since it makes this behavior to test within libc++, since the libc++ tests must always pass -nostdinc++).
- Instead of a warning Clang now generates a hard error when an aligned allocation or deallocation function is referenced but unavailable.