[erlang-bugs] Internal error in sys_core_fold when matching on map is guaranteed to fail

Anthony Ramine n.oxyde@REDACTED
Tue Mar 18 19:58:20 CET 2014


Hello,

Are map literals supposed to be considered data, as per cerl:is_data/1? can I currently fix this by changing

is_data(#c_literal{}) ->
    true;

to

is_data(#c_literal{val=V}) when not is_map(V) ->
    true;

or not?

Regards,

-- 
Anthony Ramine

Le 18 mars 2014 à 18:53, Anthony Ramine <n.oxyde@REDACTED> a écrit :

> Cool, will look at it.
> 
> -- 
> Anthony Ramine
> 
> Le 18 mars 2014 à 17:50, Ulf Norell <ulf.norell@REDACTED> a écrit :
> 
>> That fixed the case when the map doesn't match but I get the same error when it's the map that matches and other patterns that don't:
>> 
>> -module(bug).
>> f() ->
>>  case #{} of
>>    #{} -> 0;
>>    a   -> 1 
>>  end.
>> 
>> This is on master from today (aab1afa8a63081f2c30f83ebe8b6caaac979795c).
>> 
>> / Ulf
>> 
>> 
>> On Tue, Mar 4, 2014 at 11:38 PM, Anthony Ramine <n.oxyde@REDACTED> wrote:
>> https://github.com/erlang/otp/pull/267
>> 
>> --
>> Anthony Ramine
>> 
>> Le 4 mars 2014 à 09:45, Ulf Norell <ulf.norell@REDACTED> a écrit :
>> 
>>> This one crashes in a different place but likely for the same reason.
>>> 
>>> -module(bug).
>>> f() ->
>>>  case true of
>>>    #{}  -> error;
>>>    true -> ok
>>>  end.
>>> 
>>> $ erl
>>> Erlang/OTP 17 [RELEASE CANDIDATE 2] [erts-6.0] [source-a74e66a] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false]
>>> 
>>> Eshell V6.0  (abort with ^G)
>>> 1> c(bug).
>>> Function: f/0
>>> bug.erl: internal error in core_fold_module;
>>> crash reason: function_clause
>>> 
>>>  in function  sys_core_fold:opt_bool_clauses/3
>>>     called as sys_core_fold:opt_bool_clauses([],true,false)
>>>  in call from sys_core_fold:opt_bool_clauses/3 (sys_core_fold.erl, line 1815)
>>>  in call from sys_core_fold:opt_bool_clauses/1 (sys_core_fold.erl, line 1790)
>>>  in call from sys_core_fold:opt_bool_case/1 (sys_core_fold.erl, line 1779)
>>>  in call from sys_core_fold:expr/3 (sys_core_fold.erl, line 347)
>>>  in call from sys_core_fold:opt_simple_let_1/4 (sys_core_fold.erl, line 2562)
>>>  in call from sys_core_fold:expr/3 (sys_core_fold.erl, line 355)
>>>  in call from sys_core_fold:expr/3 (sys_core_fold.erl, line 279)
>>> bug.erl:2: Warning: function f/0 is unused
>>> error
>>> 
>>> / Ulf
>>> 
>>> 
>>> 
>>> On Tue, Mar 4, 2014 at 9:42 AM, Ulf Norell <ulf.norell@REDACTED> wrote:
>>> -module(bug).
>>> f() ->
>>>  case maybe_map of
>>>    #{}     -> ok;
>>>    not_map -> error
>>>  end.
>>> 
>>> $ erl
>>> Erlang/OTP 17 [RELEASE CANDIDATE 2] [erts-6.0] [source-a74e66a] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false]
>>> 
>>> Eshell V6.0  (abort with ^G)
>>> 1> c(bug).
>>> Function: f/0
>>> bug.erl: internal error in core_fold_module;
>>> crash reason: {case_clause,{none}}
>>> 
>>>  in function  sys_core_fold:will_match/2 (sys_core_fold.erl, line 1748)
>>>  in call from sys_core_fold:clauses/5 (sys_core_fold.erl, line 1701)
>>>  in call from sys_core_fold:clauses/5 (sys_core_fold.erl, line 1718)
>>>  in call from sys_core_fold:expr/3 (sys_core_fold.erl, line 352)
>>>  in call from sys_core_fold:clause/4 (sys_core_fold.erl, line 1481)
>>>  in call from sys_core_fold:clauses/5 (sys_core_fold.erl, line 1699)
>>>  in call from sys_core_fold:expr/3 (sys_core_fold.erl, line 352)
>>>  in call from sys_core_fold:expr/3 (sys_core_fold.erl, line 279)
>>> bug.erl:2: Warning: function f/0 is unused
>>> error
>>> 
>>> / Ulf
>>> 
>>> 
>>> _______________________________________________
>>> erlang-bugs mailing list
>>> erlang-bugs@REDACTED
>>> http://erlang.org/mailman/listinfo/erlang-bugs
>> 
>> _______________________________________________
>> erlang-bugs mailing list
>> erlang-bugs@REDACTED
>> http://erlang.org/mailman/listinfo/erlang-bugs
>> 
> 




More information about the erlang-bugs mailing list