https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61502
--- Comment #15 from joseph at codesourcery dot com <joseph at codesourcery dot com> --- On Sun, 26 Oct 2014, Keith.S.Thompson at gmail dot com wrote: > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61502 > > --- Comment #14 from Keith Thompson <Keith.S.Thompson at gmail dot com> --- > The C standard requires that, if y "happens to immediately follow" > x in the address space, then a pointer just past the end of x shall > compare equal to a pointer to the beginning of y (C99 and C11 6.5.9p6). > > How could I distinguish the current behavior of gcc from the behavior > of a hypothetical C compiler that violates that requirement? In > other words, in what sense does gcc actually obey that requirement? They are not distinguishable (unless by implementation documentation defining what "happens to immediately follow" means for the given implementation - but the meaning of that phrase is unspecified, not implementation-defined, so there is no requirement for implementations to document anything in that regard). "happens to immediately follow" is an intuitive description that explains *why* such pointers are allowed to compare equal at all (to avoid a requirement for otherwise unnecessary padding in common classes of implementations), but can only be observed by the result of a comparison (an observation that is then only valid for that particular comparison). The natural state would be for such pointers to compare unequal. The standard gives latitude for them to compare equal, but there is never an observable requirement that they do, even if some other comparison had that result.