anchor.diff:      {#k_receive_accept{anno=#k{us=[],ns=[],a=A}},[],St};
   uexpr(#k_receive_next{anno=A}, _, St) ->
       {#k_receive_next{anno=#k{us=[],ns=[],a=A}},[],St};
  -uexpr(#k_try{anno=A,arg=A0,vars=Vs,body=B0,evars=Evs,handler=H0},
  -      {break,Rs0}, St0) ->
  -    {Avs,St1} = new_vars(length(Vs), St0),	%Need dummy names here
  -    {A1,Au,St2} = ubody(A0, {break,Avs}, St1),	%Must break to clean up here!
  -    {B1,Bu,St3} = ubody(B0, {break,Rs0}, St2),
  -    {H1,Hu,St4} = ubody(H0, {break,Rs0}, St3),
  -    %% Guarantee ONE return variable.
  -    NumNew = if
  -		 Rs0 =:= [] -> 1;
  -		 true -> 0
  -	     end,
  -    {Ns,St5} = new_vars(NumNew, St4),
  -    Rs1 = Rs0 ++ Ns,
  -    Used = union([Au,subtract(Bu, lit_list_vars(Vs)),
  -		  subtract(Hu, lit_list_vars(Evs))]),
  -    {#k_try{anno=#k{us=Used,ns=lit_list_vars(Rs1),a=A},
  -	    arg=A1,vars=Vs,body=B1,evars=Evs,handler=H1,ret=Rs1},
  -     Used,St5};
  +uexpr(#k_try{anno=A,arg=A0,vars=Vs,body=B0,evars=Evs,handler=H0}=Try,
  +      {break,Rs0}=Br, St0) ->
  +    case is_in_guard(St0) of
  +	true ->
  +	    {[#k_var{name=X}],#k_var{name=X}} = {Vs,B0}, %Assertion.
  +	    #k_atom{val=false} = H0,		%Assertion.
  +	    {A1,Bu,St1} = uexpr(A0, Br, St0),
  +	    {Try#k_try{anno=#k{us=Bu,ns=lit_list_vars(Rs0),a=A},
  +		       arg=A1,ret=Rs0},Bu,St1};
  +	false ->
  +	    {Avs,St1} = new_vars(length(Vs), St0),
  +	    {A1,Au,St2} = ubody(A0, {break,Avs}, St1),
  +	    {B1,Bu,St3} = ubody(B0, Br, St2),
  +	    {H1,Hu,St4} = ubody(H0, Br, St3),
  +	    {Rs1,St5} = ensure_return_vars(Rs0, St4),
  +	    Used = union([Au,subtract(Bu, lit_list_vars(Vs)),
  +			  subtract(Hu, lit_list_vars(Evs))]),
  +	    {#k_try{anno=#k{us=Used,ns=lit_list_vars(Rs1),a=A},
  +		    arg=A1,vars=Vs,body=B1,evars=Evs,handler=H1,ret=Rs1},
  +	     Used,St5}
  +    end;
   uexpr(#k_try{anno=A,arg=A0,vars=Vs,body=B0,evars=Evs,handler=H0},
         return, St0) ->
       {Avs,St1} = new_vars(length(Vs), St0),	%Need dummy names here
  
positive.code: 	false ->
  	    {Ea,Pa,St1} = force_atomic(E, St0),
  	    ubody(pre_seq(Pa, #ivalues{args=[Ea]}), Break, St1)
      end;
  ubody(E, {guard_break,_Rs} = GuardBreak, St0) ->
      %%ok = io:fwrite("ubody ~w:~p~n", [?LINE,{E,Br}]),
      %% Exiting expressions need no trailing break.
      {Ea,Pa,St1} = force_atomic(E, St0),
      ubody(pre_seq(Pa, #ivalues{args=[Ea]}), GuardBreak, St1).
  
  iletrec_funs(#iletrec{defs=Fs}, St0) ->
      %% Use union of all free variables.
  
negative.code:     {#k_guard{anno=#k{us=Gus,ns=[],a=A},clauses=Gs1},Gus,St1};
  umatch(#k_guard_clause{anno=A,guard=G0,body=B0}, Br, St0) ->
      %%ok = io:fwrite("~w: ~p~n", [?LINE,G0]),
      {G1,Gu,St1} = uexpr(G0, {break,[]},
  			St0#kern{guard_refc=St0#kern.guard_refc+1}),
      %%ok = io:fwrite("~w: ~p~n", [?LINE,G1]),
      {B1,Bu,St2} = umatch(B0, Br, St1#kern{guard_refc=St1#kern.guard_refc-1}),
      Used = union(Gu, Bu),
  