https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114965
--- Comment #6 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Reduded testcase that fails at -O1 (but passes at -O2): ``` [[gnu::noipa]] static void g(char pad1) { if (pad1 != '0' && pad1 != '+' && pad1 != '_') __builtin_unreachable(); if (pad1 == '0' || pad1 == '+') __builtin_trap(); } char buf[4000]; int main(void) { g('_'); } ``` But it definitely comes down to reassociation incorrectly thinking that (here) that pad1 could only be 43 or 48. While it could be also 93 ('_').