c-family: Have -Wformat-diag accept "decl-specifier" [PR103758]
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.
This commit is contained in:
parent
1096ab1775
commit
bb936163e2
@ -3194,7 +3194,7 @@ check_tokens (const token_t *tokens, unsigned ntoks,
|
|||||||
wlen, format_chars);
|
wlen, format_chars);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Diagnose some common missspellings. */
|
/* Diagnose some common misspellings. */
|
||||||
for (unsigned i = 0; i != sizeof badwords / sizeof *badwords; ++i)
|
for (unsigned i = 0; i != sizeof badwords / sizeof *badwords; ++i)
|
||||||
{
|
{
|
||||||
unsigned badwlen = strspn (badwords[i].name, " -");
|
unsigned badwlen = strspn (badwords[i].name, " -");
|
||||||
@ -3215,6 +3215,12 @@ check_tokens (const token_t *tokens, unsigned ntoks,
|
|||||||
plural = "s";
|
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,
|
format_warning_substr (format_string_loc, format_string_cst,
|
||||||
fmtchrpos, fmtchrpos + badwords[i].len,
|
fmtchrpos, fmtchrpos + badwords[i].len,
|
||||||
opt,
|
opt,
|
||||||
|
@ -15821,7 +15821,7 @@ cp_parser_decl_specifier_seq (cp_parser* parser,
|
|||||||
if (found_decl_spec
|
if (found_decl_spec
|
||||||
&& (flags & CP_PARSER_FLAGS_ONLY_TYPE_OR_CONSTEXPR)
|
&& (flags & CP_PARSER_FLAGS_ONLY_TYPE_OR_CONSTEXPR)
|
||||||
&& token->keyword != RID_CONSTEXPR)
|
&& token->keyword != RID_CONSTEXPR)
|
||||||
error ("%<decl-specifier%> invalid in condition");
|
error ("%qD invalid in condition", ridpointers[token->keyword]);
|
||||||
|
|
||||||
if (found_decl_spec
|
if (found_decl_spec
|
||||||
&& (flags & CP_PARSER_FLAGS_ONLY_MUTABLE_OR_CONSTEXPR)
|
&& (flags & CP_PARSER_FLAGS_ONLY_MUTABLE_OR_CONSTEXPR)
|
||||||
|
@ -5,5 +5,5 @@ constexpr int something() { return 3; }
|
|||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
if (constexpr long v = something()) {}
|
if (constexpr long v = something()) {}
|
||||||
if (static long v = something()) { } // { dg-error "'decl-specifier' invalid" }
|
if (static long v = something()) { } // { dg-error "'static' invalid" }
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user