diff options
| author | Douglas Gregor <dgregor@apple.com> | 2009-05-19 20:31:21 +0000 |
|---|---|---|
| committer | Douglas Gregor <dgregor@apple.com> | 2009-05-19 20:31:21 +0000 |
| commit | 8d7fef3cf23ace576679e9cb51636d6f2c36c3ad (patch) | |
| tree | 6c87a10264d19b8b53eeef61aa81b9ce9cdd0e4d /clang/lib/Sema/SemaTemplateInstantiateExpr.cpp | |
| parent | 115652db4af81d77d3de1ade54f4de0faf6bc0fb (diff) | |
| download | bcm5719-llvm-8d7fef3cf23ace576679e9cb51636d6f2c36c3ad.tar.gz bcm5719-llvm-8d7fef3cf23ace576679e9cb51636d6f2c36c3ad.zip | |
Template instantiation for GNU statement expressions
llvm-svn: 72129
Diffstat (limited to 'clang/lib/Sema/SemaTemplateInstantiateExpr.cpp')
| -rw-r--r-- | clang/lib/Sema/SemaTemplateInstantiateExpr.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaTemplateInstantiateExpr.cpp b/clang/lib/Sema/SemaTemplateInstantiateExpr.cpp index 2589e301e0d..7cf403c282a 100644 --- a/clang/lib/Sema/SemaTemplateInstantiateExpr.cpp +++ b/clang/lib/Sema/SemaTemplateInstantiateExpr.cpp @@ -54,6 +54,8 @@ namespace { OwningExprResult VisitCXXOperatorCallExpr(CXXOperatorCallExpr *E); OwningExprResult VisitCXXConditionDeclExpr(CXXConditionDeclExpr *E); OwningExprResult VisitConditionalOperator(ConditionalOperator *E); + // FIXME: AddrLabelExpr + OwningExprResult VisitStmtExpr(StmtExpr *E); OwningExprResult VisitSizeOfAlignOfExpr(SizeOfAlignOfExpr *E); OwningExprResult VisitUnresolvedDeclRefExpr(UnresolvedDeclRefExpr *E); OwningExprResult VisitCXXTemporaryObjectExpr(CXXTemporaryObjectExpr *E); @@ -453,6 +455,16 @@ TemplateExprInstantiator::VisitConditionalOperator(ConditionalOperator *E) { move(Cond), move(LHS), move(RHS)); } +Sema::OwningExprResult TemplateExprInstantiator::VisitStmtExpr(StmtExpr *E) { + Sema::OwningStmtResult SubStmt = SemaRef.InstantiateStmt(E->getSubStmt(), + TemplateArgs); + if (SubStmt.isInvalid()) + return SemaRef.ExprError(); + + return SemaRef.ActOnStmtExpr(E->getLParenLoc(), move(SubStmt), + E->getRParenLoc()); +} + Sema::OwningExprResult TemplateExprInstantiator::VisitSizeOfAlignOfExpr(SizeOfAlignOfExpr *E) { bool isSizeOf = E->isSizeOf(); |

