On Mon, Jan 03, 2022 at 03:55:51PM -0500, Marek Polacek wrote:
> Bootstrapped/regtested on x86_64-pc-linux-gnu, ok for trunk?
LGTM, thanks.
> Can I backport it to GCC 11 too?
Not immediately, but say after 2 weeks sure.
>
> -- >8 --
> I'm tired of seeing
>
> cp/parser.c:15923:55: warning: misspelled term 'decl' in format; use
> 'declaration' instead [-Wformat-diag]
> cp/parser.c:15925:57: warning: misspelled term 'decl' in format; use
> 'declaration' instead [-Wformat-diag]
>
> every time I compile cp/parser.c, which happens...a lot. I'd like my
> compilation to be free of warnings, otherwise I'm going to miss some
> important ones.
>
> "decl-specifiers" is a C++ grammar term; it is not actual code, so
> should not be wrapped with %< %>. I hope we can accept it as an exception
> in check_tokens.
>
> It was surrounded by %< %> in cp_parser_decl_specifier_seq, so fix that.
>
> In passing, fix a misspelling in missspellings.
>
> PR c++/103758
>
> gcc/c-family/ChangeLog:
>
> * c-format.c (check_tokens): Accept "decl-specifier*".
>
> gcc/cp/ChangeLog:
>
> * parser.c (cp_parser_decl_specifier_seq): Replace %<decl-specifier%>
> with %qD.
>
> gcc/testsuite/ChangeLog:
>
> * g++.dg/cpp0x/constexpr-condition.C: Adjust dg-error.
> ---
> gcc/c-family/c-format.c | 8 +++++++-
> gcc/cp/parser.c | 2 +-
> gcc/testsuite/g++.dg/cpp0x/constexpr-condition.C | 2 +-
> 3 files changed, 9 insertions(+), 3 deletions(-)
>
> diff --git a/gcc/c-family/c-format.c b/gcc/c-family/c-format.c
> index 7d3b3117ee2..afa77810a5c 100644
> --- a/gcc/c-family/c-format.c
> +++ b/gcc/c-family/c-format.c
> @@ -3194,7 +3194,7 @@ check_tokens (const token_t *tokens, unsigned ntoks,
> wlen, format_chars);
> else
> {
> - /* Diagnose some common missspellings. */
> + /* Diagnose some common misspellings. */
> for (unsigned i = 0; i != sizeof badwords / sizeof *badwords; ++i)
> {
> unsigned badwlen = strspn (badwords[i].name, " -");
> @@ -3215,6 +3215,12 @@ check_tokens (const token_t *tokens, unsigned ntoks,
> plural = "s";
> }
>
> + /* As an exception, don't warn about "decl-specifier*" since
> + it's a C++ grammar production. */
> + if (badwords[i].name[0] == 'd'
> + && startswith (format_chars, "decl-specifier"))
> + continue;
> +
> format_warning_substr (format_string_loc, format_string_cst,
> fmtchrpos, fmtchrpos + badwords[i].len,
> opt,
> diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
> index 4475f792916..6b91a0ce491 100644
> --- a/gcc/cp/parser.c
> +++ b/gcc/cp/parser.c
> @@ -15821,7 +15821,7 @@ cp_parser_decl_specifier_seq (cp_parser* parser,
> if (found_decl_spec
> && (flags & CP_PARSER_FLAGS_ONLY_TYPE_OR_CONSTEXPR)
> && token->keyword != RID_CONSTEXPR)
> - error ("%<decl-specifier%> invalid in condition");
> + error ("%qD invalid in condition", ridpointers[token->keyword]);
>
> if (found_decl_spec
> && (flags & CP_PARSER_FLAGS_ONLY_MUTABLE_OR_CONSTEXPR)
> diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-condition.C
> b/gcc/testsuite/g++.dg/cpp0x/constexpr-condition.C
> index 733d494c4d7..e81acba68ae 100644
> --- a/gcc/testsuite/g++.dg/cpp0x/constexpr-condition.C
> +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-condition.C
> @@ -5,5 +5,5 @@ constexpr int something() { return 3; }
>
> int main() {
> if (constexpr long v = something()) {}
> - if (static long v = something()) { } // { dg-error "'decl-specifier'
> invalid" }
> + if (static long v = something()) { } // { dg-error "'static' invalid" }
> }
>
> base-commit: 1096ab1775636f35de9c6661f8f71f03299af998
> --
> 2.33.1
Jakub