anchor.diff:          norm cfg env' (Arg (Clos (env, t, BU.mk_ref None, false), aq, t.pos) :: stack) head
   
         | Match(env', asc_opt, branches, lopt, cfg, r) :: stack ->
  -        let lopt =
  -          match lopt with
  -          | None -> None
  -          | Some rc ->
  -            Some ({rc with residual_typ = (match rc.residual_typ with
  -                                           | None -> None
  -                                           | Some t -> Some (closure_as_term cfg env' t))}) in
  +        let lopt = BU.map_option (norm_residual_comp cfg env') lopt in
           log cfg  (fun () -> BU.print1 "Rebuilding with match, scrutinee is %s ...\n" (Print.term_to_string t));
           //the scrutinee is always guaranteed to be a pure or ghost term
           //see tc.fs, the case of Tm_match and the comment related to issue #594
  
positive.code:     end
    | _ -> false
  
  (* GM: Please consider this function private outside of this recursive
   * group, and call `normalize` instead. `normalize` will print timing
   * information when --debug_level NormTop is given, which makes it a
  
negative.code:             end
  
            | Tm_match(head, asc_opt, branches, lopt) ->
              let lopt = BU.map_option (maybe_drop_rc_typ cfg) lopt in
              let stack = Match(env, asc_opt, branches, lopt, cfg, t.pos)::stack in
              if cfg.steps.iota
                  && cfg.steps.weakly_reduce_scrutinee
  