diff --git a/lib/Frontend/PCHReader.cpp b/lib/Frontend/PCHReader.cpp
index 1b26b72..d044fee 100644
--- a/lib/Frontend/PCHReader.cpp
+++ b/lib/Frontend/PCHReader.cpp
@@ -1038,6 +1038,22 @@
                                    (const unsigned char *)BlobStart,
                                    NumStatHits, NumStatMisses));
       break;
+
+    case pch::EXT_VECTOR_DECLS:
+      if (!ExtVectorDecls.empty()) {
+        Error("Duplicate EXT_VECTOR_DECLS record in PCH file");
+        return Failure;
+      }
+      ExtVectorDecls.swap(Record);
+      break;
+
+    case pch::OBJC_CATEGORY_IMPLEMENTATIONS:
+      if (!ObjCCategoryImpls.empty()) {
+        Error("Duplicate OBJC_CATEGORY_IMPLEMENTATIONS record in PCH file");
+        return Failure;
+      }
+      ObjCCategoryImpls.swap(Record);
+      break;
     }
   }
   Error("Premature end of bitstream");
@@ -1703,6 +1719,19 @@
     NamedDecl *D = cast<NamedDecl>(GetDecl(LocallyScopedExternalDecls[I]));
     SemaObj->LocallyScopedExternalDecls[D->getDeclName()] = D;
   }
+
+  // If there were any ext_vector type declarations, deserialize them
+  // and add them to Sema's vector of such declarations.
+  for (unsigned I = 0, N = ExtVectorDecls.size(); I != N; ++I)
+    SemaObj->ExtVectorDecls.push_back(
+                               cast<TypedefDecl>(GetDecl(ExtVectorDecls[I])));
+
+  // If there were any Objective-C category implementations,
+  // deserialize them and add them to Sema's vector of such
+  // definitions.
+  for (unsigned I = 0, N = ObjCCategoryImpls.size(); I != N; ++I)
+    SemaObj->ObjCCategoryImpls.push_back(
+                cast<ObjCCategoryImplDecl>(GetDecl(ObjCCategoryImpls[I])));
 }
 
 IdentifierInfo* PCHReader::get(const char *NameStart, const char *NameEnd) {
