summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaTemplateInstantiateExpr.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2009-05-19 20:31:21 +0000
committerDouglas Gregor <dgregor@apple.com>2009-05-19 20:31:21 +0000
commit8d7fef3cf23ace576679e9cb51636d6f2c36c3ad (patch)
tree6c87a10264d19b8b53eeef61aa81b9ce9cdd0e4d /clang/lib/Sema/SemaTemplateInstantiateExpr.cpp
parent115652db4af81d77d3de1ade54f4de0faf6bc0fb (diff)
downloadbcm5719-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.cpp12
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();
OpenPOWER on IntegriCloud