[libc-commits] [libc] [libc][NFC] Add `is_constant_evaluated` support for GCC9 (PR #197327)

Muhammad Bassiouni via libc-commits libc-commits at lists.llvm.org
Tue May 12 16:48:08 PDT 2026


https://github.com/bassiounix updated https://github.com/llvm/llvm-project/pull/197327

>From e45e22841ebcf07c43eb86ed841b0086c745fc19 Mon Sep 17 00:00:00 2001
From: bassiounix <muhammad.m.bassiouni at gmail.com>
Date: Wed, 13 May 2026 02:24:54 +0300
Subject: [PATCH 1/3] [libc][NFC] Add `is_constant_evaluated` support for GCC9

---
 libc/src/__support/CPP/type_traits/is_constant_evaluated.h | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/libc/src/__support/CPP/type_traits/is_constant_evaluated.h b/libc/src/__support/CPP/type_traits/is_constant_evaluated.h
index dee3f39b7bc97..c8d635cb9fbff 100644
--- a/libc/src/__support/CPP/type_traits/is_constant_evaluated.h
+++ b/libc/src/__support/CPP/type_traits/is_constant_evaluated.h
@@ -15,7 +15,8 @@ namespace LIBC_NAMESPACE_DECL {
 namespace cpp {
 
 LIBC_INLINE constexpr bool is_constant_evaluated() {
-#if LIBC_HAS_BUILTIN_IS_CONSTANT_EVALUATED
+#if LIBC_HAS_BUILTIN_IS_CONSTANT_EVALUATED ||                                  \
+    (defined(LIBC_COMPILER_IS_GCC) && (LIBC_COMPILER_GCC_VER >= 900))
   return __builtin_is_constant_evaluated();
 #else
   return false;

>From 537470e813830ed6f60661f98885131a954b59a2 Mon Sep 17 00:00:00 2001
From: bassiounix <muhammad.m.bassiouni at gmail.com>
Date: Wed, 13 May 2026 02:29:56 +0300
Subject: [PATCH 2/3] add Clang9 support

---
 libc/src/__support/CPP/type_traits/is_constant_evaluated.h | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/libc/src/__support/CPP/type_traits/is_constant_evaluated.h b/libc/src/__support/CPP/type_traits/is_constant_evaluated.h
index c8d635cb9fbff..d6cfafdad5c0f 100644
--- a/libc/src/__support/CPP/type_traits/is_constant_evaluated.h
+++ b/libc/src/__support/CPP/type_traits/is_constant_evaluated.h
@@ -16,7 +16,8 @@ namespace cpp {
 
 LIBC_INLINE constexpr bool is_constant_evaluated() {
 #if LIBC_HAS_BUILTIN_IS_CONSTANT_EVALUATED ||                                  \
-    (defined(LIBC_COMPILER_IS_GCC) && (LIBC_COMPILER_GCC_VER >= 900))
+    (defined(LIBC_COMPILER_IS_GCC) && (LIBC_COMPILER_GCC_VER >= 900)) ||       \
+    (defined(LIBC_COMPILER_IS_CLANG) && LIBC_COMPILER_CLANG_VER >= 900)
   return __builtin_is_constant_evaluated();
 #else
   return false;

>From 27dc281d59418061a7de04ac471643703c5fc745 Mon Sep 17 00:00:00 2001
From: bassiounix <muhammad.m.bassiouni at gmail.com>
Date: Wed, 13 May 2026 02:47:52 +0300
Subject: [PATCH 3/3] modify compiler version

---
 .../src/__support/CPP/type_traits/is_constant_evaluated.h | 4 +---
 libc/src/__support/macros/attributes.h                    | 8 +++++++-
 2 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/libc/src/__support/CPP/type_traits/is_constant_evaluated.h b/libc/src/__support/CPP/type_traits/is_constant_evaluated.h
index d6cfafdad5c0f..dee3f39b7bc97 100644
--- a/libc/src/__support/CPP/type_traits/is_constant_evaluated.h
+++ b/libc/src/__support/CPP/type_traits/is_constant_evaluated.h
@@ -15,9 +15,7 @@ namespace LIBC_NAMESPACE_DECL {
 namespace cpp {
 
 LIBC_INLINE constexpr bool is_constant_evaluated() {
-#if LIBC_HAS_BUILTIN_IS_CONSTANT_EVALUATED ||                                  \
-    (defined(LIBC_COMPILER_IS_GCC) && (LIBC_COMPILER_GCC_VER >= 900)) ||       \
-    (defined(LIBC_COMPILER_IS_CLANG) && LIBC_COMPILER_CLANG_VER >= 900)
+#if LIBC_HAS_BUILTIN_IS_CONSTANT_EVALUATED
   return __builtin_is_constant_evaluated();
 #else
   return false;
diff --git a/libc/src/__support/macros/attributes.h b/libc/src/__support/macros/attributes.h
index cc28e7e7cbcf1..96b96dca96c82 100644
--- a/libc/src/__support/macros/attributes.h
+++ b/libc/src/__support/macros/attributes.h
@@ -30,8 +30,14 @@
 #define LIBC_UNUSED __attribute__((unused))
 
 #ifndef LIBC_HAS_BUILTIN_IS_CONSTANT_EVALUATED
+#if (defined(LIBC_COMPILER_IS_GCC) && (LIBC_COMPILER_GCC_VER >= 900)) ||       \
+    (defined(LIBC_COMPILER_IS_CLANG) && LIBC_COMPILER_CLANG_VER >= 900)
+#define LIBC_HAS_BUILTIN_IS_CONSTANT_EVALUATED 1
+#else
 #define LIBC_HAS_BUILTIN_IS_CONSTANT_EVALUATED                                 \
   (__has_builtin(__builtin_is_constant_evaluated))
+#endif // (defined(LIBC_COMPILER_IS_GCC) && (LIBC_COMPILER_GCC_VER >= 900)) ||
+       // (defined(LIBC_COMPILER_IS_CLANG) && LIBC_COMPILER_CLANG
 #endif // LIBC_HAS_BUILTIN_IS_CONSTANT_EVALUATED
 
 // TODO: Remove the macro once Clang/LLVM bump their minimum compilers' version.
@@ -42,7 +48,7 @@
 #if LIBC_ENABLE_CONSTEXPR &&                                                   \
     (LIBC_HAS_BUILTIN_IS_CONSTANT_EVALUATED ||                                 \
      (defined(LIBC_COMPILER_IS_GCC) && (LIBC_COMPILER_GCC_VER >= 900)) ||      \
-     (defined(LIBC_COMPILER_IS_CLANG) && LIBC_COMPILER_CLANG_VER >= 1100))
+     (defined(LIBC_COMPILER_IS_CLANG) && LIBC_COMPILER_CLANG_VER >= 900))
 #define LIBC_HAS_CONSTANT_EVALUATION
 #define LIBC_CONSTEXPR constexpr
 #else



More information about the libc-commits mailing list