summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaTemplateInstantiateExpr.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2009-05-20 21:51:01 +0000
committerDouglas Gregor <dgregor@apple.com>2009-05-20 21:51:01 +0000
commit06555f134a7471c93124c71c8f2cf0892cc942cf (patch)
tree2dab64cabaf2677b01b8b15a373257b4413e028a /clang/lib/Sema/SemaTemplateInstantiateExpr.cpp
parent9a3964a663695e9008b38f3a4fed25f21546c15e (diff)
downloadbcm5719-llvm-06555f134a7471c93124c71c8f2cf0892cc942cf.tar.gz
bcm5719-llvm-06555f134a7471c93124c71c8f2cf0892cc942cf.zip
Template instantiation for CXXExprWithTemporaries, which occurs when
temporaries are generated for some object-constructing expressions in templates that are not type-dependent. Also, be sure to introduce the variable from a CXXConditionDeclExpr into the set of instantiated local variables. llvm-svn: 72185
Diffstat (limited to 'clang/lib/Sema/SemaTemplateInstantiateExpr.cpp')
-rw-r--r--clang/lib/Sema/SemaTemplateInstantiateExpr.cpp14
1 files changed, 13 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaTemplateInstantiateExpr.cpp b/clang/lib/Sema/SemaTemplateInstantiateExpr.cpp
index 1b2fa469575..099ce278f1f 100644
--- a/clang/lib/Sema/SemaTemplateInstantiateExpr.cpp
+++ b/clang/lib/Sema/SemaTemplateInstantiateExpr.cpp
@@ -92,7 +92,7 @@ namespace {
// FIXME: CXXDeleteExpr
// FIXME: UnaryTypeTraitExpr
// FIXME: QualifiedDeclRefExpr
- // FIXME: CXXExprWithTemporaries
+ OwningExprResult VisitCXXExprWithTemporaries(CXXExprWithTemporaries *E);
OwningExprResult VisitCXXUnresolvedConstructExpr(
CXXUnresolvedConstructExpr *E);
OwningExprResult VisitGNUNullExpr(GNUNullExpr *E);
@@ -450,6 +450,7 @@ TemplateExprInstantiator::VisitCXXConditionDeclExpr(CXXConditionDeclExpr *E) {
if (!Var)
return SemaRef.ExprError();
+ SemaRef.CurrentInstantiationScope->InstantiatedLocal(E->getVarDecl(), Var);
return SemaRef.Owned(new (SemaRef.Context) CXXConditionDeclExpr(
E->getStartLoc(),
SourceLocation(),
@@ -877,6 +878,7 @@ TemplateExprInstantiator::VisitCXXConstructExpr(CXXConstructExpr *E) {
return SemaRef.ExprError();
}
+ SemaRef.CurrentInstantiationScope->InstantiatedLocal(E->getVarDecl(), Var);
return SemaRef.Owned(CXXConstructExpr::Create(SemaRef.Context, Var, T,
E->getConstructor(),
E->isElidable(),
@@ -917,6 +919,16 @@ TemplateExprInstantiator::VisitCXXZeroInitValueExpr(CXXZeroInitValueExpr *E) {
}
Sema::OwningExprResult
+TemplateExprInstantiator::VisitCXXExprWithTemporaries(
+ CXXExprWithTemporaries *E) {
+ OwningExprResult SubExpr = Visit(E->getSubExpr());
+ if (SubExpr.isInvalid())
+ return SemaRef.ExprError();
+
+ return SemaRef.ActOnFinishFullExpr(move(SubExpr));
+}
+
+Sema::OwningExprResult
TemplateExprInstantiator::VisitCXXUnresolvedConstructExpr(
CXXUnresolvedConstructExpr *E) {
QualType T = SemaRef.InstantiateType(E->getTypeAsWritten(), TemplateArgs,
OpenPOWER on IntegriCloud