mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-11-23 05:40:09 +00:00
[libc++] Enable availability based on the compiler instead of __has_extension (#84065)
__has_extension(...) doesn't work as intended when -pedantic-errors is used with Clang. With that flag, __has_extension(...) is equivalent to __has_feature(...), which means that checks like __has_extension(pragma_clang_attribute_external_declaration) will return 0. In turn, this has the effect of disabling availability markup in libc++, which is undesirable. rdar://124078119 (cherry picked from commit 292a28df6c55679fad0589dea35278a8c66b2ae1)
This commit is contained in:
parent
55193c2ba5
commit
c14bf0a13d
@ -72,11 +72,10 @@
|
||||
# endif
|
||||
#endif
|
||||
|
||||
// Availability markup is disabled when building the library, or when the compiler
|
||||
// Availability markup is disabled when building the library, or when a non-Clang
|
||||
// compiler is used because only Clang supports the necessary attributes.
|
||||
// doesn't support the proper attributes.
|
||||
#if defined(_LIBCPP_BUILDING_LIBRARY) || defined(_LIBCXXABI_BUILDING_LIBRARY) || \
|
||||
!__has_feature(attribute_availability_with_strict) || !__has_feature(attribute_availability_in_templates) || \
|
||||
!__has_extension(pragma_clang_attribute_external_declaration)
|
||||
#if defined(_LIBCPP_BUILDING_LIBRARY) || defined(_LIBCXXABI_BUILDING_LIBRARY) || !defined(_LIBCPP_COMPILER_CLANG_BASED)
|
||||
# if !defined(_LIBCPP_HAS_NO_VENDOR_AVAILABILITY_ANNOTATIONS)
|
||||
# define _LIBCPP_HAS_NO_VENDOR_AVAILABILITY_ANNOTATIONS
|
||||
# endif
|
||||
|
22
libcxx/test/libcxx/vendor/apple/availability-with-pedantic-errors.compile.pass.cpp
vendored
Normal file
22
libcxx/test/libcxx/vendor/apple/availability-with-pedantic-errors.compile.pass.cpp
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// REQUIRES: stdlib=apple-libc++
|
||||
|
||||
// Test that using -pedantic-errors doesn't turn off availability annotations.
|
||||
// This used to be the case because we used __has_extension(...) to enable the
|
||||
// availability annotations, and -pedantic-errors changes the behavior of
|
||||
// __has_extension(...) in an incompatible way.
|
||||
|
||||
// ADDITIONAL_COMPILE_FLAGS: -pedantic-errors
|
||||
|
||||
#include <__availability>
|
||||
|
||||
#if defined(_LIBCPP_HAS_NO_VENDOR_AVAILABILITY_ANNOTATIONS)
|
||||
# error Availability annotations should be enabled on Apple platforms in the system configuration!
|
||||
#endif
|
Loading…
Reference in New Issue
Block a user