This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/51731] code generation bug in negative indices in arrays on 64-bit targets
- From: "m.hekkelman at cmbi dot ru.nl" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Tue, 03 Jan 2012 07:44:55 +0000
- Subject: [Bug c++/51731] code generation bug in negative indices in arrays on 64-bit targets
- Auto-submitted: auto-generated
- References: <bug-51731-4@http.gcc.gnu.org/bugzilla/>
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.