@@ -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;
@@ -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
@@ -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 ';'
Currently sparse accepts an empty assignment like: a = ; Make this an error. Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com> --- expression.c | 6 +++++- validation/bad-assignment.c | 1 + validation/empty-assign.c | 1 - 3 files changed, 6 insertions(+), 2 deletions(-)