https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61502

--- Comment #39 from Alexander Cherepanov <ch3root at openwall dot com> ---
For diversity, a couple of examples with zero sized objects. Even though they
don't have pointer arithmetic at all they could be classified as being about
past-the-end pointers:-) Please let me know if it's better to move them into a
separate bug (or bugs).

----------------------------------------------------------------------
#include <stdio.h>

int main()
{
    struct {} x, y, *p = &x, *q = &y;

    printf("eq1: %d\n", &x == &y);
    printf("eq2: %d\n", p == q);
}
----------------------------------------------------------------------
$ gcc -std=c11 -Wall -Wextra test.c && ./a.out
eq1: 0
eq2: 1
----------------------------------------------------------------------
gcc x86-64 version: gcc (GCC) 10.0.0 20200110 (experimental)
----------------------------------------------------------------------

Empty structs is a gcc extension (they are UB according to C11, 6.7.2.1p8) but
IMHO the demonstrated instability is not good.

Happens only without optimizations (optimizations add some padding between `x`
and `y`).

Similar clang bug -- https://bugs.llvm.org/show_bug.cgi?id=44508.

Reply via email to