anchor.diff:  share(Is0) ->
       %% We will get more sharing if we never fall through to a label.
       Is = eliminate_fallthroughs(Is0, []),
  -    share_1(Is, dict:new(), [], []).
  +    share_1(Is, #{}, [], []).
   
   share_1([{label,_}=Lbl|Is], Dict, [], Acc) ->
       share_1(Is, Dict, [], [Lbl|Acc]);
   share_1([{label,L}=Lbl|Is], Dict0, Seq, Acc) ->
  -    case dict:find(Seq, Dict0) of
  +    case maps:find(Seq, Dict0) of
   	error ->
  -	    Dict = dict:store(Seq, L, Dict0),
  +	    Dict = maps:put(Seq, L, Dict0),
   	    share_1(Is, Dict, [], [Lbl|Seq ++ Acc]);
   	{ok,Label} ->
   	    share_1(Is, Dict0, [], [Lbl,{jump,{f,Label}}|Acc])
  
positive.code:     St = case Lbls of
  	     [] -> St0;
  	     [_|_] ->
  		 Mlbl = dict:append_list(L, Lbls, Mlbl0),
  		 St0#st{mlbl=Mlbl}
  	 end,
      skip_unreachable(Is, [I|Acc], label_used(Lbl, St));
  
negative.code:     %% a sequence inside the 'try' block is a sequence that ends
      %% with an instruction that causes an exception. Any sequence
      %% that causes an exception must contain a line/1 instruction.
      maps:filter(fun(K, _V) -> sharable_with_try(K) end, Dict).
  
  sharable_with_try([{line,_}|_]) ->
      %% This sequence may cause an exception and may potentially
  