In the loop doing the parsing of attributes, it's first checked if EOF is reached, then if the token is ';' but these tests are not needed since they're subsumed by the third one: checking if the token is an identifier. So, remove the tests for EOF and ';', and change the for-loop into a while-loop checking for TOKEN_IDENT. As a bonus, remove the local variable holding the identifier since it's there only for historical reasons. Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@xxxxxxxxx> --- parse.c | 22 +++------------------- 1 file changed, 3 insertions(+), 19 deletions(-) diff --git a/parse.c b/parse.c index cc5dbd522b3e..b07237eee0bf 100644 --- a/parse.c +++ b/parse.c @@ -1362,18 +1362,8 @@ static struct token *attribute_specifier(struct token *token, struct decl_state token = expect(token, '(', "after attribute"); token = expect(token, '(', "after attribute"); - for (;;) { - struct ident *attribute_name; - struct symbol *attr; - - if (eof_token(token)) - break; - if (match_op(token, ';')) - break; - if (token_type(token) != TOKEN_IDENT) - break; - attribute_name = token->ident; - attr = lookup_keyword(attribute_name, NS_KEYWORD); + while (token_type(token) == TOKEN_IDENT) { + struct symbol *attr = lookup_keyword(token->ident, NS_KEYWORD); if (attr && attr->op->attribute) token = attr->op->attribute(token->next, attr, ctx); else @@ -1784,13 +1774,7 @@ static struct token *skip_attributes(struct token *token) break; token = expect(token->next, '(', "after attribute"); token = expect(token, '(', "after attribute"); - for (;;) { - if (eof_token(token)) - break; - if (match_op(token, ';')) - break; - if (token_type(token) != TOKEN_IDENT) - break; + while (token_type(token) == TOKEN_IDENT) { token = skip_attribute(token); if (!match_op(token, ',')) break; -- 2.27.0