https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68971
--- Comment #11 from Martin Sebor <msebor at gcc dot gnu.org> --- Right. Because the call to __builtin_mul_overflow in the test case is not a constant expression, the -Woverflow warning detects the overflow in the multiplication subexpression that is constant. The __builtin_mul_overflow call is evaluated into a constant but not until after the warning has detected the overflow. The patch for bug 68120 introduced other built-ins to determine overflow at compile-time. Using those the return statement in this test case would look something like this: return __builtin_mul_overflow_p (0x7fffffff, 0x7fffffff, 0) ? 2 : (0x7fffffff * 0x7fffffff == 0x7fffffff * 0x7fffffff); and compile with no warning.