On Thu, 2017-03-09 at 21:12 -0700, Martin Sebor wrote: > On 03/09/2017 10:45 AM, David Malcolm wrote: > > gcc/ChangeLog: > > PR driver/79875 > > * opts.c (parse_sanitizer_options): Add missing question mark > > to > > "did you mean" message. > > --- > > gcc/opts.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/gcc/opts.c b/gcc/opts.c > > index 8274fab..6ea57af 100644 > > --- a/gcc/opts.c > > +++ b/gcc/opts.c > > @@ -1640,7 +1640,7 @@ parse_sanitizer_options (const char *p, > > location_t loc, int scode, > > if (hint) > > error_at (loc, > > "unrecognized argument to -f%ssanitize%s= > > option: %q.*s;" > > - " did you mean %qs", > > + " did you mean %qs?", > > I have just an observation/question here for future consideration. > If this sort of diagnostic is common (I count 23 instances of it) > or if it is expected to become common, would it make sense to add > a directive for it to the pretty printer to ensure consistency? > I.e., to automatically prepend "; did you mean" and append the > "?" to the new directive?
Interesting idea. The "did you mean" messages tend to be of the form: if (hint) error ("SOME MESSAGE; did you mean SOME_FORMAT_ARG?", ARGS, TO, MESSAGE, HINT_THAT_MATCHES_FORMAT_ARG); else error ("SOME MESSAGE", ARGS, TO, MESSAGE); which is kind of a pain due to the duplication. It might be nicer to eliminate the repetition by making the hint optional, replacing the conditional with a new directive (e.g. %H): error ("SOME MESSAGE%H", ARGS, TO, MESSAGE, HINT); where %H (or whatever) prepends the "; did you mean <FORMATTED_HINT>?" if HINT is non-NULL, and doesn't if HINT is NULL. Is this amenable to translation? (I'm not sure if %H is already in use). That said, I don't know how many more of these hints we'll add; I think we've implemented all of the obvious ones now, so this might be over -engineering at this point. Some warts here, in addition to the ones you note below: * it's usually %qs for the hint (11 places), but it's sometimes %qE (3 places), and in one place (gcc.c) it's "%<-%s%>". > My search shows the following forms: > > 1) Space before "?" > gcc/c-family/c-common.c: "%<<<%> in boolean context, did you mean > %<<%> ?"); That extra space feels like an error: the punctuation is quoted, so it's not ambiguous. > 2) No question mark at the end: > gcc/git/gcc/opts.c: "unrecognized argument to -f%ssanitize%s= option: > %q.*s;" > " did you mean %qs", > value ? "" : "no-", Fixed by the patch. > 3) Missing space after semicolon: > > gcc/c/c-decl.c: G_("implicit declaration of function %qE;did you mean > %qs?"), I'd view that as a bug. > 4) Explicit quotes: > gcc/gensupport.c: message_at (loc, "(did you mean \"%s\"?)", > > (though this won't be fixed by the suggested directive). Indeed, this one ultimately uses vfprintf. > Martin