anchor.diff:          {return, return} -> ""
       end.
   
  -get_warning_opt(Opts) ->
  +get_warning_opt_from_perspective_of_return(Opts) -> get_warn_opt(Opts, return).
  +get_warning_opt_from_perspective_of_output(Opts) -> get_warn_opt(Opts, report).
  +
  +get_error_opt_from_perspective_of_return(Opts) -> get_err_opt(Opts, return).
  +get_error_opt_from_perspective_of_output(Opts) -> get_err_opt(Opts, report).
  +
  +get_warn_opt(Opts, WhatToReturnIfBothAreSet) ->
       case {member(return_warnings, Opts), member(report_warnings, Opts)} of
           {false, false} -> report; %% default
           {true,  false} -> return;
  -        {false,  true} -> report
  -    end.
  -
  -get_error_opt(Opts) ->
  +        {false,  true} -> report;
  +        {true,   true} -> WhatToReturnIfBothAreSet
  +    end.
  +
  +get_err_opt(Opts, WhatToReturnIfBothAreSet) ->
       case {member(return_errors, Opts), member(report_errors, Opts)} of
           {false, false} -> report; %% default
           {true,  false} -> return;
  -        {false,  true} -> report
  +        {false,  true} -> report;
  +        {true,   true} -> WhatToReturnIfBothAreSet
       end.
   
   member(Elem, List) ->
  
positive.code:                        [return_errors],
                         [report_warnings, return_errors],
                         [return_warnings, report_errors],
                         []
                        ],
          CompileTo  <- [to_binary, to_file, to_proto_defs],
  
negative.code: compute_expected_output(Options, write_fails) ->
      compute_expected_output(Options, erroneous_code);
  compute_expected_output(Options, erroneous_code) ->
      WarnOpt = get_warning_opt_from_perspective_of_output(Options),
      ErrOpt = get_error_opt_from_perspective_of_output(Options),
      case {WarnOpt, ErrOpt} of
          {report, report} -> non_empty_list;
          {report, return} -> "";
  