On Tue, Jan 10, 2017 at 08:47:26PM -0500, David Malcolm wrote:
> +      /* For -fsanitize-recover= (and not -fno-sanitize-recover=),
> +      don't offer the non-recoverable options.  */
> +      if (!sanitizer_opts[i].can_recover && code == OPT_fsanitize_recover_
> +       && value)

If a condition doesn't fit on a single line, usually we want to put every
subcondition on separate line, so:
      if (!sanitizer_opts[i].can_recover
          && code == OPT_fsanitize_recover_
          && value)

> +     continue;
> +
> +      bm.consider (sanitizer_opts[i].name);
> +    }
> +  return bm.get_best_meaningful_candidate ();
> +}
> +
>  /* Parse comma separated sanitizer suboptions from P for option SCODE,
>     adjust previous FLAGS and return new ones.  If COMPLAIN is false,
>     don't issue diagnostics.  */
> @@ -1572,8 +1629,21 @@ parse_sanitizer_options (const char *p, location_t 
> loc, int scode,
>         }
>  
>        if (! found && complain)
> -     error_at (loc, "unrecognized argument to -fsanitize%s= option: %q.*s",
> -               code == OPT_fsanitize_ ? "" : "-recover", (int) len, p);
> +     {
> +       const char *optname
> +         = code == OPT_fsanitize_ ? "-fsanitize" : "-fsanitize-recover";

Because value matters too, I think it would be nice to also differentiate
between -fsanitize and -fno-sanitize in the diagnostics (I know the old
code didn't do that either).
So use -f%ssanitize%s= and corresponding
value ? "" : "no-", code == OPT_fsanitize_ ? "" : "-recover"
This is normally against translation rules, but I think translators should
not translate the option name and thus -f%ssanitize%s= should be kept as is
somewhere in the translation string.

> +       const char *hint
> +         = get_closest_sanitizer_option (string_fragment (p, len),
> +                                         code, value);
> +
> +       if (hint)
> +         error_at (loc, "unrecognized argument to %s= option: %q.*s;"
> +                   " did you mean %qs",
> +                   optname, (int) len, p, hint);
> +       else
> +         error_at (loc, "unrecognized argument to %s= option: %q.*s",
> +                   optname, (int) len, p);
> +     }

Ok for trunk with those changes.

        Jakub

Reply via email to