diff options
| author | Nico Weber <nicolasweber@gmx.de> | 2014-07-06 22:53:19 +0000 |
|---|---|---|
| committer | Nico Weber <nicolasweber@gmx.de> | 2014-07-06 22:53:19 +0000 |
| commit | eb61d4d7c2fdc089c5625aa1128c844edd51285f (patch) | |
| tree | 6dd096b3b22dd563046e02f1301e524b8545d3a1 /clang/lib/Parse/ParseStmt.cpp | |
| parent | c7d0596429b6051c212a5ae1864c8635ab8ae906 (diff) | |
| download | bcm5719-llvm-eb61d4d7c2fdc089c5625aa1128c844edd51285f.tar.gz bcm5719-llvm-eb61d4d7c2fdc089c5625aa1128c844edd51285f.zip | |
Sema: Check that __leave is contained in a __try block.
Give scope a SEHTryScope bit, set that in ParseSEHTry(), and let Sema
walk the scope chain to find the SEHTry parent on __leave statements.
(They are rare enough that it seems better to do the walk instead of
giving Scope a SEHTryParent pointer -- this is similar to AtCatchScope.)
llvm-svn: 212422
Diffstat (limited to 'clang/lib/Parse/ParseStmt.cpp')
| -rw-r--r-- | clang/lib/Parse/ParseStmt.cpp | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/clang/lib/Parse/ParseStmt.cpp b/clang/lib/Parse/ParseStmt.cpp index e81945437bf..d29da837c09 100644 --- a/clang/lib/Parse/ParseStmt.cpp +++ b/clang/lib/Parse/ParseStmt.cpp @@ -427,7 +427,8 @@ StmtResult Parser::ParseSEHTryBlockCommon(SourceLocation TryLoc) { if(Tok.isNot(tok::l_brace)) return StmtError(Diag(Tok, diag::err_expected) << tok::l_brace); - StmtResult TryBlock(ParseCompoundStatement()); + StmtResult TryBlock(ParseCompoundStatement(/*isStmtExpr=*/false, + Scope::DeclScope | Scope::SEHTryScope)); if(TryBlock.isInvalid()) return TryBlock; |

