summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2010-02-03 09:01:59 +0000
committerDouglas Gregor <dgregor@apple.com>2010-02-03 09:01:59 +0000
commit4a2f5464a7365cf6528a4ef4369bfe5670d0b115 (patch)
tree22c8a38198f762acb46f384240b4b99d538d57b6 /clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
parent3bcbdb8a2826e21b9cd6740075a670fbf055e03d (diff)
downloadbcm5719-llvm-4a2f5464a7365cf6528a4ef4369bfe5670d0b115.tar.gz
bcm5719-llvm-4a2f5464a7365cf6528a4ef4369bfe5670d0b115.zip
Look through CXXExprWithTemporaries when digging out the original
initializer. Grrr.... llvm-svn: 95211
Diffstat (limited to 'clang/lib/Sema/SemaTemplateInstantiateDecl.cpp')
-rw-r--r--clang/lib/Sema/SemaTemplateInstantiateDecl.cpp3
1 files changed, 3 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
index d526962323d..6597a853a80 100644
--- a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
+++ b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
@@ -241,6 +241,9 @@ Decl *TemplateDeclInstantiator::VisitVarDecl(VarDecl *D) {
// Extract the initializer, skipping through any temporary-binding
// expressions and look at the subexpression as it was written.
Expr *DInit = D->getInit();
+ if (CXXExprWithTemporaries *ExprTemp
+ = dyn_cast<CXXExprWithTemporaries>(DInit))
+ DInit = ExprTemp->getSubExpr();
while (CXXBindTemporaryExpr *Binder = dyn_cast<CXXBindTemporaryExpr>(DInit))
DInit = Binder->getSubExpr();
if (ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(DInit))
OpenPOWER on IntegriCloud