diff options
author | Eric Fiselier <eric@efcs.ca> | 2019-04-24 17:54:25 +0000 |
---|---|---|
committer | Eric Fiselier <eric@efcs.ca> | 2019-04-24 17:54:25 +0000 |
commit | 2fc5a786beaba1fbac1de65d78889d72b667f2d3 (patch) | |
tree | a3136cb21a5ba3f8ce402361552b79115a8d7691 /libcxx/include | |
parent | abdb816b776cc43a1f318c84d26e1fe5840da073 (diff) | |
download | bcm5719-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/__config | 4 | ||||
-rw-r--r-- | libcxx/include/type_traits | 7 | ||||
-rw-r--r-- | libcxx/include/version | 4 |
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 |