https://github.com/AditiRM updated 
https://github.com/llvm/llvm-project/pull/178121

>From 05db13254aa41da2c441362c96b593bdfa7cab65 Mon Sep 17 00:00:00 2001
From: AditiRM <[email protected]>
Date: Tue, 27 Jan 2026 06:32:13 +0000
Subject: [PATCH 1/2] Refactor bcdsetsign argument validation

---
 clang/lib/Sema/SemaPPC.cpp                       | 9 ++++++++-
 clang/test/Sema/builtins-bcd-format-conversion.c | 8 ++++++++
 2 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/clang/lib/Sema/SemaPPC.cpp b/clang/lib/Sema/SemaPPC.cpp
index 149c564bd5b84..7f7f2f9638129 100644
--- a/clang/lib/Sema/SemaPPC.cpp
+++ b/clang/lib/Sema/SemaPPC.cpp
@@ -147,7 +147,14 @@ bool SemaPPC::CheckPPCBuiltinFunctionCall(const TargetInfo 
&TI,
   switch (BuiltinID) {
   default:
     return false;
-  case PPC::BI__builtin_ppc_bcdsetsign:
+  case PPC::BI__builtin_ppc_bcdsetsign: {
+    // Arg0 must be vector unsigned char
+    if (!IsTypeVecUChar(TheCall->getArg(0)->getType(), 0))
+      return false;
+
+    // Restrict Arg1 constant range (0–1)
+    return SemaRef.BuiltinConstantArgRange(TheCall, 1, 0, 1);
+  }
   case PPC::BI__builtin_ppc_national2packed:
   case PPC::BI__builtin_ppc_packed2zoned:
   case PPC::BI__builtin_ppc_zoned2packed:
diff --git a/clang/test/Sema/builtins-bcd-format-conversion.c 
b/clang/test/Sema/builtins-bcd-format-conversion.c
index 30bbd32a0f653..6529d99bc09b2 100644
--- a/clang/test/Sema/builtins-bcd-format-conversion.c
+++ b/clang/test/Sema/builtins-bcd-format-conversion.c
@@ -12,6 +12,14 @@
   int i = 1;                        \
   float f = 1.0f;
 
+vector unsigned char test_bcdsetsign(void) {
+  DECL_COMMON_VARS
+  vector unsigned char res_a = __builtin_ppc_bcdsetsign(scalar, '\1'); // 
expected-error {{argument 0 must be of type '__vector unsigned char' (vector of 
16 'unsigned char' values}}
+  vector unsigned char res_b = __builtin_ppc_bcdsetsign(vec, 2); // 
expected-error-re {{argument value {{.*}} is outside the valid range}}
+  vector unsigned char res_c = __builtin_ppc_bcdsetsign(vec, -1); // 
expected-error-re {{argument value {{.*}} is outside the valid range}}
+  return __builtin_ppc_bcdsetsign(vec, '\1');
+}
+
 vector unsigned char test_bcdshift(void) {
   DECL_COMMON_VARS
   vector unsigned char res_a = __builtin_ppc_bcdshift(scalar, i, i); // 
expected-error {{argument 0 must be of type '__vector unsigned char' (vector of 
16 'unsigned char' values)}}

>From 8296d4f9f4dd7a82365f70316c472b11796e528c Mon Sep 17 00:00:00 2001
From: AditiRM <[email protected]>
Date: Wed, 4 Feb 2026 06:57:17 +0000
Subject: [PATCH 2/2] [nit] address review comment

---
 clang/test/Sema/builtins-bcd-format-conversion.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/clang/test/Sema/builtins-bcd-format-conversion.c 
b/clang/test/Sema/builtins-bcd-format-conversion.c
index 6529d99bc09b2..059340b0344e1 100644
--- a/clang/test/Sema/builtins-bcd-format-conversion.c
+++ b/clang/test/Sema/builtins-bcd-format-conversion.c
@@ -15,6 +15,7 @@
 vector unsigned char test_bcdsetsign(void) {
   DECL_COMMON_VARS
   vector unsigned char res_a = __builtin_ppc_bcdsetsign(scalar, '\1'); // 
expected-error {{argument 0 must be of type '__vector unsigned char' (vector of 
16 'unsigned char' values}}
+  vector unsigned char res_d = __builtin_ppc_bcdsetsign(vec, f); // 
expected-error-re {{argument to {{.*}} must be a constant integer}}
   vector unsigned char res_b = __builtin_ppc_bcdsetsign(vec, 2); // 
expected-error-re {{argument value {{.*}} is outside the valid range}}
   vector unsigned char res_c = __builtin_ppc_bcdsetsign(vec, -1); // 
expected-error-re {{argument value {{.*}} is outside the valid range}}
   return __builtin_ppc_bcdsetsign(vec, '\1');

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to