https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90082
--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> --- The problem is that in this case can_alter_cfg is false (fast DCE), and we have a (call_insn/u 27 25 38 2 (set (reg:SI 0 ax) (call (mem:QI (symbol_ref:DI ("__mulvsi3") [flags 0x41]) [0 S1 A8]) (const_int 0 [0]))) "pr90082.c":7:28 677 {*call_value} (expr_list:REG_DEAD (reg:SI 5 di) (expr_list:REG_DEAD (reg:SI 4 si) (expr_list:REG_UNUSED (reg:SI 0 ax) (nil)))) (expr_list (use (reg:SI 4 si)) (expr_list (use (reg:SI 5 di)) (nil)))) call that DCE would like to remove. The assert is that we really don't remove unreachable blocks etc. when we don't want to alter the cfg; the call is nothrow_insn_p and so we think it is fine to remove it, but it isn't if we can't modify the cfg - there are EDGE_ABNORMAL edges after the call.