[libcxx-commits] [libcxx] [libc++] Remove conditional for attributes that are always available (PR #126879)
Nikolas Klauser via libcxx-commits
libcxx-commits at lists.llvm.org
Wed Feb 12 02:03:11 PST 2025
https://github.com/philnik777 created https://github.com/llvm/llvm-project/pull/126879
These attributes are available in all supported compilers, so the `#else` case of the conditional is dead code.
>From 9ff43be0e4fe2f031decf93ca42c1d570575d449 Mon Sep 17 00:00:00 2001
From: Nikolas Klauser <nikolasklauser at berlin.de>
Date: Wed, 12 Feb 2025 11:02:16 +0100
Subject: [PATCH] [libc++] Remove conditional for attributes that are always
available
---
libcxx/include/__config | 55 +++++++++--------------------------------
1 file changed, 11 insertions(+), 44 deletions(-)
diff --git a/libcxx/include/__config b/libcxx/include/__config
index 1c6dd8f36c32f..ca6aade34107b 100644
--- a/libcxx/include/__config
+++ b/libcxx/include/__config
@@ -1119,18 +1119,23 @@ typedef __char32_t char32_t;
// Optional attributes - these are useful for a better QoI, but not required to be available
+# define _LIBCPP_NOALIAS __attribute__((__malloc__))
+# define _LIBCPP_NODEBUG [[__gnu__::__nodebug__]]
+# define _LIBCPP_NO_SANITIZE(...) __attribute__((__no_sanitize__(__VA_ARGS__)))
+# define _LIBCPP_INIT_PRIORITY_MAX __attribute__((__init_priority__(100)))
+# define _LIBCPP_ATTRIBUTE_FORMAT(archetype, format_string_index, first_format_arg_index) \
+ __attribute__((__format__(archetype, format_string_index, first_format_arg_index)))
+# define _LIBCPP_PACKED __attribute__((__packed__))
+
+// Use a function like macro to imply that it must be followed by a semicolon
+# define _LIBCPP_FALLTHROUGH() [[fallthrough]]
+
# if __has_attribute(__no_sanitize__) && !defined(_LIBCPP_COMPILER_GCC)
# define _LIBCPP_NO_CFI __attribute__((__no_sanitize__("cfi")))
# else
# define _LIBCPP_NO_CFI
# endif
-# if __has_attribute(__malloc__)
-# define _LIBCPP_NOALIAS __attribute__((__malloc__))
-# else
-# define _LIBCPP_NOALIAS
-# endif
-
# if __has_attribute(__using_if_exists__)
# define _LIBCPP_USING_IF_EXISTS __attribute__((__using_if_exists__))
# else
@@ -1149,15 +1154,6 @@ typedef __char32_t char32_t;
# define _LIBCPP_DIAGNOSE_WARNING(...)
# endif
-// Use a function like macro to imply that it must be followed by a semicolon
-# if __has_cpp_attribute(fallthrough)
-# define _LIBCPP_FALLTHROUGH() [[fallthrough]]
-# elif __has_attribute(__fallthrough__)
-# define _LIBCPP_FALLTHROUGH() __attribute__((__fallthrough__))
-# else
-# define _LIBCPP_FALLTHROUGH() ((void)0)
-# endif
-
# if __has_cpp_attribute(_Clang::__lifetimebound__)
# define _LIBCPP_LIFETIMEBOUND [[_Clang::__lifetimebound__]]
# else
@@ -1170,8 +1166,6 @@ typedef __char32_t char32_t;
# define _LIBCPP_NOESCAPE
# endif
-# define _LIBCPP_NODEBUG [[__gnu__::__nodebug__]]
-
# if __has_cpp_attribute(_Clang::__no_specializations__)
# define _LIBCPP_NO_SPECIALIZATIONS \
[[_Clang::__no_specializations__("Users are not allowed to specialize this standard library entity")]]
@@ -1191,33 +1185,6 @@ typedef __char32_t char32_t;
# define _LIBCPP_PREFERRED_NAME(x)
# endif
-# if __has_attribute(__no_sanitize__)
-# define _LIBCPP_NO_SANITIZE(...) __attribute__((__no_sanitize__(__VA_ARGS__)))
-# else
-# define _LIBCPP_NO_SANITIZE(...)
-# endif
-
-# if __has_attribute(__init_priority__)
-# define _LIBCPP_INIT_PRIORITY_MAX __attribute__((__init_priority__(100)))
-# else
-# define _LIBCPP_INIT_PRIORITY_MAX
-# endif
-
-# if __has_attribute(__format__)
-// The attribute uses 1-based indices for ordinary and static member functions.
-// The attribute uses 2-based indices for non-static member functions.
-# define _LIBCPP_ATTRIBUTE_FORMAT(archetype, format_string_index, first_format_arg_index) \
- __attribute__((__format__(archetype, format_string_index, first_format_arg_index)))
-# else
-# define _LIBCPP_ATTRIBUTE_FORMAT(archetype, format_string_index, first_format_arg_index) /* nothing */
-# endif
-
-# if __has_attribute(__packed__)
-# define _LIBCPP_PACKED __attribute__((__packed__))
-# else
-# define _LIBCPP_PACKED
-# endif
-
# if defined(_LIBCPP_ABI_MICROSOFT) && __has_declspec_attribute(empty_bases)
# define _LIBCPP_DECLSPEC_EMPTY_BASES __declspec(empty_bases)
# else
More information about the libcxx-commits
mailing list