From: Tejas Belagod Date: Thu, 5 Sep 2024 09:05:59 +0000 (+0530) Subject: c: Range-check indexing of SVE ACLE vectors X-Git-Tag: basepoints/gcc-16~3775 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=47fa008ad880c115bce4007fe9808e48b0dcf859;p=thirdparty%2Fgcc.git c: Range-check indexing of SVE ACLE vectors 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. --- diff --git a/gcc/c-family/c-common.cc b/gcc/c-family/c-common.cc index a8f25d6cb944..d21f2f9909c4 100644 --- a/gcc/c-family/c-common.cc +++ b/gcc/c-family/c-common.cc @@ -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