aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2020-07-11 15:42:57 +0200
committerLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2020-07-14 01:27:55 +0200
commit584bf4cd77d422d7f057c9ed167f824955a3c311 (patch)
tree3ad7b787666b116fc516baf55ab9bc67aaf5343c
parent0394c281af257abb24774bd6f081b7abb9f821e3 (diff)
downloadsparse-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.c6
-rw-r--r--validation/bad-assignment.c1
-rw-r--r--validation/empty-assign.c1
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 ';'