http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51731

--- Comment #5 from Jakub Jelinek <jakub at gcc dot gnu.org> 2012-01-02 
19:32:08 UTC ---
(In reply to comment #4)
> Following your logic, if I rewrite the code from:
> 
>   return data.e[-1];
> 
> to
> 
>   int* ep = data.e;
>   return ep[-1];
> 
> It  would  be  valid,  right? And you still believe the bug report is 
> invalid?

Of course that wouldn't be valid.
I meant that if you had say array
type e[10];
somewhere and
  type *ep = data.e + 9;
you can then access
  ep[0] + ep[-1] + ep[-9]
In C++03, please read [expr.add]/5 :
"If both the pointer operand and the result point to elements of the same array
object, or one past the last element of the array object, the evaluation shall
not produce an overflow; otherwise, the behavior is undefined."

Reply via email to