From f618a9a2963ac519808385dbd35aeac34e537f67 Mon Sep 17 00:00:00 2001
From: Roberto Raggi <roberto.raggi@nokia.com>
Date: Mon, 7 Dec 2009 15:00:37 +0100
Subject: [PATCH] Check for unnecessary semicolons after blocks.

---
 src/shared/cplusplus/CheckStatement.cpp | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/src/shared/cplusplus/CheckStatement.cpp b/src/shared/cplusplus/CheckStatement.cpp
index ec9f6590e29..b02ba83749f 100644
--- a/src/shared/cplusplus/CheckStatement.cpp
+++ b/src/shared/cplusplus/CheckStatement.cpp
@@ -107,8 +107,19 @@ bool CheckStatement::visit(CompoundStatementAST *ast)
     ast->symbol = block;
     _scope->enterSymbol(block);
     Scope *previousScope = switchScope(block->members());
+    StatementAST *previousStatement = 0;
     for (StatementListAST *it = ast->statement_list; it; it = it->next) {
-        semantic()->check(it->value, _scope);
+        StatementAST *statement = it->value;
+        semantic()->check(statement, _scope);
+
+        if (statement && previousStatement) {
+            ExpressionStatementAST *expressionStatement = statement->asExpressionStatement();
+            CompoundStatementAST *compoundStatement = previousStatement->asCompoundStatement();
+            if (expressionStatement && ! expressionStatement->expression && compoundStatement && compoundStatement->rbrace_token)
+                translationUnit()->warning(compoundStatement->rbrace_token, "unnecessary semicolon after block");
+        }
+
+        previousStatement = statement;
     }
     (void) switchScope(previousScope);
     return false;
-- 
GitLab