diff --git a/lib/Frontend/PCHReaderDecl.cpp b/lib/Frontend/PCHReaderDecl.cpp
index ea99ff2..c05f864 100644
--- a/lib/Frontend/PCHReaderDecl.cpp
+++ b/lib/Frontend/PCHReaderDecl.cpp
@@ -768,11 +768,12 @@
     while (size--) {
       ClassTemplateSpecializationDecl *CTSD
          = cast<ClassTemplateSpecializationDecl>(Reader.GetDecl(Record[Idx++]));
+      llvm::SmallVector<TemplateArgument, 8> TemplArgs;
+      Reader.ReadTemplateArgumentList(TemplArgs, Record, Idx);
       llvm::FoldingSetNodeID ID;
       void *InsertPos = 0;
-      ClassTemplateSpecializationDecl::Profile(ID, 
-                                  CTSD->getTemplateArgs().getFlatArgumentList(),
-                                            CTSD->getTemplateArgs().flat_size(),
+      ClassTemplateSpecializationDecl::Profile(ID, TemplArgs.data(),
+                                               TemplArgs.size(),
                                                *Reader.getContext());
       D->getSpecializations().FindNodeOrInsertPos(ID, InsertPos);
       D->getSpecializations().InsertNode(CTSD, InsertPos);
@@ -783,12 +784,13 @@
       ClassTemplatePartialSpecializationDecl *CTSD
          = cast<ClassTemplatePartialSpecializationDecl>(
                                                  Reader.GetDecl(Record[Idx++]));
+      llvm::SmallVector<TemplateArgument, 8> TemplArgs;
+      Reader.ReadTemplateArgumentList(TemplArgs, Record, Idx);
       llvm::FoldingSetNodeID ID;
       void *InsertPos = 0;
-      ClassTemplatePartialSpecializationDecl::Profile(ID, 
-                                  CTSD->getTemplateArgs().getFlatArgumentList(),
-                                            CTSD->getTemplateArgs().flat_size(),
-                                               *Reader.getContext());
+      ClassTemplatePartialSpecializationDecl::Profile(ID, TemplArgs.data(),
+                                                      TemplArgs.size(),
+                                                      *Reader.getContext());
       D->getPartialSpecializations().FindNodeOrInsertPos(ID, InsertPos);
       D->getPartialSpecializations().InsertNode(CTSD, InsertPos);
     }
diff --git a/lib/Frontend/PCHWriterDecl.cpp b/lib/Frontend/PCHWriterDecl.cpp
index 86af50b..d43ba7a 100644
--- a/lib/Frontend/PCHWriterDecl.cpp
+++ b/lib/Frontend/PCHWriterDecl.cpp
@@ -751,14 +751,24 @@
     typedef llvm::FoldingSet<ClassTemplateSpecializationDecl> CTSDSetTy;
     CTSDSetTy &CTSDSet = D->getSpecializations();
     Record.push_back(CTSDSet.size());
-    for (CTSDSetTy::iterator I=CTSDSet.begin(), E = CTSDSet.end(); I!=E; ++I)
-      Writer.AddDeclRef(&*I, Record);
+    for (CTSDSetTy::iterator I=CTSDSet.begin(), E = CTSDSet.end(); I!=E; ++I) {
+      ClassTemplateSpecializationDecl *CTSD = &*I; 
+      Writer.AddDeclRef(CTSD, Record);
+      // Write the argument list here because we may get it uninitialized when
+      // reading it back. 
+      Writer.AddTemplateArgumentList(&CTSD->getTemplateArgs(), Record);
+    }
 
     typedef llvm::FoldingSet<ClassTemplatePartialSpecializationDecl> CTPSDSetTy;
     CTPSDSetTy &CTPSDSet = D->getPartialSpecializations();
     Record.push_back(CTPSDSet.size());
-    for (CTPSDSetTy::iterator I=CTPSDSet.begin(), E = CTPSDSet.end(); I!=E; ++I)
-      Writer.AddDeclRef(&*I, Record);
+    for (CTPSDSetTy::iterator I=CTPSDSet.begin(), E=CTPSDSet.end(); I!=E; ++I) {
+      ClassTemplatePartialSpecializationDecl *CTPSD = &*I; 
+      Writer.AddDeclRef(CTPSD, Record);
+      // Write the argument list here because we may get it uninitialized when
+      // reading it back. 
+      Writer.AddTemplateArgumentList(&CTPSD->getTemplateArgs(), Record);
+    }
 
     // InjectedClassNameType is computed, no need to write it.
 
