https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86263
--- Comment #7 from Tom de Vries <vries at gcc dot gnu.org> --- The pass_lower_switch<O0> has no effect. It generates a switch expansion at bb12, but the function still uses the switch at bb10: ... (gdb) call debug_function (cfun.decl, 0) _dcvt (void * ptr, char type, int opt, int val) { char D.1454; int _1; char _12; unsigned int _13; unsigned int _14; _Bool _15; long unsigned int _16; long unsigned int _17; _Bool _18; long unsigned int _19; _Bool _20; long unsigned int _21; _Bool _22; <bb 2> : _1 = (int) type_3(D); <bb 11> : goto <bb 10>; [100.00%] <bb 12> : _13 = (unsigned int) _1; _14 = _13 + 4294967227; _15 = _14 > 34; if (_15 != 0) goto <bb 8>; [INV] else goto <bb 13>; [INV] <bb 13> : _16 = 1 << _14; _17 = _16 & 4294967297; _18 = _17 != 0; if (_18 != 0) goto <bb 7>; [INV] else goto <bb 14>; [INV] <bb 14> : _19 = _16 & 17179869188; _20 = _19 != 0; if (_20 != 0) goto <bb 4>; [INV] else goto <bb 15>; [INV] <bb 15> : _21 = _16 & 8589934594; _22 = _21 != 0; if (_22 != 0) goto <bb 3>; [INV] else goto <bb 16>; [INV] <bb 16> : goto <bb 8>; [INV] <bb 10> : switch (_1) <default: <L8> [INV], case 69: <L6> [INV], case 70: <L0> [INV], case 71: <L2> [INV], case 101: <L6> [INV], case 102: <L0> [INV], case 103: <L2> [INV]> <bb 3> : <L0>: f1 (ptr_5(D)); goto <bb 8>; [INV] <bb 4> : <L2>: if (opt_7(D) == 0) goto <bb 5>; [INV] else goto <bb 6>; [INV] <bb 5> : opt_8 = 1; <bb 6> : f2 (ptr_5(D)); goto <bb 8>; [INV] <bb 7> : <L6>: f3 (ptr_5(D)); <bb 8> : <L8>: _12 = (char) val_11(D); <bb 9> : <L10>: return _12; } ...