From ab6ec7ab149ea2c627ed2814c11be33a92171153 Mon Sep 17 00:00:00 2001 From: c8ef Date: Tue, 15 Oct 2024 00:09:36 +0800 Subject: [PATCH] [clang] Mark `__builtin_convertvector` and `__builtin_shufflevector` as `constexpr`. (#112129) Closes #107985. LanguageExtensions.rst states that `__builtin_shufflevector` and `__builtin_convertvector` can be evaluated as constants, but this is not reflected in Butiltins.td. This patch aligns these two. --- clang/include/clang/Basic/Builtins.td | 4 ++-- clang/test/Preprocessor/feature_tests.cpp | 8 ++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/clang/include/clang/Basic/Builtins.td b/clang/include/clang/Basic/Builtins.td index a7e2ee30d9d7..bda8a48be92b 100644 --- a/clang/include/clang/Basic/Builtins.td +++ b/clang/include/clang/Basic/Builtins.td @@ -1198,13 +1198,13 @@ def AllowRuntimeCheck : Builtin { def ShuffleVector : Builtin { let Spellings = ["__builtin_shufflevector"]; - let Attributes = [NoThrow, Const, CustomTypeChecking]; + let Attributes = [NoThrow, Const, CustomTypeChecking, Constexpr]; let Prototype = "void(...)"; } def ConvertVector : Builtin { let Spellings = ["__builtin_convertvector"]; - let Attributes = [NoThrow, Const, CustomTypeChecking]; + let Attributes = [NoThrow, Const, CustomTypeChecking, Constexpr]; let Prototype = "void(...)"; } diff --git a/clang/test/Preprocessor/feature_tests.cpp b/clang/test/Preprocessor/feature_tests.cpp index 3bda3db70ed0..029f446113af 100644 --- a/clang/test/Preprocessor/feature_tests.cpp +++ b/clang/test/Preprocessor/feature_tests.cpp @@ -64,6 +64,14 @@ #error Clang should have these constexpr builtins #endif +#if !__has_constexpr_builtin(__builtin_convertvector) +#error Clang should have these constexpr builtins +#endif + +#if !__has_constexpr_builtin(__builtin_shufflevector) +#error Clang should have these constexpr builtins +#endif + #if __has_constexpr_builtin(__builtin_cbrt) #error This builtin should not be constexpr in Clang #endif