From 15071d2945405f00cf41fc9a48122732e9c42bc3 Mon Sep 17 00:00:00 2001 From: Louis Dionne Date: Tue, 10 Aug 2021 11:35:27 -0400 Subject: [PATCH] [libc++] Remove _LIBCPP_HAS_UNIQUE_OBJECT_REPRESENTATIONS All supported compilers have implemented __has_unique_object_representations for a while, so it's reasonable to remove the workaround. Differential Revision: https://reviews.llvm.org/D107834 --- libcxx/include/__config | 5 -- libcxx/include/type_traits | 2 +- libcxx/include/version | 4 +- .../type_traits.version.pass.cpp | 48 ++++++------------- .../version.version.pass.cpp | 48 ++++++------------- .../generate_feature_test_macro_components.py | 2 - 6 files changed, 32 insertions(+), 77 deletions(-) diff --git a/libcxx/include/__config b/libcxx/include/__config index a0b645c891fa..ca7d9ed43544 100644 --- a/libcxx/include/__config +++ b/libcxx/include/__config @@ -510,10 +510,6 @@ typedef __char32_t char32_t; #define _LIBCPP_COMPILER_HAS_BUILTIN_CONSTANT_P #endif -#if !__is_identifier(__has_unique_object_representations) -#define _LIBCPP_HAS_UNIQUE_OBJECT_REPRESENTATIONS -#endif - #define _LIBCPP_ALWAYS_INLINE __attribute__ ((__always_inline__)) // Literal operators ""d and ""y are supported starting with LLVM Clang 8 and AppleClang 10.0.1 @@ -552,7 +548,6 @@ typedef __char32_t char32_t; #if _GNUC_VER >= 700 #define _LIBCPP_COMPILER_HAS_BUILTIN_LAUNDER #define _LIBCPP_COMPILER_HAS_BUILTIN_CONSTANT_P -#define _LIBCPP_HAS_UNIQUE_OBJECT_REPRESENTATIONS #endif #define _LIBCPP_ALWAYS_INLINE __attribute__ ((__always_inline__)) diff --git a/libcxx/include/type_traits b/libcxx/include/type_traits index 0d060b6578da..af2f620ba947 100644 --- a/libcxx/include/type_traits +++ b/libcxx/include/type_traits @@ -1914,7 +1914,7 @@ _LIBCPP_INLINE_VAR _LIBCPP_CONSTEXPR bool has_virtual_destructor_v // has_unique_object_representations -#if _LIBCPP_STD_VER > 14 && defined(_LIBCPP_HAS_UNIQUE_OBJECT_REPRESENTATIONS) +#if _LIBCPP_STD_VER > 14 template struct _LIBCPP_TEMPLATE_VIS has_unique_object_representations : public integral_constant # endif # define __cpp_lib_gcd_lcm 201606L // # define __cpp_lib_hardware_interference_size 201703L -# if defined(_LIBCPP_HAS_UNIQUE_OBJECT_REPRESENTATIONS) -# define __cpp_lib_has_unique_object_representations 201606L -# endif +# define __cpp_lib_has_unique_object_representations 201606L # define __cpp_lib_hypot 201603L # define __cpp_lib_incomplete_container_elements 201505L # define __cpp_lib_invoke 201411L diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/type_traits.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/type_traits.version.pass.cpp index 1e270d3739fd..aefb00b849dd 100644 --- a/libcxx/test/std/language.support/support.limits/support.limits.general/type_traits.version.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/type_traits.version.pass.cpp @@ -233,17 +233,11 @@ # error "__cpp_lib_bounded_array_traits should not be defined before c++20" # endif -# if TEST_HAS_BUILTIN_IDENTIFIER(__has_unique_object_representations) || TEST_GCC_VER >= 700 -# ifndef __cpp_lib_has_unique_object_representations -# error "__cpp_lib_has_unique_object_representations should be defined in c++17" -# endif -# if __cpp_lib_has_unique_object_representations != 201606L -# error "__cpp_lib_has_unique_object_representations should have the value 201606L in c++17" -# endif -# else -# ifdef __cpp_lib_has_unique_object_representations -# error "__cpp_lib_has_unique_object_representations should not be defined when TEST_HAS_BUILTIN_IDENTIFIER(__has_unique_object_representations) || TEST_GCC_VER >= 700 is not defined!" -# endif +# ifndef __cpp_lib_has_unique_object_representations +# error "__cpp_lib_has_unique_object_representations should be defined in c++17" +# endif +# if __cpp_lib_has_unique_object_representations != 201606L +# error "__cpp_lib_has_unique_object_representations should have the value 201606L in c++17" # endif # ifndef __cpp_lib_integral_constant_callable @@ -363,17 +357,11 @@ # error "__cpp_lib_bounded_array_traits should have the value 201902L in c++20" # endif -# if TEST_HAS_BUILTIN_IDENTIFIER(__has_unique_object_representations) || TEST_GCC_VER >= 700 -# ifndef __cpp_lib_has_unique_object_representations -# error "__cpp_lib_has_unique_object_representations should be defined in c++20" -# endif -# if __cpp_lib_has_unique_object_representations != 201606L -# error "__cpp_lib_has_unique_object_representations should have the value 201606L in c++20" -# endif -# else -# ifdef __cpp_lib_has_unique_object_representations -# error "__cpp_lib_has_unique_object_representations should not be defined when TEST_HAS_BUILTIN_IDENTIFIER(__has_unique_object_representations) || TEST_GCC_VER >= 700 is not defined!" -# endif +# ifndef __cpp_lib_has_unique_object_representations +# error "__cpp_lib_has_unique_object_representations should be defined in c++20" +# endif +# if __cpp_lib_has_unique_object_representations != 201606L +# error "__cpp_lib_has_unique_object_representations should have the value 201606L in c++20" # endif # ifndef __cpp_lib_integral_constant_callable @@ -520,17 +508,11 @@ # error "__cpp_lib_bounded_array_traits should have the value 201902L in c++2b" # endif -# if TEST_HAS_BUILTIN_IDENTIFIER(__has_unique_object_representations) || TEST_GCC_VER >= 700 -# ifndef __cpp_lib_has_unique_object_representations -# error "__cpp_lib_has_unique_object_representations should be defined in c++2b" -# endif -# if __cpp_lib_has_unique_object_representations != 201606L -# error "__cpp_lib_has_unique_object_representations should have the value 201606L in c++2b" -# endif -# else -# ifdef __cpp_lib_has_unique_object_representations -# error "__cpp_lib_has_unique_object_representations should not be defined when TEST_HAS_BUILTIN_IDENTIFIER(__has_unique_object_representations) || TEST_GCC_VER >= 700 is not defined!" -# endif +# ifndef __cpp_lib_has_unique_object_representations +# error "__cpp_lib_has_unique_object_representations should be defined in c++2b" +# endif +# if __cpp_lib_has_unique_object_representations != 201606L +# error "__cpp_lib_has_unique_object_representations should have the value 201606L in c++2b" # endif # ifndef __cpp_lib_integral_constant_callable diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/version.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/version.version.pass.cpp index 2c01e79f4bd0..03ed1cac8726 100644 --- a/libcxx/test/std/language.support/support.limits/support.limits.general/version.version.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/version.version.pass.cpp @@ -1600,17 +1600,11 @@ # endif # endif -# if TEST_HAS_BUILTIN_IDENTIFIER(__has_unique_object_representations) || TEST_GCC_VER >= 700 -# ifndef __cpp_lib_has_unique_object_representations -# error "__cpp_lib_has_unique_object_representations should be defined in c++17" -# endif -# if __cpp_lib_has_unique_object_representations != 201606L -# error "__cpp_lib_has_unique_object_representations should have the value 201606L in c++17" -# endif -# else -# ifdef __cpp_lib_has_unique_object_representations -# error "__cpp_lib_has_unique_object_representations should not be defined when TEST_HAS_BUILTIN_IDENTIFIER(__has_unique_object_representations) || TEST_GCC_VER >= 700 is not defined!" -# endif +# ifndef __cpp_lib_has_unique_object_representations +# error "__cpp_lib_has_unique_object_representations should be defined in c++17" +# endif +# if __cpp_lib_has_unique_object_representations != 201606L +# error "__cpp_lib_has_unique_object_representations should have the value 201606L in c++17" # endif # ifndef __cpp_lib_hypot @@ -2613,17 +2607,11 @@ # endif # endif -# if TEST_HAS_BUILTIN_IDENTIFIER(__has_unique_object_representations) || TEST_GCC_VER >= 700 -# ifndef __cpp_lib_has_unique_object_representations -# error "__cpp_lib_has_unique_object_representations should be defined in c++20" -# endif -# if __cpp_lib_has_unique_object_representations != 201606L -# error "__cpp_lib_has_unique_object_representations should have the value 201606L in c++20" -# endif -# else -# ifdef __cpp_lib_has_unique_object_representations -# error "__cpp_lib_has_unique_object_representations should not be defined when TEST_HAS_BUILTIN_IDENTIFIER(__has_unique_object_representations) || TEST_GCC_VER >= 700 is not defined!" -# endif +# ifndef __cpp_lib_has_unique_object_representations +# error "__cpp_lib_has_unique_object_representations should be defined in c++20" +# endif +# if __cpp_lib_has_unique_object_representations != 201606L +# error "__cpp_lib_has_unique_object_representations should have the value 201606L in c++20" # endif # ifndef __cpp_lib_hypot @@ -3782,17 +3770,11 @@ # endif # endif -# if TEST_HAS_BUILTIN_IDENTIFIER(__has_unique_object_representations) || TEST_GCC_VER >= 700 -# ifndef __cpp_lib_has_unique_object_representations -# error "__cpp_lib_has_unique_object_representations should be defined in c++2b" -# endif -# if __cpp_lib_has_unique_object_representations != 201606L -# error "__cpp_lib_has_unique_object_representations should have the value 201606L in c++2b" -# endif -# else -# ifdef __cpp_lib_has_unique_object_representations -# error "__cpp_lib_has_unique_object_representations should not be defined when TEST_HAS_BUILTIN_IDENTIFIER(__has_unique_object_representations) || TEST_GCC_VER >= 700 is not defined!" -# endif +# ifndef __cpp_lib_has_unique_object_representations +# error "__cpp_lib_has_unique_object_representations should be defined in c++2b" +# endif +# if __cpp_lib_has_unique_object_representations != 201606L +# error "__cpp_lib_has_unique_object_representations should have the value 201606L in c++2b" # endif # ifndef __cpp_lib_hypot diff --git a/libcxx/utils/generate_feature_test_macro_components.py b/libcxx/utils/generate_feature_test_macro_components.py index 577faa3bbd19..da3681fd779c 100755 --- a/libcxx/utils/generate_feature_test_macro_components.py +++ b/libcxx/utils/generate_feature_test_macro_components.py @@ -323,8 +323,6 @@ feature_test_macros = [ add_version_header(x) for x in [ "name": "__cpp_lib_has_unique_object_representations", "values": { "c++17": 201606 }, "headers": ["type_traits"], - "test_suite_guard": "TEST_HAS_BUILTIN_IDENTIFIER(__has_unique_object_representations) || TEST_GCC_VER >= 700", - "libcxx_guard": "defined(_LIBCPP_HAS_UNIQUE_OBJECT_REPRESENTATIONS)", }, { "name": "__cpp_lib_hypot", "values": { "c++17": 201603 },