On Wed, Nov 6, 2024 at 12:49 PM Tejas Belagod <tejas.bela...@arm.com> wrote: > > Ensure sizeless types don't end up trying to be canonicalised to > BIT_FIELD_REFs.
You mean variable-sized? But don't we know, when there's a constant array index, that the size is at least so this indexing is OK? So what's wrong with a fixed position, fixed size BIT_FIELD_REF extraction of a VLA object? Richard. > gcc/ChangeLog: > > * gimple-fold.cc (maybe_canonicalize_mem_ref_addr): Disallow sizeless > types in BIT_FIELD_REFs. > --- > gcc/gimple-fold.cc | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/gcc/gimple-fold.cc b/gcc/gimple-fold.cc > index c19dac0dbfd..dd45d9f7348 100644 > --- a/gcc/gimple-fold.cc > +++ b/gcc/gimple-fold.cc > @@ -6281,6 +6281,7 @@ maybe_canonicalize_mem_ref_addr (tree *t, bool is_debug > = false) > && VECTOR_TYPE_P (TREE_TYPE (TREE_OPERAND (TREE_OPERAND (*t, 0), 0)))) > { > tree vtype = TREE_TYPE (TREE_OPERAND (TREE_OPERAND (*t, 0), 0)); > + /* BIT_FIELD_REF can only happen on constant-size vectors. */ > if (VECTOR_TYPE_P (vtype)) > { > tree low = array_ref_low_bound (*t); > @@ -6294,7 +6295,7 @@ maybe_canonicalize_mem_ref_addr (tree *t, bool is_debug > = false) > (TYPE_SIZE (TREE_TYPE (*t)))); > widest_int ext > = wi::add (idx, wi::to_widest (TYPE_SIZE (TREE_TYPE > (*t)))); > - if (wi::les_p (ext, wi::to_widest (TYPE_SIZE (vtype)))) > + if (known_le (ext, wi::to_poly_widest (TYPE_SIZE (vtype)))) > { > *t = build3_loc (EXPR_LOCATION (*t), BIT_FIELD_REF, > TREE_TYPE (*t), > -- > 2.25.1 >