http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54945
--- Comment #12 from gcc at robbertkrebbers dot nl 2012-10-18 15:59:00 UTC --- What do you mean by invalid? It is certainly not undefined behavior. The pointer "&x + 1" is allowed by (6.5.6p8 of C11), and the equality operator should behave as follows (6.5.9 of C11): ... or one is a pointer to one past the end of one array object and the other is a pointer to the start of a different array object that happens to immediately follow the first array object in the address space. Taking the issues and the response of defect report #260 http://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_260.htm into account, I would say (but dr#260 does not directly say so) it may even non-deterministically yield 0 or 1. Therefore, the behavior of gcc would be reasonable to me.