anchor.diff:  
   %% Match context type.
   -record(ms,
  -        {id=make_ref() :: reference(),          %Unique ID.
  -         valid=0 :: non_neg_integer(),          %Valid slots
  +        {valid=0 :: non_neg_integer(),          %Valid slots
            slots=0 :: non_neg_integer()           %Number of slots
           }).
   
  
positive.code:     %% without restrictions.
      remove_fragility(Vst);
  valfun_1({'%', {type_info, Reg, match_context}}, Vst) ->
      update_type(fun meet/2, #ms{}, Reg, Vst);
  valfun_1({'%', {type_info, Reg, Type}}, Vst) ->
      %% Explicit type information inserted by optimization passes to indicate
      %% that Reg has a certain type, so that we can accept cross-function type
  
negative.code:     bool;
  join({atom,_}, {atom,_}) ->
      {atom,[]};
  join(#ms{valid=B1,slots=Slots1},
       #ms{valid=B2,slots=Slots2}) ->
      #ms{valid=B1 band B2,slots=min(Slots1, Slots2)};
  join(T1, T2) when T1 =/= T2 ->
      %% We've exhaused all other options, so the type must either be a list or
      %% a 'term'.
  