Tejas Belagod <tejas.bela...@arm.com> writes:
> There is an assumption in many places in c-typeck.cc that GNU vectors sizes 
> are
> always known at compile time.  SVE vectors now piggy-back on GNU vector code
> so this patch changes one of the places where there is an assumption of 
> vectors
> being fixed-length to being variable width.
>
> gcc/ChangeLog:
>
>       * c/c-typeck.cc (process_init_element): Fix condition to include
>       sizeless types.
> ---
>  gcc/c/c-typeck.cc | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/gcc/c/c-typeck.cc b/gcc/c/c-typeck.cc
> index 6673cbf7294..94959f7b8ad 100644
> --- a/gcc/c/c-typeck.cc
> +++ b/gcc/c/c-typeck.cc
> @@ -11969,8 +11969,9 @@ retry:
>         tree elttype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type));
>  
>        /* Do a basic check of initializer size.  Note that vectors
> -         always have a fixed size derived from their type.  */
> -       if (tree_int_cst_lt (constructor_max_index, constructor_index))
> +         may not always have a fixed size derived from their type.  */
> +       if (known_lt (tree_to_poly_uint64 (constructor_max_index),
> +                     tree_to_poly_uint64 (constructor_index)))
>           {
>             pedwarn_init (loc, 0,
>                           "excess elements in vector initializer");

Others might disagree, but FWIW: I think it would make sense to fold
this into patch 9.  The end result there looks good to me, but this
intermediate state looks surprising.

Thanks,
Richard

Reply via email to