On Mon, Mar 18, 2019 at 10:31 PM Jeff Law <l...@redhat.com> wrote:
>
> On 3/18/19 1:03 PM, Martin Sebor wrote:
> > I the -Warray-bounds enhancement committed at the beginning
> > of the GCC 9 window I tried to correctly handle offsets in
> > MEM_REFs in the [max, min] kind of a range after converting
> > from sizetype to ptrdiff_type, but I did it wrong.  The bug
> > results in false positives in some unusual use cases that
> > I didn't consider at the time.
> >
> > The attached patch removes this incorrect handling and uses
> > the conservative anti-range handling for these cases instead.
> >
> > Martin
> >
> > PS Is there some technical reason why pointer offsets are
> > represented as the unsigned sizetype when they can be signed?
> I'm not aware of a conscious decision to treat them as unsigned or a
> particular target need to do so.  It's most likely a historical accident.

That historical accident included treating those unsigned types as
sign-extending ...

But yes, changing sizetype to ssizetype wherever we use it in
offset context would be a cleanup I guess.  But IIRC Bin tried
this and the fallout is (as usual) non-trivial to fix...

Richard.

>
> >
> > gcc-89720.diff
> >
> > PR tree-optimization/89720 - Spurious -Warray-bounds warning on a range 
> > with max < min
> >
> > gcc/ChangeLog:
> >
> >       PR tree-optimization/89720
> >       * tree-vrp.c (vrp_prop::check_mem_ref): Treat range with max < min
> >       more conservatively, the same as anti-range.
> >
> > gcc/testsuite/ChangeLog:
> >
> >       PR tree-optimization/89720
> >       * gcc.dg/Warray-bounds-42.c: New test.
> OK
> jeff

Reply via email to