https://gcc.gnu.org/g:d3cd3ff57b6ad4eb434fd75e4e54b2884ab4a44f
commit r17-2007-gd3cd3ff57b6ad4eb434fd75e4e54b2884ab4a44f Author: Christopher Bazley <[email protected]> Date: Tue Jun 23 10:36:10 2026 +0000 Fix confusing variable names in build_vector_from_ctor 'nelts' is not the number of encoded elements in a VECTOR_CST; it is the number of patterns. Sometimes those interpretations coincide, as in the case of fixed length vector types (for which the number of elements per pattern is one), but not always. 'step' is not the step between the second and third element of a stepped pattern; it is the number of elements per pattern. This has led to confusion on the mailing list. Both variables are hereby renamed and the code that assigns their values refactored to be more palatable. gcc/ChangeLog: * tree.cc (build_vector_from_ctor): Rename variables and refactor assignments. Co-authored-by: Richard Sandiford <[email protected]> Diff: --- gcc/tree.cc | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/gcc/tree.cc b/gcc/tree.cc index 90c8f2a35ea4..411752d14636 100644 --- a/gcc/tree.cc +++ b/gcc/tree.cc @@ -2201,23 +2201,20 @@ build_vector_from_ctor (tree type, const vec<constructor_elt, va_gc> *v) if (vec_safe_length (v) == 0) return build_zero_cst (type); - unsigned HOST_WIDE_INT idx, nelts, step = 1; + unsigned HOST_WIDE_INT idx, npatterns, nelts_per_pattern; tree value; /* If the vector is a VLA, build a VLA constant vector. */ - if (!TYPE_VECTOR_SUBPARTS (type).is_constant (&nelts)) - { - nelts = constant_lower_bound (TYPE_VECTOR_SUBPARTS (type)); - gcc_assert (vec_safe_length (v) <= nelts); - step = 2; - } + npatterns = constant_lower_bound (TYPE_VECTOR_SUBPARTS (type)); + nelts_per_pattern = TYPE_VECTOR_SUBPARTS (type).is_constant () ? 1 : 2; + gcc_assert (vec_safe_length (v) <= npatterns); - tree_vector_builder vec (type, nelts, step); + tree_vector_builder vec (type, npatterns, nelts_per_pattern); FOR_EACH_CONSTRUCTOR_VALUE (v, idx, value) { if (TREE_CODE (value) == VECTOR_CST) { - /* If NELTS is constant then this must be too. */ + /* If NPATTERNS is constant then this must be too. */ unsigned int sub_nelts = VECTOR_CST_NELTS (value).to_constant (); for (unsigned i = 0; i < sub_nelts; ++i) vec.quick_push (VECTOR_CST_ELT (value, i)); @@ -2225,7 +2222,7 @@ build_vector_from_ctor (tree type, const vec<constructor_elt, va_gc> *v) else vec.quick_push (value); } - while (vec.length () < nelts * step) + while (vec.length () < npatterns * nelts_per_pattern) vec.quick_push (build_zero_cst (TREE_TYPE (type))); return vec.build ();
