This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] Fix PR58941
- From: Richard Biener <rguenther at suse dot de>
- To: Richard Sandiford <rdsandiford at googlemail dot com>
- Cc: gcc-patches at gcc dot gnu dot org
- Date: Thu, 7 Nov 2013 09:41:24 +0100 (CET)
- Subject: Re: [PATCH] Fix PR58941
- Authentication-results: sourceware.org; auth=none
- References: <alpine dot LNX dot 2 dot 00 dot 1311051421010 dot 4261 at zhemvz dot fhfr dot qr> <874n7pjgqs dot fsf at talisman dot default>
On Wed, 6 Nov 2013, Richard Sandiford wrote:
> Richard Biener <rguenther@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"?
Hmm, indeed. I'll fix it.
Thanks,
Richard.
> 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))
>
>
--
Richard Biener <rguenther@suse.de>
SUSE / SUSE Labs
SUSE LINUX Products GmbH - Nuernberg - AG Nuernberg - HRB 16746
GF: Jeff Hawn, Jennifer Guild, Felix Imend