anchor.diff:                  {_,  _} -> {PB, NB, XInfo}
               end
       end.
  +
  +is_required_overwrite_merge(#?gpb_field{occurrence=required}=Field) ->
  +    classify_field_merge_action(Field) == overwrite;
  +is_required_overwrite_merge(_Field) ->
  +    false.
   
   compute_msg_field_mergers({pr, XInfo}, MsgName, AnRes) ->
       Merges =
  
positive.code:               || {FName, Merge} <- Mergings],
      mapping_create(MsgName, Fields, Opts).
  
  render_field_merger({overwrite, {PF, NF}}, _TrUserDataVar) ->
      ?expr(if 'NF' =:= undefined -> 'PF';
               true               -> 'NF'
  
negative.code:     {?expr(PF), ?expr(_), no_fields};
  format_msg_merger_fnclause_match(MsgName, MsgDef, Opts) ->
      FNames  = [get_field_name(Field) || Field <- MsgDef],
      PFVars  = [case is_required_overwrite_merge(Field) of
                     true  -> none;
                     false -> var("PF~s", [get_field_name(Field)])
                 end
                 || Field <- MsgDef],
      NFVars  = [var("NF~s", [FName]) || FName <- FNames],
      PFields = lists:zip(FNames, PFVars),
      NFields = lists:zip(FNames, NFVars),
  