123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- diff --git a/include/__config b/include/__config
- index e431997..3b1c3a6 100644
- --- a/include/__config
- +++ b/include/__config
- @@ -28,13 +28,35 @@
- # define _LIBCPP_GCC_VER (__GNUC__ * 100 + __GNUC_MINOR__)
- #endif
-
- +// Move outside #ifdef __cplusplus because this needs to work in both C and C++ headers.
- +#if defined(__apple_build_version__)
- +# define _LIBCPP_COMPILER_CLANG_BASED
- +# define _LIBCPP_APPLE_CLANG_VER (__apple_build_version__ / 10000)
- +#elif defined(__clang__)
- +# define _LIBCPP_COMPILER_CLANG
- +# define _LIBCPP_COMPILER_CLANG_BASED
- +# define _LIBCPP_CLANG_VER (__clang_major__ * 100 + __clang_minor__)
- +#elif defined(__GNUC__)
- +# define _LIBCPP_COMPILER_GCC
- +#elif defined(_MSC_VER)
- +# define _LIBCPP_COMPILER_MSVC
- +
- +# if _MSVC_LANG == 201705L
- +# define _LIBCPP_STD_VER 20
- +# elif _MSVC_LANG == 201703L
- +# define _LIBCPP_STD_VER 17
- +# else
- +# define _LIBCPP_STD_VER 14
- +# endif
- +#endif
- +
- #ifdef __cplusplus
-
- // Warn if a compiler version is used that is not supported anymore
- // LLVM RELEASE Update the minimum compiler versions
- # if defined(_LIBCPP_CLANG_VER)
- # if _LIBCPP_CLANG_VER < 1500
- -# warning "Libc++ only supports Clang 15 and later"
- +// we temporary allow old clang-s # warning "Libc++ only supports Clang 15 and later"
- # endif
- # elif defined(_LIBCPP_APPLE_CLANG_VER)
- # if _LIBCPP_APPLE_CLANG_VER < 1500
- @@ -87,7 +109,7 @@
- # define _LIBCPP_OBJECT_FORMAT_ELF 1
- # elif defined(__MACH__)
- # define _LIBCPP_OBJECT_FORMAT_MACHO 1
- -# elif defined(_WIN32)
- +# elif defined(_WIN32) || defined(__CYGWIN__)
- # define _LIBCPP_OBJECT_FORMAT_COFF 1
- # elif defined(__wasm__)
- # define _LIBCPP_OBJECT_FORMAT_WASM 1
- @@ -772,7 +794,7 @@ typedef __char32_t char32_t;
- // TODO: We provide a escape hatch with _LIBCPP_NO_ABI_TAG for folks who want to avoid increasing
- // the length of symbols with an ABI tag. In practice, we should remove the escape hatch and
- // use compression mangling instead, see https://github.com/itanium-cxx-abi/cxx-abi/issues/70.
- -# ifndef _LIBCPP_NO_ABI_TAG
- +# if !defined(_LIBCPP_NO_ABI_TAG) && !defined(__CUDACC__)
- # define _LIBCPP_HIDE_FROM_ABI \
- _LIBCPP_HIDDEN _LIBCPP_EXCLUDE_FROM_EXPLICIT_INSTANTIATION \
- __attribute__((__abi_tag__(_LIBCPP_TOSTRING(_LIBCPP_VERSIONED_IDENTIFIER))))
- @@ -1075,7 +1097,8 @@ __sanitizer_verify_double_ended_contiguous_container(const void*, const void*, c
- defined(__APPLE__) || \
- defined(__MVS__) || \
- defined(_AIX) || \
- - defined(__EMSCRIPTEN__)
- + defined(__EMSCRIPTEN__) || \
- + defined(__CYGWIN__)
- // clang-format on
- # define _LIBCPP_HAS_THREAD_API_PTHREAD
- # elif defined(__Fuchsia__)
- @@ -1211,6 +1234,10 @@ __sanitizer_verify_double_ended_contiguous_container(const void*, const void*, c
- # define _LIBCPP_CONSTINIT
- # endif
-
- +# if !__has_builtin(__builtin_is_constant_evaluated) || (defined(_LIBCPP_COMPILER_GCC) && _GNUC_VER < 900) || __CUDACC_VER_MAJOR__ == 10
- +# define _LIBCPP_HAS_NO_BUILTIN_IS_CONSTANT_EVALUATED
- +# endif
- +
- # if __has_attribute(__diagnose_if__) && !defined(_LIBCPP_DISABLE_ADDITIONAL_DIAGNOSTICS)
- # define _LIBCPP_DIAGNOSE_WARNING(...) __attribute__((__diagnose_if__(__VA_ARGS__, "warning")))
- # else
- @@ -1232,6 +1259,12 @@ __sanitizer_verify_double_ended_contiguous_container(const void*, const void*, c
- # define _LIBCPP_LIFETIMEBOUND
- # endif
-
- +# if defined(_LIBCPP_COMPILER_CLANG_BASED)
- +# define _LIBCPP_REINITIALIZES_OBJECT [[clang::reinitializes]]
- +# else
- +# define _LIBCPP_REINITIALIZES_OBJECT
- +# endif
- +
- # if __has_attribute(__nodebug__)
- # define _LIBCPP_NODEBUG __attribute__((__nodebug__))
- # else
- @@ -1289,6 +1322,10 @@ __sanitizer_verify_double_ended_contiguous_container(const void*, const void*, c
- # define _LIBCPP_ENABLE_CXX20_REMOVED_TYPE_TRAITS
- # endif // _LIBCPP_ENABLE_CXX20_REMOVED_FEATURES
-
- +// Yandex-specific: We build our own libc++, so it has everything available
- +# define _LIBCPP_DISABLE_AVAILABILITY
- +// End of Yandex-specific
- +
- // clang-format off
- # define _LIBCPP_PUSH_MACROS _Pragma("push_macro(\"min\")") _Pragma("push_macro(\"max\")") _Pragma("push_macro(\"refresh()\")") _Pragma("push_macro(\"move(int, int)\")") _Pragma("push_macro(\"erase()\")")
- # define _LIBCPP_POP_MACROS _Pragma("pop_macro(\"min\")") _Pragma("pop_macro(\"max\")") _Pragma("pop_macro(\"refresh()\")") _Pragma("pop_macro(\"move(int, int)\")") _Pragma("pop_macro(\"erase()\")")
|