anchor.diff:  	false -> [Entry|kill_types2(V, Tdb)];
   	true -> kill_types2(V, Tdb)
       end;
  -kill_types2(V, [{_, {'fun',_}}=Entry|Tdb]) ->
  -    [Entry|kill_types2(V, Tdb)];
  -kill_types2(V, [{_,Atom}=Entry|Tdb]) when is_atom(Atom) ->
  -    [Entry|kill_types2(V, Tdb)];
   kill_types2(_, []) -> [].
   
   %% copy_type(DestVar, SrcVar, Tdb) -> Tdb'
  
positive.code:     %%
      Case;
  opt_bool_case_guard(#c_case{arg=Arg,clauses=Cs0}=Case) ->
      case is_safe_bool_expr(Arg, sub_new()) of
  	false ->
  	    Case;
  	true ->
  
negative.code: %%  Check whether the Core expression is guaranteed to return
  %%  a boolean IF IT RETURNS AT ALL.
  %%
  
  is_bool_expr(#c_call{module=#c_literal{val=erlang},
  		     name=#c_literal{val=Name},args=Args}=Call) ->
      NumArgs = length(Args),
      erl_internal:comp_op(Name, NumArgs) orelse
  	erl_internal:new_type_test(Name, NumArgs) orelse
          erl_internal:bool_op(Name, NumArgs) orelse
  	will_fail(Call);
  is_bool_expr(#c_try{arg=E,vars=[#c_var{name=X}],body=#c_var{name=X},
  		   handler=#c_literal{val=false}}) ->
      is_bool_expr(E);
  is_bool_expr(#c_case{clauses=Cs}) ->
      is_bool_expr_list(Cs);
  is_bool_expr(#c_clause{body=B}) ->
      is_bool_expr(B);
  is_bool_expr(#c_let{body=B}) ->
      is_bool_expr(B);
  is_bool_expr(#c_literal{val=Val}) ->
      is_boolean(Val);
  is_bool_expr(_) -> false.
  
  is_bool_expr_list([C|Cs]) ->
      is_bool_expr(C) andalso is_bool_expr_list(Cs);
  is_bool_expr_list([]) -> true.
  
  %% is_safe_bool_expr(Core) -> true|false
  %%  Check whether the Core expression ALWAYS returns a boolean
  