https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79479
--- Comment #2 from Marek Polacek <mpolacek at gcc dot gnu.org> --- Generalized extended testcase: int fn1 (long x) { if (0) return __INT_MAX__ + 1; if (x || 0) return __INT_MAX__ + 1; /* { dg-warning "integer overflow" } */ if (1 || 0) return __INT_MAX__ + 1; /* { dg-warning "integer overflow" } */ if (0 && 0) return __INT_MAX__ + 1; if (0) return __INT_MAX__ + 1; else return 0; if (0) return 0; else return __INT_MAX__ + 1; /* { dg-warning "integer overflow" } */ if (0) { if (x) return __INT_MAX__ + 1; } if (0) { if (x) return __INT_MAX__ + 1; } else { if (x) return __INT_MAX__ + 1; /* { dg-warning "integer overflow" } */ } if (0) if (0) return __INT_MAX__ + 1; if (1) return 0; else return __INT_MAX__ + 1; if (1) if (0) return __INT_MAX__ + 1; if (1) { if (x) return __INT_MAX__ + 1; /* { dg-warning "integer overflow" } */ } else { if (x) return __INT_MAX__ + 1; } if (0) return __INT_MAX__ + 1; else if (0) return __INT_MAX__ + 1; else return __INT_MAX__ + 1; /* { dg-warning "integer overflow" } */ if (0) return __INT_MAX__ + 1; else if (1) return __INT_MAX__ + 1; /* { dg-warning "integer overflow" } */ else return __INT_MAX__ + 1; if (1) return __INT_MAX__ + 1; /* { dg-warning "integer overflow" } */ else if (0) return __INT_MAX__ + 1; return 0 ? __INT_MAX__ + 1 : 1; } void fn2 (int x) { if (0) x <<= sizeof (int) * __CHAR_BIT__; if (0) x <<= -1; if (0) x >>= sizeof (int) * __CHAR_BIT__; if (0) x >>= -1; }