http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51731
--- Comment #6 from M.L. Hekkelman <m.hekkelman at cmbi dot ru.nl> 2012-01-03 07:44:55 UTC --- (In reply to comment #5) > (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." I stand corrected. Still, it would be nice if gcc would then issue a warning instead of only giving incorrect results when -O3 is specified.