https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69567
--- Comment #2 from Martin Sebor <msebor at gcc dot gnu.org> --- In fact, the test case can be simplified even further to this: typedef __UINT16_TYPE__ uint16_t; typedef __UINT32_TYPE__ uint32_t; typedef __INT64_TYPE__ int64_t; typedef __UINT64_TYPE__ uint64_t; static uint32_t a; static uint32_t *aa = &a; static int64_t b; static int64_t *bb = &b; static uint64_t c; int main(void) { c |= (uint16_t)*aa <= *bb; if (c != 1) __builtin_abort (); }