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.