On Mon, 4 Aug 2014, Marc Glisse wrote:

> On Mon, 4 Aug 2014, Marek Polacek wrote:
> 
> > +/* { dg-do compile } */
> > +
> > +void
> > +foo (void)
> > +{
> > +  volatile __PTRDIFF_TYPE__ t;
> > +  int i;
> > +  int *p = &i;
> > +  int *q = &i + 1;
> > +  t = q - (q - 1);
> > +  t = (q - 1) - q; /* { dg-warning "integer overflow in expression" } */
> > +  t = p - (p - 1);
> > +  t = (p - 1) - p ; /* { dg-warning "integer overflow in expression" } */
> > +}
> 
> Why do you want a warning for (q - 1) - q ? It looks like a perfectly correct
> way to say -1 to me (ptrdiff_t is a signed type for a reason).

But computing &object - 1 does not result in a valid pointer,
so p - 1 is what we want to warn about?  OTOH (q - 1) - q is fine.

Indeed that POINTER_PLUS_EXPR has an unsigned offset is an implementation
detail.

Richard.

Reply via email to