This is the mail archive of the
mailing list for the GCC project.
Re: [C++ PATCH] [PR2204] Check for parameters of abstract types(partial fix)
Gabriel Dos Reis <email@example.com> writes:
> "Zack Weinberg" <firstname.lastname@example.org> writes:
> | Gabriel Dos Reis <email@example.com> writes:
> | > "Giovanni Bajo" <firstname.lastname@example.org> writes:
> | >
> | > | if (TREE_CODE (decl) == VAR_DECL)
> | > | ! error ("%Jcannot declare variable `%D' to be of abstract type `%T'",
> | > | ! decl, decl, type);
> | >
> | > That is an abuse of %J. Use error_at instead.
> | [etc]
> | I told Giovanni that error/warning/pedwarn_at were to be eliminated in
> | favor of %J. Did I misunderstand what you've said about these in the
> | past?
> I don't know exactly what you're referring to. But, the repetition of
> the "decl" is not right and if any removal should lead to that, then
> that removal should not happen.
I don't understand this. The %J consumes one argument and the %D
consumes another one. Why is this "wrong"?
> error ("%Jdeclaration '%D' is nonsensical", decl, decl); // WRONG
> error_at ("declaration '%+D' is nonsensical", decl); // Good
The %+D notation is tidier, but I had understood you to be of the
opinion that it was not worth the implementation mess, nor the baggage
of carrying around two different sets of diagnostic functions.
(If we ever get Chiaki's indexed-parameters-notation patch laid down,
it will also allow implementing %+x cleanly and for all languages.)