https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105973
--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> --- In fact we get it wrong even if both branches call the same noreturn function: if (PREDICT(n > (__PTRDIFF_MAX__ / sizeof(T)))) { if (n > (__SIZE_MAX__ / sizeof(T))) throw1(); throw1(); } This is not compiled to the same code as: if (PREDICT(n > (__PTRDIFF_MAX__ / sizeof(T)))) { throw1(); } even though it has identical effects.