diff options
| author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2010-03-31 00:37:59 +0000 |
|---|---|---|
| committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2010-03-31 00:37:59 +0000 |
| commit | 90ab3b7779b16e95181ab55aa887290abef7a7c3 (patch) | |
| tree | c2cd76d247d96a473842805bd30ecbd5d41c5092 /clang/lib | |
| parent | d7f18dd750d312d51458f9e1677232bab5340817 (diff) | |
| download | bcm5719-llvm-90ab3b7779b16e95181ab55aa887290abef7a7c3.tar.gz bcm5719-llvm-90ab3b7779b16e95181ab55aa887290abef7a7c3.zip | |
Don't skip past the '}' if an expression has error and is not followed by ';'.
llvm-svn: 99972
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/Parse/ParseStmt.cpp | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/clang/lib/Parse/ParseStmt.cpp b/clang/lib/Parse/ParseStmt.cpp index 9fd145dc267..b752b48cfd4 100644 --- a/clang/lib/Parse/ParseStmt.cpp +++ b/clang/lib/Parse/ParseStmt.cpp @@ -125,10 +125,12 @@ Parser::ParseStatementOrDeclaration(bool OnlyStatement) { // expression[opt] ';' OwningExprResult Expr(ParseExpression()); if (Expr.isInvalid()) { - // If the expression is invalid, skip ahead to the next semicolon. Not - // doing this opens us up to the possibility of infinite loops if + // If the expression is invalid, skip ahead to the next semicolon or '}'. + // Not doing this opens us up to the possibility of infinite loops if // ParseExpression does not consume any tokens. - SkipUntil(tok::semi); + SkipUntil(tok::r_brace, /*StopAtSemi=*/true, /*DontConsume=*/true); + if (Tok.is(tok::semi)) + ConsumeToken(); return StmtError(); } // Otherwise, eat the semicolon. |

