Author: c8ef
Date: 2024-10-15T00:09:36+08:00
New Revision: ab6ec7ab149ea2c627ed2814c11be33a92171153

URL: 
https://github.com/llvm/llvm-project/commit/ab6ec7ab149ea2c627ed2814c11be33a92171153
DIFF: 
https://github.com/llvm/llvm-project/commit/ab6ec7ab149ea2c627ed2814c11be33a92171153.diff

LOG: [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.

Added: 
    

Modified: 
    clang/include/clang/Basic/Builtins.td
    clang/test/Preprocessor/feature_tests.cpp

Removed: 
    


################################################################################
diff  --git a/clang/include/clang/Basic/Builtins.td 
b/clang/include/clang/Basic/Builtins.td
index a7e2ee30d9d732..bda8a48be92bda 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 3bda3db70ed0da..029f446113af45 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


        
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to