[libc] [llvm] [libc] Add `is_constant_evaluated` type_traits (PR #86139)
Guillaume Chatelet via llvm-commits
llvm-commits at lists.llvm.org
Thu Mar 21 08:50:15 PDT 2024
https://github.com/gchatelet created https://github.com/llvm/llvm-project/pull/86139
This will replace `__builtin_is_constant_evaluated` in math_extras.h.
>From 3fd66a2613376103644c072643d96826ea8094d1 Mon Sep 17 00:00:00 2001
From: Guillaume Chatelet <gchatelet at google.com>
Date: Thu, 21 Mar 2024 15:48:56 +0000
Subject: [PATCH] [libc] Add `is_constant_evaluated` type_traits
This will replace `__builtin_is_constant_evaluated` in math_extras.h.
---
libc/src/__support/CPP/CMakeLists.txt | 5 +++--
libc/src/__support/CPP/type_traits.h | 1 +
.../CPP/type_traits/is_constant_evaluated.h | 21 +++++++++++++++++++
.../llvm-project-overlay/libc/BUILD.bazel | 3 ++-
4 files changed, 27 insertions(+), 3 deletions(-)
create mode 100644 libc/src/__support/CPP/type_traits/is_constant_evaluated.h
diff --git a/libc/src/__support/CPP/CMakeLists.txt b/libc/src/__support/CPP/CMakeLists.txt
index 6216505eae23a3..f76285be521945 100644
--- a/libc/src/__support/CPP/CMakeLists.txt
+++ b/libc/src/__support/CPP/CMakeLists.txt
@@ -103,23 +103,24 @@ add_header_library(
type_traits
HDRS
type_traits.h
- type_traits/always_false.h
type_traits/add_lvalue_reference.h
type_traits/add_pointer.h
type_traits/add_rvalue_reference.h
+ type_traits/always_false.h
type_traits/bool_constant.h
type_traits/conditional.h
type_traits/decay.h
type_traits/enable_if.h
type_traits/false_type.h
type_traits/integral_constant.h
- type_traits/invoke.h
type_traits/invoke_result.h
+ type_traits/invoke.h
type_traits/is_arithmetic.h
type_traits/is_array.h
type_traits/is_base_of.h
type_traits/is_class.h
type_traits/is_const.h
+ type_traits/is_constant_evaluated.h
type_traits/is_convertible.h
type_traits/is_destructible.h
type_traits/is_enum.h
diff --git a/libc/src/__support/CPP/type_traits.h b/libc/src/__support/CPP/type_traits.h
index 697cf79d6ccc59..1494aeb905e093 100644
--- a/libc/src/__support/CPP/type_traits.h
+++ b/libc/src/__support/CPP/type_traits.h
@@ -25,6 +25,7 @@
#include "src/__support/CPP/type_traits/is_base_of.h"
#include "src/__support/CPP/type_traits/is_class.h"
#include "src/__support/CPP/type_traits/is_const.h"
+#include "src/__support/CPP/type_traits/is_constant_evaluated.h"
#include "src/__support/CPP/type_traits/is_convertible.h"
#include "src/__support/CPP/type_traits/is_destructible.h"
#include "src/__support/CPP/type_traits/is_enum.h"
diff --git a/libc/src/__support/CPP/type_traits/is_constant_evaluated.h b/libc/src/__support/CPP/type_traits/is_constant_evaluated.h
new file mode 100644
index 00000000000000..93cfd07b567f08
--- /dev/null
+++ b/libc/src/__support/CPP/type_traits/is_constant_evaluated.h
@@ -0,0 +1,21 @@
+//===-- is_constant_evaluated type_traits -----------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+#ifndef LLVM_LIBC_SRC___SUPPORT_CPP_TYPE_TRAITS_IS_CONSTANT_EVALUATED_H
+#define LLVM_LIBC_SRC___SUPPORT_CPP_TYPE_TRAITS_IS_CONSTANT_EVALUATED_H
+
+#include "src/__support/macros/attributes.h"
+
+namespace LIBC_NAMESPACE::cpp {
+
+LIBC_INLINE constexpr bool is_constant_evaluated() {
+ return __builtin_is_constant_evaluated();
+}
+
+} // namespace LIBC_NAMESPACE::cpp
+
+#endif // LLVM_LIBC_SRC___SUPPORT_CPP_TYPE_TRAITS_IS_CONSTANT_EVALUATED_H
diff --git a/utils/bazel/llvm-project-overlay/libc/BUILD.bazel b/utils/bazel/llvm-project-overlay/libc/BUILD.bazel
index fe4b8e2de14e66..2e8d475f196eff 100644
--- a/utils/bazel/llvm-project-overlay/libc/BUILD.bazel
+++ b/utils/bazel/llvm-project-overlay/libc/BUILD.bazel
@@ -339,6 +339,7 @@ libc_support_library(
"src/__support/CPP/type_traits/is_base_of.h",
"src/__support/CPP/type_traits/is_class.h",
"src/__support/CPP/type_traits/is_const.h",
+ "src/__support/CPP/type_traits/is_constant_evaluated.h",
"src/__support/CPP/type_traits/is_convertible.h",
"src/__support/CPP/type_traits/is_destructible.h",
"src/__support/CPP/type_traits/is_enum.h",
@@ -743,12 +744,12 @@ libc_support_library(
deps = [
":__support_common",
":__support_cpp_bit",
- ":__support_sign",
":__support_cpp_type_traits",
":__support_libc_assert",
":__support_macros_attributes",
":__support_macros_properties_types",
":__support_math_extras",
+ ":__support_sign",
":__support_uint128",
],
)
More information about the llvm-commits
mailing list