[erlang-bugs] internal error in v3_life

Björn Gustavsson <>
Tue Dec 20 13:52:17 CET 2011


Thanks for the bug report and for the minimized test case.

/Bjorn


On 12/20/11, Erik Søe Sørensen <> wrote:
> And simpler still:
>
>     split_cases(A) ->
>          case A of
>              x -> Z = dummy1;
>              _ -> Z = dummy2,
>               a=b
>          end,
>          Z.
>
>
>
> On 20-12-2011 10:56, Erik Søe Sørensen wrote:
>> A simplified version:
>>
>>     -module(comperr).
>>     -compile([export_all]).
>>
>>     split_cases(A) ->
>>         case A of
>>             x -> Z = dummy1;
>>             _ -> Z = dummy2,
>>              a=b
>>         end,
>>         case Z of
>>             _ -> ok
>>         end.
>>
>> This fails with erts-5.8.4.
>>
>> On 20-12-2011 10:01, Håkan Mattsson wrote:
>>> -module(foo).
>>> -compile([export_all]).
>>>
>>> split_cases(IsRecursive, [Case | Cases], Acc) ->
>>>      case binary:split(Case,<<":">>) of
>>>          [<<"qmt file", _/binary>>  |_] ->
>>>              Qmt = Case,
>>>              case Cases of
>>>                  [Case2 | Cases2] ->
>>>                      Sections = binary:split(Case2,<<"\n">>, [global]);
>>>                  [] ->
>>>                      Sections = binary:split(Case,<<"\n">>, []),
>>>                      Cases2 = []
>>>              end;
>>>          [<<"test case", _/binary>>  |_] ->
>>>              Qmt =<<>>,
>>>              Sections = binary:split(Case,<<"\n">>, [global]),
>>>              Cases2 = Cases;
>>>          [<<>>] ->
>>>
>>>              io:format("DEBUG: ~p ~p\n", [Case, Cases]),
>>>              Qmt =<<>>,
>>>              Sections = [],
>>>              Cases2 = [],
>>>              a=b
>>>      end,
>>>      case Sections of
>>>          [Reason] ->
>>>              case binary:split(Qmt,<<":">>) of
>>>                  [_, QmtFile] ->  ok;
>>>                  []           ->  QmtFile = Qmt
>>>              end,
>>>              Res = {result_case, QmtFile,<<"ERROR">>, Reason},
>>>              split_cases(IsRecursive, Cases2, [Res | Acc]);
>>>          [QmtCase, Reason] ->
>>>              [_, QmtFile] = binary:split(QmtCase,<<":">>),
>>>              Res =
>>>                  case binary:split(Reason,<<":">>) of
>>>                      [<<"result", _/binary>>, Reason2] ->
>>>                          {result_case, QmtFile, Reason2, Reason};
>>>                      [<<"error", _/binary>>, Reason2] ->
>>>                          {result_case, QmtFile,<<"ERROR">>, Reason2}
>>>                  end,
>>>              split_cases(IsRecursive, Cases2, [Res | Acc]);
>>>          [QmtCase, ScriptCase, EventCase | DocAndResult] ->
>>>              [_, QmtFile]    = binary:split(QmtCase,<<":">>),
>>>              [_, ScriptFile] = binary:split(ScriptCase,<<":">>),
>>>              [_, EventFile]  = binary:split(EventCase,<<":">>),
>>>              EventLog = binary_to_list(EventFile),
>>>              case IsRecursive of
>>>                  true ->
>>>                      case annotate_log(EventLog) of
>>>                          ok ->
>>>                              ok;
>>>                          {error, _, Reason} ->
>>>                              io:format("ERROR in ~s\n\~p\n", [EventLog,
>>> Reason])
>>>                      end;
>>>                  false ->
>>>                      ignore
>>>              end,
>>>              {Doc, ResultCase} = split_doc(DocAndResult, []),
>>>              Result = parse_result(ResultCase),
>>>              HtmlLog = EventLog ++ ".html",
>>>              Res = {test_case, QmtFile, Qmt, ScriptFile, EventLog, Doc,
>>>                     HtmlLog, Result},
>>>              split_cases(IsRecursive, Cases2, [Res | Acc])
>>>      end;
>>> split_cases(_IsRecursive, [], Acc) ->
>>>      lists:reverse(Acc).
>>>
>>> annotate_log(_EventLog) ->
>>>      dummy.
>>>
>>> split_doc(_DocAndResult, _Acc) ->
>>>      {dummy, dummy}.
>>>
>>> parse_result(_ResultCase) ->
>>>      dummy.
>>
>
>


-- 
Björn Gustavsson, Erlang/OTP, Ericsson AB


More information about the erlang-bugs mailing list