Print this page
new smatch

@@ -60,11 +60,14 @@
 
 static struct token *comma_expression(struct token *, struct expression **);
 
 struct token *parens_expression(struct token *token, struct expression **expr, const char *where)
 {
+        struct token *p;
+
         token = expect(token, '(', where);
+        p = token;
         if (match_op(token, '{')) {
                 struct expression *e = alloc_expression(token->pos, EXPR_STATEMENT);
                 struct statement *stmt = alloc_statement(token->pos, STMT_COMPOUND);
                 *expr = e;
                 e->statement = stmt;

@@ -72,10 +75,13 @@
                 token = compound_statement(token->next, stmt);
                 end_symbol_scope();
                 token = expect(token, '}', "at end of statement expression");
         } else
                 token = parse_expression(token, expr);
+
+        if (token == p)
+                sparse_error(token->pos, "an expression is expected before ')'");
         return expect(token, ')', where);
 }
 
 /*
  * Handle __func__, __FUNCTION__ and __PRETTY_FUNCTION__ token