[erlang-bugs] Compiler internal error on "case {<exp>}"

Erik Søe Sørensen <>
Thu Jan 23 23:41:22 CET 2014


Hi all,
I'd like to report a bug in the Erlang (R16B) compiler - it crashes on 
code like

    foo(X) ->
         case {X+1} of
             1 -> ok
         end.

(not that that code makes any sense anyway, of course).
The error message is:

    Function: foo/1
    erlcbug.erl:none: internal error in beam_except;
    crash reason: {{case_clause,
                        {'EXIT',
                            {{badmatch,
    [{set,[],[],{line,[{location,"erlcbug.erl",4}]}},
                                  {set,
                                      [{x,0}],
                                      [{x,0},{integer,1}],
                                      {alloc,1,{gc_bif,'+',{f,0}}}},
    {set,[],[],{alloc,1,{nozero,nostack,5,[]}}},
                                  {set,[{x,1}],[],{put_tuple,1}},
                                  {set,[],[{x,0}],put}]},
                             [{beam_except,fix_block,2,
    [{file,"beam_except.erl"},{line,138}]},
                              {beam_except,translate_exception,4,
    [{file,"beam_except.erl"},{line,130}]},
                              {beam_except,dig_out,2,
    [{file,"beam_except.erl"},{line,98}]},
                              {beam_except,translate_1,5,
    [{file,"beam_except.erl"},{line,78}]},
                              {beam_except,function,1,
    [{file,"beam_except.erl"},{line,41}]},
                              {beam_except,'-module/2-lc$^0/1-0-',1,
    [{file,"beam_except.erl"},{line,36}]},
                              {beam_except,module,2,
    [{file,"beam_except.erl"},{line,36}]},
    {compile,'-select_passes/2-anonymous-2-',2,
    [{file,"compile.erl"},{line,469}]}]}}},
                    [{compile,'-select_passes/2-anonymous-2-',2,
                         [{file,"compile.erl"},{line,469}]},
                     {compile,'-internal_comp/4-anonymous-1-',2,
                         [{file,"compile.erl"},{line,269}]},
    {compile,fold_comp,3,[{file,"compile.erl"},{line,287}]},
    {compile,internal_comp,4,[{file,"compile.erl"},{line,271}]},
    {compile,internal,3,[{file,"compile.erl"},{line,246}]}]}


As for narrowing down the cause and extent, I can report that all of the 
variants

    bar(X) ->
         case {X} of
             1 -> ok
         end.

    baz(X) ->
         case {X+1} of
             {1} -> ok
         end.

    quux(X) ->
         case {ext:f(X)} of
             1 -> ok
         end.

    supercalifragilisticexpialidocious(X) ->
         case {[X]} of
             1 -> ok
         end.

compile just fine, while

    antidisestablishmentarianism(X) ->
         case {-X} of
             1 -> ok
         end.

    baz2(X) ->
         case {X+1} of
             {1,2} -> ok
         end.

also trigger the bug.
(So apart from a tuple type mismatch, apparently a unary or binary 
operation must be included; the original triggering example featured 
"band".)

Regards,
Erik Søe Sørensen
-- 
Mobile: + 45 26 36 17 55 | Skype: eriksoesorensen | Twitter: @eriksoe
Trifork A/S  |  Margrethepladsen 4  |  DK-8000 Aarhus C | 
www.trifork.com <http://www.trifork.com/>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-bugs/attachments/20140123/5e38c3b9/attachment.html>


More information about the erlang-bugs mailing list