diff options
| author | Douglas Gregor <dgregor@apple.com> | 2009-05-20 21:51:01 +0000 |
|---|---|---|
| committer | Douglas Gregor <dgregor@apple.com> | 2009-05-20 21:51:01 +0000 |
| commit | 06555f134a7471c93124c71c8f2cf0892cc942cf (patch) | |
| tree | 2dab64cabaf2677b01b8b15a373257b4413e028a /clang/lib/Sema/SemaTemplateInstantiateExpr.cpp | |
| parent | 9a3964a663695e9008b38f3a4fed25f21546c15e (diff) | |
| download | bcm5719-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.cpp | 14 |
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, |

