]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
c: Range-check indexing of SVE ACLE vectors
authorTejas Belagod <tejas.belagod@arm.com>
Thu, 5 Sep 2024 09:05:59 +0000 (14:35 +0530)
committerTejas Belagod <tejas.belagod@arm.com>
Fri, 29 Nov 2024 11:31:29 +0000 (17:01 +0530)
This patch adds a check for non-GNU vectors to warn that the index is outside
the range of a fixed vector size.  For VLA vectors, we don't diagnose.

gcc/c-family/ChangeLog:

* c-common.cc (convert_vector_to_array_for_subscript): Add
range-check for target vector types.

gcc/c-family/c-common.cc

index a8f25d6cb9442b7ae7d99b66f036c809005de944..d21f2f9909c4f2f78bdb17fcfbf85713be210936 100644 (file)
@@ -9075,10 +9075,12 @@ convert_vector_to_array_for_subscript (location_t loc,
       ret = !lvalue_p (*vecp);
 
       index = fold_for_warn (index);
-      if (TREE_CODE (index) == INTEGER_CST)
-        if (!tree_fits_uhwi_p (index)
-           || maybe_ge (tree_to_uhwi (index), TYPE_VECTOR_SUBPARTS (type)))
-         warning_at (loc, OPT_Warray_bounds_, "index value is out of bound");
+      /* Warn out-of-bounds index for vectors only if known.  */
+      if (poly_int_tree_p (index))
+       if (!tree_fits_poly_uint64_p (index)
+           || known_ge (tree_to_poly_uint64 (index),
+                         TYPE_VECTOR_SUBPARTS (type)))
+           warning_at (loc, OPT_Warray_bounds_, "index value is out of bound");
 
       /* We are building an ARRAY_REF so mark the vector as addressable
          to not run into the gimplifiers premature setting of DECL_GIMPLE_REG_P