I believe I've found a bug in the implementation of the "==" operator for pointers in both gcc and clang.
pointer_equality_bug.c
is a demonstration of the bug.
Quoting N1570 6.5.9p6:
Two pointers compare equal if and only if both are null pointers,