Compiler crash using abstract modules
Mark Scandariato
mscandar@REDACTED
Sun Nov 14 05:47:47 CET 2004
Compiling:
-module(foo, [A]).
-export([bar/1]).
-record(s, {a}).
bar(S) when S#s.a == 0 -> any_term.
Produces:
4> c(foo).
./foo.erl:none: internal error in expand_module;
crash reason: {function_clause,[{sys_expand_pmod,
gexpr,
[{call,
7,
{remote,
7,
{atom,7,erlang},
{atom,7,element}},
[{integer,7,2},{var,7,'S'}]},
{pmod,
['A'],
[{bar,1},
{module_info,0},
{module_info,1}],
[{bar,1},
{module_info,0},
{module_info,1}]}]},
{sys_expand_pmod,guard_test,2},
{sys_expand_pmod,guard0,2},
{sys_expand_pmod,guard,2},
{sys_expand_pmod,clause,2},
{sys_expand_pmod,clauses,2},
{sys_expand_pmod,function,4},
{sys_expand_pmod,form,2},
{sys_expand_pmod,forms,2},
{sys_expand_pmod,forms,4}]}
error
5>
The following don't crash:
bar(#s{a=0}) -> any_term.
bar(S) when S#s.a -> any_term.
bar(S) when is_integer(S#s.a) -> whatever.
Very interesting!
Mark.
More information about the erlang-bugs
mailing list