[clang] b9659de - [clang] Fix checkMathBuiltinElementType SignedIntOrFloatTy checks (#180528)
via cfe-commits
cfe-commits at lists.llvm.org
Mon Feb 9 20:27:15 PST 2026
Author: Timm Baeder
Date: 2026-02-10T05:27:09+01:00
New Revision: b9659ded76962712a1e984755c2eb54886dfaa83
URL: https://github.com/llvm/llvm-project/commit/b9659ded76962712a1e984755c2eb54886dfaa83
DIFF: https://github.com/llvm/llvm-project/commit/b9659ded76962712a1e984755c2eb54886dfaa83.diff
LOG: [clang] Fix checkMathBuiltinElementType SignedIntOrFloatTy checks (#180528)
The previous check was way too loose and let everything except unsigned
integer types through.
See e.g. https://godbolt.org/z/3qY8EbK56
Added:
Modified:
clang/lib/Sema/SemaChecking.cpp
clang/test/Sema/builtins-elementwise-math.c
Removed:
################################################################################
diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp
index e82c82d881a8a..89171246d0bcb 100644
--- a/clang/lib/Sema/SemaChecking.cpp
+++ b/clang/lib/Sema/SemaChecking.cpp
@@ -2200,7 +2200,7 @@ checkMathBuiltinElementType(Sema &S, SourceLocation Loc, QualType ArgTy,
}
break;
case Sema::EltwiseBuiltinArgTyRestriction::SignedIntOrFloatTy:
- if (EltTy->isUnsignedIntegerType()) {
+ if (!EltTy->isSignedIntegerType() && !EltTy->isRealFloatingType()) {
return S.Diag(Loc, diag::err_builtin_invalid_arg_type)
<< 1 << /* scalar or vector */ 5 << /* signed int */ 2
<< /* or fp */ 1 << ArgTy;
diff --git a/clang/test/Sema/builtins-elementwise-math.c b/clang/test/Sema/builtins-elementwise-math.c
index 37be0e4ebbd28..47f78d658c922 100644
--- a/clang/test/Sema/builtins-elementwise-math.c
+++ b/clang/test/Sema/builtins-elementwise-math.c
@@ -43,6 +43,9 @@ void test_builtin_elementwise_abs(int i, double d, float4 v, int3 iv, unsigned u
uv = __builtin_elementwise_abs(uv);
// expected-error at -1 {{1st argument must be a scalar or vector of signed integer or floating-point types (was 'unsigned4' (vector of 4 'unsigned int' values))}}
+
+ i = __builtin_elementwise_abs(&i);
+ // expected-error at -1 {{1st argument must be a scalar or vector of signed integer or floating-point types (was 'int *')}}
}
void test_builtin_elementwise_add_sat(int i, short s, double d, float4 v, int3 iv, unsigned3 uv, int *p) {
More information about the cfe-commits
mailing list