anchor.diff:      A = record_anno(L, St1),
       {annotate_tuple(A, Es1, St1),Eps,St1};
   expr({map,L,Es0}, St0) ->
  -    % erl_lint should make sure only #{ K => V } are allowed
  -    % in map construction.
  -    try map_pair_list(Es0, St0) of
  -	{Es1,Eps,St1} ->
  -	    A = lineno_anno(L, St1),
  -	    {ann_c_map(A,Es1),Eps,St1}
  -    catch
  -	throw:{bad_map,Warning} ->
  -	    St = add_warning(L, Warning, St0),
  -	    LineAnno = lineno_anno(L, St),
  -	    As = [#c_literal{anno=LineAnno,val=badarg}],
  -	    {#icall{anno=#a{anno=LineAnno},	%Must have an #a{}
  -		    module=#c_literal{anno=LineAnno,val=erlang},
  -		    name=#c_literal{anno=LineAnno,val=error},
  -		    args=As},[],St}
  -    end;
  +    map_build_pair_chain(#c_literal{val=#{}},Es0,lineno_anno(L,St0),St0);
   expr({map,L,M0,Es0}, St0) ->
       try expr_map(M0,Es0,lineno_anno(L, St0),St0) of
   	{_,_,_}=Res -> Res
  
positive.code: -import(ordsets, [add_element/2,del_element/2,is_element/2,
  		  union/1,union/2,intersection/2,subtract/2]).
  -import(cerl, [ann_c_cons/3,ann_c_cons_skel/3,ann_c_tuple/2,c_tuple/1,
  	       ann_c_map/2, ann_c_map/3]).
  
  -include("core_parse.hrl").
  
  
negative.code: attribute({attribute,Line,Name,Val}) ->
      {#c_literal{val=Name, anno=[Line]}, #c_literal{val=Val, anno=[Line]}}.
  
  %% function_dump(module_info,_,_,_) -> ok;
  %% function_dump(Name,Arity,Format,Terms) ->
  %%     io:format("~w/~w " ++ Format,[Name,Arity]++Terms),
  %%     ok.
  
  function({function,_,Name,Arity,Cs0}, Ws0, File, Opts) ->
      St0 = #core{vcount=0,opts=Opts,ws=Ws0,file=[{file,File}]},
      {B0,St1} = body(Cs0, Name, Arity, St0),
      %% ok = function_dump(Name,Arity,"body:~n~p~n",[B0]),
      {B1,St2} = ubody(B0, St1),
      %% ok = function_dump(Name,Arity,"ubody:~n~p~n",[B1]),
      {B2,#core{ws=Ws}} = cbody(B1, St2),
      %% ok = function_dump(Name,Arity,"cbody:~n~p~n",[B2]),
      {{#c_var{name={Name,Arity}},B2},Ws}.
  
  body(Cs0, Name, Arity, St0) ->
  