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