[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