Richard Biener <rguent...@suse.de> writes:
> --- 599,615 ----
>   
>         exp = TREE_OPERAND (exp, 0);
>       }
>   
> +   /* We need to deal with variable arrays ending structures.  */
> +   if (seen_variable_array_ref
> +       && maxsize != -1
> +       && (!bit_offset.fits_shwi ()
> +       || !host_integerp (TYPE_SIZE (TREE_TYPE (exp)), 1)
> +       || (bit_offset.to_shwi () + maxsize
> +           == (signed) TREE_INT_CST_LOW (TYPE_SIZE (TREE_TYPE (exp))))))
> +     maxsize = -1;

I realise this was in the old code too, but should it be "HOST_WIDE_INT"
rather than "signed"?

Ignore me if not.  It just stood out as a bit weird in today's wide-int merge.

Thanks,
Richard


> + 
> +  done:
>     if (!bit_offset.fits_shwi ())
>       {
>         *poffset = 0;
> *************** get_ref_base_and_extent (tree exp, HOST_
> *** 614,637 ****
>   
>     hbit_offset = bit_offset.to_shwi ();
>   
> -   /* We need to deal with variable arrays ending structures such as
> -        struct { int length; int a[1]; } x;           x.a[d]
> -        struct { struct { int a; int b; } a[1]; } x;  x.a[d].a
> -        struct { struct { int a[1]; } a[1]; } x;      x.a[0][d], x.a[d][0]
> -        struct { int len; union { int a[1]; struct X x; } u; } x; x.u.a[d]
> -      where we do not know maxsize for variable index accesses to
> -      the array.  The simplest way to conservatively deal with this
> -      is to punt in the case that offset + maxsize reaches the
> -      base type boundary.  This needs to include possible trailing padding
> -      that is there for alignment purposes.  */
> - 
> -   if (seen_variable_array_ref
> -       && maxsize != -1
> -       && (!host_integerp (TYPE_SIZE (base_type), 1)
> -       || (hbit_offset + maxsize
> -           == (signed) TREE_INT_CST_LOW (TYPE_SIZE (base_type)))))
> -     maxsize = -1;
> - 
>     /* In case of a decl or constant base object we can do better.  */
>   
>     if (DECL_P (exp))

Reply via email to