From: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
To: linux-sparse@vger.kernel.org
Cc: Ben Dooks <ben.dooks@codethink.co.uk>,
Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
Subject: [PATCH 4/8] parse format attribute less verbosely
Date: Mon, 5 Oct 2020 03:59:58 +0200 [thread overview]
Message-ID: <20201005020002.1108-5-luc.vanoostenryck@gmail.com> (raw)
In-Reply-To: <20201005020002.1108-1-luc.vanoostenryck@gmail.com>
The error handling in the parsing of the format attribute is a bit too
verbose and to strict:
*) the message "only printf format attribute supported" is just noise
for any file using 'format(scanf, ...)' when -Wformat is set
and is not needed if -Wformat is disabled, so remove it.
*) the message "incorrect format attribute" is not needed because
any parsing error will already be reported.
OTOH, it is useful to check that the first argument is an identifier,
so check this.
Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
---
parse.c | 24 ++++++++++++------------
1 file changed, 12 insertions(+), 12 deletions(-)
diff --git a/parse.c b/parse.c
index c2d29318149f..55cca01ec381 100644
--- a/parse.c
+++ b/parse.c
@@ -1215,17 +1215,18 @@ static int invalid_format_args(long long start, long long at)
static struct token *attribute_format(struct token *token, struct symbol *attr, struct decl_state *ctx)
{
struct expression *args[3];
- struct symbol *fmt_sym = NULL;
+ int type = FMT_UNKNOWN;
/* expecting format ( type, start, va_args at) */
token = expect(token, '(', "after format attribute");
- if (token_type(token) == TOKEN_IDENT)
- fmt_sym = lookup_keyword(token->ident, NS_KEYWORD);
- if (fmt_sym)
- if (!fmt_sym->op || fmt_sym->op->type != KW_FORMAT)
- fmt_sym = NULL;
-
+ if (token_type(token) != TOKEN_IDENT) {
+ sparse_error(token->pos, "identifier expected for format type");
+ } else {
+ struct symbol *sym = lookup_keyword(token->ident, NS_KEYWORD);
+ if (sym && sym->op && sym->op->type == KW_FORMAT)
+ type = sym->op->class;
+ }
token = conditional_expression(token, &args[0]);
token = expect(token, ',', "format attribute type");
token = conditional_expression(token, &args[1]);
@@ -1233,11 +1234,10 @@ static struct token *attribute_format(struct token *token, struct symbol *attr,
token = conditional_expression(token, &args[2]);
token = expect(token, ')', "format attribute arg position");
- if (!fmt_sym || !args[0] || !args[1] || !args[2]) {
- warning(token->pos, "incorrect format attribute");
- } else if (fmt_sym->op->class != FMT_PRINTF) {
- /* skip anything that isn't printf for the moment */
- warning(token->pos, "only printf format attribute supported");
+ if (!args[0] || !args[1] || !args[2]) {
+ // incorrect format attribute
+ } else if (type != FMT_PRINTF) {
+ // only printf-style is supported, skip anything else
} else {
long long start, at;
--
2.28.0
next prev parent reply other threads:[~2020-10-05 2:00 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-10-05 1:59 [PATCH 0/8] format check tweaks Luc Van Oostenryck
2020-10-05 1:59 ` [PATCH 1/8] need to strip SYM_NODE before comparing types Luc Van Oostenryck
2020-10-05 1:59 ` [PATCH 2/8] add helper get_nth_expression() Luc Van Oostenryck
2020-10-05 1:59 ` [PATCH 3/8] move the definition of FMT_{PRINTF,SCANF} Luc Van Oostenryck
2020-10-05 1:59 ` Luc Van Oostenryck [this message]
2020-10-05 1:59 ` [PATCH 5/8] call verify_format_attribute() unconditionally Luc Van Oostenryck
2020-10-05 2:00 ` [PATCH 6/8] s/data/type/ for struct format_type Luc Van Oostenryck
2020-10-05 2:00 ` [PATCH 7/8] add support for "%ls" Luc Van Oostenryck
2020-10-05 2:00 ` [PATCH 8/8] add support for "%Lx" (and "%Ls") Luc Van Oostenryck
2020-10-05 9:04 ` [PATCH 0/8] format check tweaks Ben Dooks
2020-10-05 23:47 ` Luc Van Oostenryck
2020-10-11 19:51 ` Ben Dooks
2020-10-12 22:38 ` Luc Van Oostenryck
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20201005020002.1108-5-luc.vanoostenryck@gmail.com \
--to=luc.vanoostenryck@gmail.com \
--cc=ben.dooks@codethink.co.uk \
--cc=linux-sparse@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox