[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
NOKEYCHECK=True
GitOrigin-RevId: 15071d2945405f00cf41fc9a48122732e9c42bc3
diff --git a/include/__config b/include/__config
index a0b645c..ca7d9ed 100644
--- a/include/__config
+++ b/include/__config
@@ -510,10 +510,6 @@
#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 @@
#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/include/type_traits b/include/type_traits
index 0d060b6..af2f620 100644
--- a/include/type_traits
+++ b/include/type_traits
@@ -1914,7 +1914,7 @@
// has_unique_object_representations
-#if _LIBCPP_STD_VER > 14 && defined(_LIBCPP_HAS_UNIQUE_OBJECT_REPRESENTATIONS)
+#if _LIBCPP_STD_VER > 14
template <class _Tp> struct _LIBCPP_TEMPLATE_VIS has_unique_object_representations
: public integral_constant<bool,
diff --git a/include/version b/include/version
index ce094f8..6fae891 100644
--- a/include/version
+++ b/include/version
@@ -222,9 +222,7 @@
# 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/test/std/language.support/support.limits/support.limits.general/type_traits.version.pass.cpp b/test/std/language.support/support.limits/support.limits.general/type_traits.version.pass.cpp
index 1e270d3..aefb00b 100644
--- a/test/std/language.support/support.limits/support.limits.general/type_traits.version.pass.cpp
+++ b/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/test/std/language.support/support.limits/support.limits.general/version.version.pass.cpp b/test/std/language.support/support.limits/support.limits.general/version.version.pass.cpp
index 2c01e79..03ed1ca 100644
--- a/test/std/language.support/support.limits/support.limits.general/version.version.pass.cpp
+++ b/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/utils/generate_feature_test_macro_components.py b/utils/generate_feature_test_macro_components.py
index 577faa3..da3681f 100755
--- a/utils/generate_feature_test_macro_components.py
+++ b/utils/generate_feature_test_macro_components.py
@@ -323,8 +323,6 @@
"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 },