diff options
author | Luc Van Oostenryck <luc.vanoostenryck@gmail.com> | 2020-07-11 15:42:57 +0200 |
---|---|---|
committer | Luc Van Oostenryck <luc.vanoostenryck@gmail.com> | 2020-07-14 01:27:55 +0200 |
commit | 584bf4cd77d422d7f057c9ed167f824955a3c311 (patch) | |
tree | 3ad7b787666b116fc516baf55ab9bc67aaf5343c | |
parent | 0394c281af257abb24774bd6f081b7abb9f821e3 (diff) | |
download | sparse-584bf4cd77d422d7f057c9ed167f824955a3c311.tar.gz |
warn on empty assignments
Currently sparse accepts an empty assignment like:
a = ;
Make this an error.
Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
-rw-r--r-- | expression.c | 6 | ||||
-rw-r--r-- | validation/bad-assignment.c | 1 | ||||
-rw-r--r-- | validation/empty-assign.c | 1 |
3 files changed, 6 insertions, 2 deletions
diff --git a/expression.c b/expression.c index 1160cd9c..ecbdd18e 100644 --- a/expression.c +++ b/expression.c @@ -937,10 +937,14 @@ struct token *assignment_expression(struct token *token, struct expression **tre for (i = 0; i < ARRAY_SIZE(assignments); i++) if (assignments[i] == op) { struct expression * expr = alloc_expression(token->pos, EXPR_ASSIGNMENT); + struct token *next = token->next; expr->left = *tree; expr->op = op; *tree = expr; - return assignment_expression(token->next, &expr->right); + token = assignment_expression(next, &expr->right); + if (token == next) + expression_error(expr, "expression expected before '%s'", show_token(token)); + return token; } } return token; diff --git a/validation/bad-assignment.c b/validation/bad-assignment.c index 71938db7..959712be 100644 --- a/validation/bad-assignment.c +++ b/validation/bad-assignment.c @@ -8,6 +8,7 @@ static int foo(int a) * check-name: bad assignment * * check-error-start +bad-assignment.c:3:11: error: expression expected before '\' bad-assignment.c:3:13: error: Expected ; at end of statement bad-assignment.c:3:13: error: got \ * check-error-end diff --git a/validation/empty-assign.c b/validation/empty-assign.c index 48ac626d..d1c3884f 100644 --- a/validation/empty-assign.c +++ b/validation/empty-assign.c @@ -6,7 +6,6 @@ static int foo(int a) /* * check-name: empty-assign - * check-known-to-fail * * check-error-start empty-assign.c:3:11: error: expression expected before ';' |