Parsing error triggered by expect() insert bad_token as the current token. This allows to skip other errors with expect(). So far so good but this token is a fake token which has no position set, if another parsing error is detected by something else than expect(), the error message will use the position of this bad token which will be displayed like: builtin:0:0: ... which is confusing. Since the concerned error message are secondary ones, the primary one have been already be repported by expect(), the best is to simply skip all these secondary error messages. Do this by creating a new token type (TOKEN_BAD) and use it for bad_token, then filter error messages based on this token type. Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@xxxxxxxxx> --- lib.c | 9 ++++++++- token.h | 1 + 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/lib.c b/lib.c index a05d04744..c451a88ce 100644 --- a/lib.c +++ b/lib.c @@ -70,7 +70,7 @@ struct token *skip_to(struct token *token, int op) return token; } -static struct token bad_token; +static struct token bad_token = { .pos.type = TOKEN_BAD }; struct token *expect(struct token *token, int op, const char *where) { if (!match_op(token, op)) { @@ -123,6 +123,10 @@ static void do_warn(const char *type, struct position pos, const char * fmt, va_ static char buffer[512]; const char *name; + /* Shut up warnings if position is bad_token.pos */ + if (pos.type == TOKEN_BAD) + return; + vsprintf(buffer, fmt, args); name = stream_name(pos.stream); @@ -150,6 +154,9 @@ static void do_error(struct position pos, const char * fmt, va_list args) static int errors = 0; die_if_error = 1; show_info = 1; + /* Shut up warnings if position is bad_token.pos */ + if (pos.type == TOKEN_BAD) + return; /* Shut up warnings after an error */ has_error |= ERROR_CURR_PHASE; if (errors > 100) { diff --git a/token.h b/token.h index 847fdf4d0..292db167e 100644 --- a/token.h +++ b/token.h @@ -79,6 +79,7 @@ struct ident { enum token_type { TOKEN_EOF, + TOKEN_BAD, TOKEN_ERROR, TOKEN_IDENT, TOKEN_ZERO_IDENT, -- 2.17.0 -- To unsubscribe from this list: send the line "unsubscribe linux-sparse" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html