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");
   }