diff options
author | Joao Matos <ripzonetriton@gmail.com> | 2012-09-02 03:45:41 +0000 |
---|---|---|
committer | Joao Matos <ripzonetriton@gmail.com> | 2012-09-02 03:45:41 +0000 |
commit | 5be92de217a1940d0e109abd0f401df4480c1a4b (patch) | |
tree | c2fbd3398756cea5b88a7ddebc6ec17e31af314f /lib/Sema | |
parent | 850388527e89b802e2f658484200d8584ed5f238 (diff) |
Implemented parsing and AST support for the MS __leave exception statement. Also a minor fix to __except printing in StmtPrinter.cpp. Thanks to Aaron Ballman for review.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163083 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema')
-rw-r--r-- | lib/Sema/SemaStmt.cpp | 6 | ||||
-rw-r--r-- | lib/Sema/TreeTransform.h | 10 |
2 files changed, 16 insertions, 0 deletions
diff --git a/lib/Sema/SemaStmt.cpp b/lib/Sema/SemaStmt.cpp index 76410e20ac..e9866ffb3b 100644 --- a/lib/Sema/SemaStmt.cpp +++ b/lib/Sema/SemaStmt.cpp @@ -2746,6 +2746,12 @@ Sema::ActOnSEHTryBlock(bool IsCXXTry, } StmtResult +Sema::ActOnSEHLeaveStmt(SourceLocation LeaveLoc) +{ + return Owned(SEHLeaveStmt::Create(Context, LeaveLoc)); +} + +StmtResult Sema::ActOnSEHExceptBlock(SourceLocation Loc, Expr *FilterExpr, Stmt *Block) { diff --git a/lib/Sema/TreeTransform.h b/lib/Sema/TreeTransform.h index 19636f4143..10eb52a890 100644 --- a/lib/Sema/TreeTransform.h +++ b/lib/Sema/TreeTransform.h @@ -1361,6 +1361,10 @@ public: return getSema().ActOnSEHTryBlock(IsCXXTry,TryLoc,TryBlock,Handler); } + StmtResult RebuildSEHLeaveStmt(SourceLocation LeaveLoc) { + return getSema().ActOnSEHLeaveStmt(LeaveLoc); + } + StmtResult RebuildSEHExceptStmt(SourceLocation Loc, Expr *FilterExpr, Stmt *Block) { @@ -6001,6 +6005,12 @@ TreeTransform<Derived>::TransformSEHTryStmt(SEHTryStmt *S) { template<typename Derived> StmtResult +TreeTransform<Derived>::TransformSEHLeaveStmt(SEHLeaveStmt *S) { + return getDerived().RebuildSEHLeaveStmt(S->getLeaveLoc()); +} + +template<typename Derived> +StmtResult TreeTransform<Derived>::TransformSEHFinallyStmt(SEHFinallyStmt *S) { StmtResult Block; // = getDerived().TransformCompoundStatement(S->getBlock()); if(Block.isInvalid()) return StmtError(); |