[PATCH v2] Offer suggestions for unrecognized sanitizer options (PR driver/78877)

Jakub Jelinek jakub@redhat.com
Wed Jan 11 08:30:00 GMT 2017


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



More information about the Gcc-patches mailing list