diff options
-rw-r--r-- | clang/lib/Sema/TreeTransform.h | 9 | ||||
-rw-r--r-- | clang/test/SemaCXX/__try.cpp | 20 |
2 files changed, 26 insertions, 3 deletions
diff --git a/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h index 977d0132b7e..831c8e89d3e 100644 --- a/clang/lib/Sema/TreeTransform.h +++ b/clang/lib/Sema/TreeTransform.h @@ -6233,10 +6233,13 @@ TreeTransform<Derived>::TransformMSPropertyRefExpr(MSPropertyRefExpr *E) { template<typename Derived> StmtResult TreeTransform<Derived>::TransformSEHTryStmt(SEHTryStmt *S) { - StmtResult TryBlock; // = getDerived().TransformCompoundStmt(S->getTryBlock()); + StmtResult TryBlock = getDerived().TransformCompoundStmt(S->getTryBlock()); if(TryBlock.isInvalid()) return StmtError(); StmtResult Handler = getDerived().TransformSEHHandler(S->getHandler()); + if (Handler.isInvalid()) + return StmtError(); + if(!getDerived().AlwaysRebuild() && TryBlock.get() == S->getTryBlock() && Handler.get() == S->getHandler()) @@ -6251,7 +6254,7 @@ TreeTransform<Derived>::TransformSEHTryStmt(SEHTryStmt *S) { template<typename Derived> StmtResult TreeTransform<Derived>::TransformSEHFinallyStmt(SEHFinallyStmt *S) { - StmtResult Block; // = getDerived().TransformCompoundStatement(S->getBlock()); + StmtResult Block = getDerived().TransformCompoundStmt(S->getBlock()); if(Block.isInvalid()) return StmtError(); return getDerived().RebuildSEHFinallyStmt(S->getFinallyLoc(), @@ -6264,7 +6267,7 @@ TreeTransform<Derived>::TransformSEHExceptStmt(SEHExceptStmt *S) { ExprResult FilterExpr = getDerived().TransformExpr(S->getFilterExpr()); if(FilterExpr.isInvalid()) return StmtError(); - StmtResult Block; // = getDerived().TransformCompoundStatement(S->getBlock()); + StmtResult Block = getDerived().TransformCompoundStmt(S->getBlock()); if(Block.isInvalid()) return StmtError(); return getDerived().RebuildSEHExceptStmt(S->getExceptLoc(), diff --git a/clang/test/SemaCXX/__try.cpp b/clang/test/SemaCXX/__try.cpp index a0f503abe6c..1c45581b32f 100644 --- a/clang/test/SemaCXX/__try.cpp +++ b/clang/test/SemaCXX/__try.cpp @@ -57,3 +57,23 @@ int main() } return e; } + +namespace PR17584 { +template <typename> +void Except() { + __try { + } __except(true) { + } +} + +template <typename> +void Finally() { + __try { + } __finally { + } +} + +template void Except<void>(); +template void Finally<void>(); + +} |