diff --git a/lib/Sema/Sema.cpp b/lib/Sema/Sema.cpp
index 2320d7d..6143492 100644
--- a/lib/Sema/Sema.cpp
+++ b/lib/Sema/Sema.cpp
@@ -300,7 +300,7 @@
       // common behavior for C++ compilers, it is technically wrong. In the
       // future, we either need to be able to filter the results of name lookup
       // or we need to perform template instantiations earlier.
-      PerformPendingImplicitInstantiations();
+      PerformPendingInstantiations();
 
       /// If DefinedUsedVTables ends up marking any virtual member
       /// functions it might lead to more pending template
diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp
index 5986eca..197c44d 100644
--- a/lib/Sema/SemaExpr.cpp
+++ b/lib/Sema/SemaExpr.cpp
@@ -7678,8 +7678,7 @@
           PendingLocalImplicitInstantiations.push_back(std::make_pair(Function,
                                                                       Loc));
         else
-          PendingImplicitInstantiations.push_back(std::make_pair(Function,
-                                                                 Loc));
+          PendingInstantiations.push_back(std::make_pair(Function, Loc));
       }
     }
 
@@ -7698,7 +7697,7 @@
       if (MSInfo->getPointOfInstantiation().isInvalid() &&
           MSInfo->getTemplateSpecializationKind()== TSK_ImplicitInstantiation) {
         MSInfo->setPointOfInstantiation(Loc);
-        PendingImplicitInstantiations.push_back(std::make_pair(Var, Loc));
+        PendingInstantiations.push_back(std::make_pair(Var, Loc));
       }
     }
 
diff --git a/lib/Sema/SemaTemplateInstantiateDecl.cpp b/lib/Sema/SemaTemplateInstantiateDecl.cpp
index dd82114..db216f3 100644
--- a/lib/Sema/SemaTemplateInstantiateDecl.cpp
+++ b/lib/Sema/SemaTemplateInstantiateDecl.cpp
@@ -2042,7 +2042,7 @@
       Function->setInvalidDecl();
     } else if (Function->getTemplateSpecializationKind()
                  == TSK_ExplicitInstantiationDefinition) {
-      PendingImplicitInstantiations.push_back(
+      PendingInstantiations.push_back(
         std::make_pair(Function, PointOfInstantiation));
     }
 
@@ -2065,9 +2065,9 @@
   // If we're performing recursive template instantiation, create our own
   // queue of pending implicit instantiations that we will instantiate later,
   // while we're still within our own instantiation context.
-  std::deque<PendingImplicitInstantiation> SavedPendingImplicitInstantiations;
+  std::deque<PendingImplicitInstantiation> SavedPendingInstantiations;
   if (Recursive)
-    PendingImplicitInstantiations.swap(SavedPendingImplicitInstantiations);
+    PendingInstantiations.swap(SavedPendingInstantiations);
 
   EnterExpressionEvaluationContext EvalContext(*this, 
                                                Action::PotentiallyEvaluated);
@@ -2126,16 +2126,16 @@
 
   // This class may have local implicit instantiations that need to be
   // instantiation within this scope.
-  PerformPendingImplicitInstantiations(/*LocalOnly=*/true);
+  PerformPendingInstantiations(/*LocalOnly=*/true);
   Scope.Exit();
 
   if (Recursive) {
     // Instantiate any pending implicit instantiations found during the
     // instantiation of this template.
-    PerformPendingImplicitInstantiations();
+    PerformPendingInstantiations();
 
     // Restore the set of pending implicit instantiations.
-    PendingImplicitInstantiations.swap(SavedPendingImplicitInstantiations);
+    PendingInstantiations.swap(SavedPendingInstantiations);
   }
 }
 
@@ -2182,7 +2182,7 @@
       Diag(Def->getLocation(), diag::note_explicit_instantiation_here);
     } else if (Var->getTemplateSpecializationKind()
                  == TSK_ExplicitInstantiationDefinition) {
-      PendingImplicitInstantiations.push_back(
+      PendingInstantiations.push_back(
         std::make_pair(Var, PointOfInstantiation));
     }
 
@@ -2208,9 +2208,9 @@
   // If we're performing recursive template instantiation, create our own
   // queue of pending implicit instantiations that we will instantiate later,
   // while we're still within our own instantiation context.
-  std::deque<PendingImplicitInstantiation> SavedPendingImplicitInstantiations;
+  std::deque<PendingImplicitInstantiation> SavedPendingInstantiations;
   if (Recursive)
-    PendingImplicitInstantiations.swap(SavedPendingImplicitInstantiations);
+    PendingInstantiations.swap(SavedPendingInstantiations);
 
   // Enter the scope of this instantiation. We don't use
   // PushDeclContext because we don't have a scope.
@@ -2234,10 +2234,10 @@
   if (Recursive) {
     // Instantiate any pending implicit instantiations found during the
     // instantiation of this template.
-    PerformPendingImplicitInstantiations();
+    PerformPendingInstantiations();
 
     // Restore the set of pending implicit instantiations.
-    PendingImplicitInstantiations.swap(SavedPendingImplicitInstantiations);
+    PendingInstantiations.swap(SavedPendingInstantiations);
   }
 }
 
@@ -2703,14 +2703,14 @@
 
 /// \brief Performs template instantiation for all implicit template
 /// instantiations we have seen until this point.
-void Sema::PerformPendingImplicitInstantiations(bool LocalOnly) {
+void Sema::PerformPendingInstantiations(bool LocalOnly) {
   while (!PendingLocalImplicitInstantiations.empty() ||
-         (!LocalOnly && !PendingImplicitInstantiations.empty())) {
+         (!LocalOnly && !PendingInstantiations.empty())) {
     PendingImplicitInstantiation Inst;
 
     if (PendingLocalImplicitInstantiations.empty()) {
-      Inst = PendingImplicitInstantiations.front();
-      PendingImplicitInstantiations.pop_front();
+      Inst = PendingInstantiations.front();
+      PendingInstantiations.pop_front();
     } else {
       Inst = PendingLocalImplicitInstantiations.front();
       PendingLocalImplicitInstantiations.pop_front();
diff --git a/lib/Serialization/ASTReader.cpp b/lib/Serialization/ASTReader.cpp
index abe9b16..f07215c 100644
--- a/lib/Serialization/ASTReader.cpp
+++ b/lib/Serialization/ASTReader.cpp
@@ -1927,11 +1927,11 @@
 
     case PENDING_IMPLICIT_INSTANTIATIONS:
       // Optimization for the first block.
-      if (PendingImplicitInstantiations.empty())
-        PendingImplicitInstantiations.swap(Record);
+      if (PendingInstantiations.empty())
+        PendingInstantiations.swap(Record);
       else
-        PendingImplicitInstantiations.insert(
-             PendingImplicitInstantiations.end(), Record.begin(), Record.end());
+        PendingInstantiations.insert(PendingInstantiations.end(),
+                                     Record.begin(), Record.end());
       break;
 
     case SEMA_DECL_REFS:
@@ -3430,12 +3430,11 @@
 
   // If there were any pending implicit instantiations, deserialize them
   // and add them to Sema's queue of such instantiations.
-  assert(PendingImplicitInstantiations.size() % 2 == 0 &&
-         "Expected pairs of entries");
-  for (unsigned Idx = 0, N = PendingImplicitInstantiations.size(); Idx < N;) {
-    ValueDecl *D=cast<ValueDecl>(GetDecl(PendingImplicitInstantiations[Idx++]));
-    SourceLocation Loc = ReadSourceLocation(PendingImplicitInstantiations, Idx);
-    SemaObj->PendingImplicitInstantiations.push_back(std::make_pair(D, Loc));
+  assert(PendingInstantiations.size() % 2 == 0 && "Expected pairs of entries");
+  for (unsigned Idx = 0, N = PendingInstantiations.size(); Idx < N;) {
+    ValueDecl *D=cast<ValueDecl>(GetDecl(PendingInstantiations[Idx++]));
+    SourceLocation Loc = ReadSourceLocation(PendingInstantiations, Idx);
+    SemaObj->PendingInstantiations.push_back(std::make_pair(D, Loc));
   }
 
   // Load the offsets of the declarations that Sema references.
diff --git a/lib/Serialization/ASTWriter.cpp b/lib/Serialization/ASTWriter.cpp
index cefa87b..efc7da7 100644
--- a/lib/Serialization/ASTWriter.cpp
+++ b/lib/Serialization/ASTWriter.cpp
@@ -2301,12 +2301,12 @@
     AddDeclRef(SemaRef.DynamicClasses[I], DynamicClasses);
 
   // Build a record containing all of pending implicit instantiations.
-  RecordData PendingImplicitInstantiations;
+  RecordData PendingInstantiations;
   for (std::deque<Sema::PendingImplicitInstantiation>::iterator
-         I = SemaRef.PendingImplicitInstantiations.begin(),
-         N = SemaRef.PendingImplicitInstantiations.end(); I != N; ++I) {
-    AddDeclRef(I->first, PendingImplicitInstantiations);
-    AddSourceLocation(I->second, PendingImplicitInstantiations);
+         I = SemaRef.PendingInstantiations.begin(),
+         N = SemaRef.PendingInstantiations.end(); I != N; ++I) {
+    AddDeclRef(I->first, PendingInstantiations);
+    AddSourceLocation(I->second, PendingInstantiations);
   }
   assert(SemaRef.PendingLocalImplicitInstantiations.empty() &&
          "There are local ones at end of translation unit!");
@@ -2404,9 +2404,8 @@
     Stream.EmitRecord(DYNAMIC_CLASSES, DynamicClasses);
 
   // Write the record containing pending implicit instantiations.
-  if (!PendingImplicitInstantiations.empty())
-    Stream.EmitRecord(PENDING_IMPLICIT_INSTANTIATIONS,
-                      PendingImplicitInstantiations);
+  if (!PendingInstantiations.empty())
+    Stream.EmitRecord(PENDING_IMPLICIT_INSTANTIATIONS, PendingInstantiations);
 
   // Write the record containing declaration references of Sema.
   if (!SemaDeclRefs.empty())
@@ -2553,13 +2552,13 @@
       AddDeclRef(SemaRef.DynamicClasses[I], DynamicClasses);
 
   // Build a record containing all of pending implicit instantiations.
-  RecordData PendingImplicitInstantiations;
+  RecordData PendingInstantiations;
   for (std::deque<Sema::PendingImplicitInstantiation>::iterator
-         I = SemaRef.PendingImplicitInstantiations.begin(),
-         N = SemaRef.PendingImplicitInstantiations.end(); I != N; ++I) {
+         I = SemaRef.PendingInstantiations.begin(),
+         N = SemaRef.PendingInstantiations.end(); I != N; ++I) {
     if (I->first->getPCHLevel() == 0) {
-      AddDeclRef(I->first, PendingImplicitInstantiations);
-      AddSourceLocation(I->second, PendingImplicitInstantiations);
+      AddDeclRef(I->first, PendingInstantiations);
+      AddSourceLocation(I->second, PendingInstantiations);
     }
   }
   assert(SemaRef.PendingLocalImplicitInstantiations.empty() &&
@@ -2639,9 +2638,8 @@
     Stream.EmitRecord(DYNAMIC_CLASSES, DynamicClasses);
 
   // Write the record containing pending implicit instantiations.
-  if (!PendingImplicitInstantiations.empty())
-    Stream.EmitRecord(PENDING_IMPLICIT_INSTANTIATIONS,
-                      PendingImplicitInstantiations);
+  if (!PendingInstantiations.empty())
+    Stream.EmitRecord(PENDING_IMPLICIT_INSTANTIATIONS, PendingInstantiations);
 
   // Write the record containing declaration references of Sema.
   if (!SemaDeclRefs.empty())
