erlang/otp

[erlc] newly introduced internal error in beam_kernel_to_ssa (with feature maybe enabled)

RobinMorisset opened this issue · 0 comments

@jhogberg Sorry to bring bad news again, but the fuzzer finally found an issue with the recently merged #6631:

f() ->
    case self() of
        [_ | X] ->
            ok;
        false ->
            {ok#{
                (X = ok) :=
                    ((ok /=
                        maybe
                            ok
                        end) =/= ok)
            }}
    end,
    X.

crashes erlc with the following error message:

Function: f/0
minimized/kernel_to_ssa.erl: internal error in pass beam_kernel_to_ssa:
exception error: no function clause matching beam_kernel_to_ssa:cg({k_return,[],[{k_var,[],14},{k_var,[],19}]},
 {cg,11,1,none,
     #{7 => {b_var,7},
       8 => {b_var,8},
       14 => {b_var,14},
       19 => {b_literal,unused},
       20 => {b_var,20},
       21 => {b_var,21},
       22 => {b_var,22},
       23 => {b_var,23},
       '@ssa_bool' => {b_var,{'@ssa_bool',9}},
       '@ssa_ret' => {b_var,'@ssa_ret'}},
     3,0,1,#{},false}) 
  in function  beam_kernel_to_ssa:cg/2 (beam_kernel_to_ssa.erl, line 114)
  in call from beam_kernel_to_ssa:select_val/4 (beam_kernel_to_ssa.erl, line 498)
  in call from beam_kernel_to_ssa:'-select_cg/5-anonymous-0-'/4 (beam_kernel_to_ssa.erl, line 217)
  in call from lists:mapfoldl_1/3 (lists.erl, line 1588)
  in call from beam_kernel_to_ssa:select_cg/5 (beam_kernel_to_ssa.erl, line 216)
  in call from beam_kernel_to_ssa:match_fmf/4 (beam_kernel_to_ssa.erl, line 639)
  in call from beam_kernel_to_ssa:match_cg/3 (beam_kernel_to_ssa.erl, line 177)

The bug does not reproduce if I checkout a version of OTP one commit before #6631 was merged.