anchor.diff:  		C1 = #c_clause{pats=[P], guard=#c_literal{val=true}, body=E},
   		Err = #c_tuple{es=[#c_literal{val='badmatch'}, X]},
   		C2 = #c_clause{pats=[X], guard=#c_literal{val=true},
  -			       body=#c_primop{name=#c_literal{val='match_fail'},
  -					      args=[Err]}},
  +			       body=match_fail(Anno, Err)},
   		#c_case{arg=A, clauses=[C1, C2]}
   	end,
       C1 = #c_clause{pats=[#c_cons{hd=X, tl=Xs}], guard=#c_literal{val=true},
  -		   body=Match(#c_apply{op=F, args=[X, Avar]},
  +		   body=Match(#c_apply{anno=Anno, op=F, args=[X, Avar]},
   			      #c_tuple{es=[X, Avar]},
   %%% Tuple passing version
  -			      Match(#c_apply{op=Loop, args=[Xs, Avar]},
  +			      Match(#c_apply{anno=Anno,
  +					     op=Loop,
  +					     args=[Xs, Avar]},
   				    #c_tuple{es=[Xs, Avar]},
   				    #c_tuple{es=[#c_cons{hd=X, tl=Xs}, Avar]})
   %%% Multiple-value version
  
positive.code: %%% 		   body=#c_values{es=[#c_literal{val=[]}, A]}},
      Err = #c_tuple{es=[#c_literal{val='function_clause'}, Xs]},
      C3 = #c_clause{pats=[Xs], guard=#c_literal{val=true},
  		   body=#c_primop{name=#c_literal{val='match_fail'},
  				  args=[Err]}},
      Fun = #c_fun{vars=[Xs, Avar],
  		 body=#c_case{arg=Xs, clauses=[C1, C2, C3]}},
      L = #c_var{name='L'},
      expr(#c_let{vars=[F, Avar, L], arg=#c_values{es=[Arg1, Arg2, Arg3]},
  		body=#c_letrec{defs=[{Loop,Fun}],
  %%% Tuple passing version
   			       body=#c_apply{op=Loop, args=[L, Avar]}}},
  %%% Multiple-value version
  %%% 			       body=#c_let{vars=[Xs, A],
  %%% 					   arg=#c_apply{op=Loop,
  
negative.code: 
  opt_bool_not(#c_case{arg=Arg,clauses=Cs0}=Case0) ->
      case Arg of
  	#c_call{anno=Anno,module=#c_literal{val=erlang},
   		name=#c_literal{val='not'},
   		args=[Expr]} ->
  	    Cs = opt_bool_not(Anno, Expr, Cs0),
  	    Case = Case0#c_case{arg=Expr,clauses=Cs},
  	    opt_bool_not(Case);
  	_ ->
  	    opt_bool_case_redundant(Case0)
      end.
  
  opt_bool_not(Anno, Expr, Cs) ->
      Tail = case is_bool_expr(Expr) of
  	       false ->
  		   [#c_clause{anno=[compiler_generated],
  			      pats=[#c_var{name=cor_variable}],
  			      guard=#c_literal{val=true},
  			      body=#c_call{anno=Anno,
  					   module=#c_literal{val=erlang},
  					   name=#c_literal{val=error},
  					   args=[#c_literal{val=badarg}]}}];
  	       true -> []
  