https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87059
--- Comment #2 from Aldy Hernandez <aldyh at gcc dot gnu.org> --- I can't reproduce with a cross to powerpc64le-linux. I'm trying this: void d(void); char *a, *b; void c(void) { if (b == a) return; if (__builtin_strncmp(a, "", b - a)) d(); } I also tried using x86-64 linux headers, which I assume are sufficiently similar: typedef long unsigned int size_t; extern int strncmp (const char *__s1, const char *__s2, size_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); etc etc Could someone provide a preprocessed source just in case my definitions above are wrong?