[Bug tree-optimization/61502] == comparison on "one-past" pointer gives wrong result
Keith.S.Thompson at gmail dot com
gcc-bugzilla@gcc.gnu.org
Tue Oct 21 22:32:00 GMT 2014
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61502
--- Comment #6 from Keith Thompson <Keith.S.Thompson at gmail dot com> ---
In the test case for Bug 63611 (marked as a duplicate of this one)
we have:
element x[1];
element y[1];
element *const x0 = x;
element *const x1 = x0 + 1;
element *const y0 = y;
When the test case is executed, the condition (x1 == y0) is true
when it's evaluated, but the condition (x + 1 == y) (which I argue is
equivalent) is false when it's evaluated 2 lines later.
I don't believe that DR#260 applies, since there are no indeterminate
values being used here. Which means, I think, that N1570 6.2.4p2:
An object exists, has a constant address, and retains its
last-stored value throughout its lifetime.
does apply.
Whether x follows y or y follows x in memory, or neither, is
unimportant. The problem is that the "==" comparison is behaving
inconsistently for the same two pointer values.
I'm unconvinced by the argument (if I understand it correctly) that
the objects x and y might be adjacent when the first comparison is
evaluated, but not when the second is evaluated. I believe that would
violate the requirement that objects have constant addresses and retain
their last-stored values. Furthermore, even if relocating objects so
they're no long adjacent is permitted by the language, I don't believe
gcc (or the code that it generates) is actually doing so in this case.
More information about the Gcc-bugs
mailing list