Refactor ActOnDeclarationNameExpr into a "parsing action" part and a
"semantic analysis" part. Use the "semantic analysis" part when
performing template instantiation on a DeclRefExpr, rather than an ad
hoc list of rules to construct DeclRefExprs from the instantiation.
A test case for this change will come in with a large commit, which
illustrates what I was actually trying to work on.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@74528 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/SemaTemplateInstantiateExpr.cpp b/lib/Sema/SemaTemplateInstantiateExpr.cpp
index e1702b5..719a9ed 100644
--- a/lib/Sema/SemaTemplateInstantiateExpr.cpp
+++ b/lib/Sema/SemaTemplateInstantiateExpr.cpp
@@ -156,18 +156,15 @@
false, false));
}
- ValueDecl *NewD
- = dyn_cast_or_null<ValueDecl>(SemaRef.InstantiateCurrentDeclRef(D));
- if (!NewD)
+ NamedDecl *InstD = SemaRef.InstantiateCurrentDeclRef(D);
+ if (!InstD)
return SemaRef.ExprError();
- // FIXME: Build QualifiedDeclRefExpr?
- QualType T = NewD->getType();
- return SemaRef.Owned(new (SemaRef.Context) DeclRefExpr(NewD,
- T.getNonReferenceType(),
- E->getLocation(),
- T->isDependentType(),
- T->isDependentType()));
+ // FIXME: nested-name-specifier for QualifiedDeclRefExpr
+ return SemaRef.BuildDeclarationNameExpr(E->getLocation(), InstD,
+ /*FIXME:*/false,
+ /*FIXME:*/0,
+ /*FIXME:*/false);
}
Sema::OwningExprResult