variable templates updated for PCH serialization... Still working on test cases...
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@188249 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/SemaTemplateInstantiateDecl.cpp b/lib/Sema/SemaTemplateInstantiateDecl.cpp
index 315a405..5766afa 100644
--- a/lib/Sema/SemaTemplateInstantiateDecl.cpp
+++ b/lib/Sema/SemaTemplateInstantiateDecl.cpp
@@ -3481,11 +3481,22 @@
llvm::PointerUnion<VarTemplateDecl *,
VarTemplatePartialSpecializationDecl *> PatternPtr =
VarSpec->getSpecializedTemplateOrPartial();
- if (PatternPtr.is<VarTemplatePartialSpecializationDecl *>())
+ if (PatternPtr.is<VarTemplatePartialSpecializationDecl *>()) {
PatternDecl = cast<VarDecl>(
PatternPtr.get<VarTemplatePartialSpecializationDecl *>());
- else
- PatternDecl = (PatternPtr.get<VarTemplateDecl *>())->getTemplatedDecl();
+
+ // Find actual definition
+ if (VarDecl *Def = PatternDecl->getDefinition(getASTContext()))
+ PatternDecl = Def;
+ } else {
+ VarTemplateDecl *PatternTemplate = PatternPtr.get<VarTemplateDecl *>();
+
+ // Find actual definition
+ if (VarTemplateDecl *Def = PatternTemplate->getDefinition())
+ PatternTemplate = Def;
+
+ PatternDecl = PatternTemplate->getTemplatedDecl();
+ }
assert(PatternDecl && "instantiating a non-template");
}