This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH 1/7] Add missing punctuation to message (PR driver/79875)
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