[PATCH] D106409: [PowerPC] Add diagnostic for out of range values for vec_cts,vec_ctf

Zarko Todorovski via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Jul 20 16:07:15 PDT 2021


ZarkoCA created this revision.
ZarkoCA added reviewers: bmahjour, nemanjai, jsji, PowerPC.
Herald added subscribers: shchenz, kbarton.
ZarkoCA requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

LLVM (llc) will crash when a user specifies a number out of the allowed range (0-31) for b.
This patch provides a clang diagnostic so we error out gracefully and point out the user error.

Further documentation for the builtins can be found here:
https://www.ibm.com/docs/en/xl-c-and-cpp-linux/16.1.0?topic=functions-vec-ctf
https://www.ibm.com/docs/en/xl-c-and-cpp-linux/16.1.0?topic=functions-vec-cts


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D106409

Files:
  clang/lib/Sema/SemaChecking.cpp
  clang/test/CodeGen/builtins-ppc-error.c


Index: clang/test/CodeGen/builtins-ppc-error.c
===================================================================
--- clang/test/CodeGen/builtins-ppc-error.c
+++ clang/test/CodeGen/builtins-ppc-error.c
@@ -50,6 +50,7 @@
 void testCTF(int index) {
   vec_ctf(vsi, index); //expected-error {{argument to '__builtin_altivec_vcfsx' must be a constant integer}} expected-error {{argument to '__builtin_altivec_vcfux' must be a constant integer}}
   vec_ctf(vui, index); //expected-error {{argument to '__builtin_altivec_vcfsx' must be a constant integer}} expected-error {{argument to '__builtin_altivec_vcfux' must be a constant integer}}
+  vec_ctf(vsi, 32); //expected-error 1+ {{argument value 32 is outside the valid range [0, 31]}}
 }
 
 void testVCFSX(int index) {
@@ -62,7 +63,7 @@
 
 void testCTS(int index) {
   vec_cts(vf, index); //expected-error {{argument to '__builtin_altivec_vctsxs' must be a constant integer}}
-
+  vec_cts(vf, 32);    //expected-error {{argument value 32 is outside the valid range [0, 31]}}
 }
 
 void testVCTSXS(int index) {
@@ -71,7 +72,7 @@
 
 void testCTU(int index) {
   vec_ctu(vf, index); //expected-error {{argument to '__builtin_altivec_vctuxs' must be a constant integer}}
-
+  vec_ctu(vf, 32);    //expected-error {{argument value 32 is outside the valid range [0, 31]}}
 }
 
 void testVCTUXS(int index) {
Index: clang/lib/Sema/SemaChecking.cpp
===================================================================
--- clang/lib/Sema/SemaChecking.cpp
+++ clang/lib/Sema/SemaChecking.cpp
@@ -3351,6 +3351,11 @@
   case PPC::BI__builtin_tabortdci:
     return SemaBuiltinConstantArgRange(TheCall, 0, 0, 31) ||
            SemaBuiltinConstantArgRange(TheCall, 2, 0, 31);
+  case PPC::BI__builtin_altivec_vctsxs:
+  case PPC::BI__builtin_altivec_vctuxs:
+  case PPC::BI__builtin_altivec_vcfsx:
+  case PPC::BI__builtin_altivec_vcfux:
+    return SemaBuiltinConstantArgRange(TheCall, 1, 0, 31);
   case PPC::BI__builtin_altivec_dst:
   case PPC::BI__builtin_altivec_dstt:
   case PPC::BI__builtin_altivec_dstst:


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D106409.360303.patch
Type: text/x-patch
Size: 2049 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20210720/ee1f5c85/attachment.bin>


More information about the cfe-commits mailing list