Make linkage-specifications hold on to all of their declarations

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@61110 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/AST/DeclSerialization.cpp b/lib/AST/DeclSerialization.cpp
index c0ffb0c..c853b1b 100644
--- a/lib/AST/DeclSerialization.cpp
+++ b/lib/AST/DeclSerialization.cpp
@@ -660,13 +660,30 @@
 void LinkageSpecDecl::EmitInRec(Serializer& S) const {
   Decl::EmitInRec(S);
   S.EmitInt(getLanguage());
-  S.EmitPtr(D);
+  S.EmitBool(HadBraces);
+  if (HadBraces) {
+    S.EmitInt(NumDecls);
+    for (decl_const_iterator D = decls_begin(), DEnd = decls_end(); 
+         D != DEnd; ++D)
+      S.EmitPtr(*D);
+  } else {
+    S.EmitPtr((Decl*)Decls);
+  }
 }
 
 void LinkageSpecDecl::ReadInRec(Deserializer& D, ASTContext& C) {
   Decl::ReadInRec(D, C);
   Language = static_cast<LanguageIDs>(D.ReadInt());
-  D.ReadPtr(this->D);
+  HadBraces = D.ReadBool();
+  if (HadBraces) {
+    NumDecls = D.ReadInt();
+    Decl **NewDecls = new Decl*[NumDecls];
+    Decls = NewDecls;
+    for (unsigned I = 0; I < NumDecls; ++I)
+      D.ReadPtr(NewDecls[I]);
+  } else {
+    D.ReadPtr(this->Decls);
+  }
 }
 
 //===----------------------------------------------------------------------===//