summaryrefslogtreecommitdiffstats
path: root/libcxx/include
diff options
context:
space:
mode:
authorEric Fiselier <eric@efcs.ca>2019-04-24 17:54:25 +0000
committerEric Fiselier <eric@efcs.ca>2019-04-24 17:54:25 +0000
commit2fc5a786beaba1fbac1de65d78889d72b667f2d3 (patch)
treea3136cb21a5ba3f8ce402361552b79115a8d7691 /libcxx/include
parentabdb816b776cc43a1f318c84d26e1fe5840da073 (diff)
downloadbcm5719-llvm-2fc5a786beaba1fbac1de65d78889d72b667f2d3.tar.gz
bcm5719-llvm-2fc5a786beaba1fbac1de65d78889d72b667f2d3.zip
Add std::is_constant_evaluated.
Clang recently added __builtin_is_constant_evaluated() and GCC 9.0 has it as well. This patch adds support for it in libc++. llvm-svn: 359119
Diffstat (limited to 'libcxx/include')
-rw-r--r--libcxx/include/__config4
-rw-r--r--libcxx/include/type_traits7
-rw-r--r--libcxx/include/version4
3 files changed, 14 insertions, 1 deletions
diff --git a/libcxx/include/__config b/libcxx/include/__config
index ead522520e8..0488093aa05 100644
--- a/libcxx/include/__config
+++ b/libcxx/include/__config
@@ -1257,6 +1257,10 @@ _LIBCPP_FUNC_VIS extern "C" void __sanitizer_annotate_contiguous_container(
#define _LIBCPP_HAS_NO_BUILTIN_ADDRESSOF
#endif
+#if !__has_builtin(__builtin_is_constant_evaluated) && _GNUC_VER < 900
+#define _LIBCPP_HAS_NO_BUILTIN_IS_CONSTANT_EVALUATED
+#endif
+
#if !defined(_LIBCPP_HAS_NO_OFF_T_FUNCTIONS)
# if defined(_LIBCPP_MSVCRT) || defined(_NEWLIB_VERSION)
# define _LIBCPP_HAS_NO_OFF_T_FUNCTIONS
diff --git a/libcxx/include/type_traits b/libcxx/include/type_traits
index 43faf275cff..65716295233 100644
--- a/libcxx/include/type_traits
+++ b/libcxx/include/type_traits
@@ -4876,6 +4876,13 @@ enum class endian
};
#endif
+#if _LIBCPP_STD_VER > 17 && !defined(_LIBCPP_HAS_NO_BUILTIN_IS_CONSTANT_EVALUATED)
+_LIBCPP_INLINE_VISIBILITY
+inline constexpr bool is_constant_evaluated() noexcept {
+ return __builtin_is_constant_evaluated();
+}
+#endif
+
_LIBCPP_END_NAMESPACE_STD
#if _LIBCPP_STD_VER > 14
diff --git a/libcxx/include/version b/libcxx/include/version
index 1037ee5df40..948f64512c9 100644
--- a/libcxx/include/version
+++ b/libcxx/include/version
@@ -222,7 +222,9 @@ __cpp_lib_void_t 201411L <type_traits>
// # define __cpp_lib_destroying_delete 201806L
# define __cpp_lib_erase_if 201811L
// # define __cpp_lib_generic_unordered_lookup 201811L
-// # define __cpp_lib_is_constant_evaluated 201811L
+# if !defined(_LIBCPP_HAS_NO_BUILTIN_IS_CONSTANT_EVALUATED)
+# define __cpp_lib_is_constant_evaluated 201811L
+# endif
// # define __cpp_lib_list_remove_return_type 201806L
// # define __cpp_lib_ranges 201811L
// # define __cpp_lib_three_way_comparison 201711L
OpenPOWER on IntegriCloud