https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116510
--- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> --- And yes, there's a type mismatch in ifcvt: (gdb) p captures[1] $1 = <integer_cst 0x7ffff6fbde10> (gdb) p captures[0] $2 = <ssa_name 0x7ffff6fde1f8 8> (gdb) p debug_tree ($1) <integer_cst 0x7ffff6fbde10 type <integer_type 0x7ffff6e22348 unsigned char> constant 92> $3 = void (gdb) p debug_tree ($2) <ssa_name 0x7ffff6fde1f8 type <integer_type 0x7ffff6e225e8 int public SI the built 'cond' is !(_8 == 92 | _8 == 34) where _8 is 'int' but the case label constants are 'unsigned char'. You have to convert the case label constants to the type of the switch variable.