https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87314
--- Comment #1 from Martin Sebor <msebor at gcc dot gnu.org> --- Same here (Clang doesn't eliminate the test here though): void f (void) { void *p = __builtin_malloc (sizeof (void*)); if (p == f) // not folded __builtin_abort (); } Here, GCC eliminates the equality test with a but not the one with b (Clang eliminates neither): char a[8] = ""; char b[8]; void f (void) { void *p = __builtin_malloc (sizeof (void*)); if (p == a) // folded to false __builtin_abort (); } void g (void) { void *p = __builtin_malloc (sizeof (void*)); if (p == b) // not folded __builtin_abort (); }