forked from OSchip/llvm-project
Remove ASTReader's PendingForwardRefs, which is now handled by the
(more general) fix-up of definition data pointers. llvm-svn: 146903
This commit is contained in:
parent
5d3bca4ec3
commit
c1a61fe113
|
@ -328,16 +328,7 @@ private:
|
|||
/// \brief Updates to the visible declarations of declaration contexts that
|
||||
/// haven't been loaded yet.
|
||||
DeclContextVisibleUpdatesPending PendingVisibleUpdates;
|
||||
|
||||
typedef SmallVector<Decl *, 4> ForwardRefs;
|
||||
typedef llvm::DenseMap<const Decl *, ForwardRefs>
|
||||
PendingForwardRefsMap;
|
||||
|
||||
/// \brief Forward references that have a definition but the definition decl
|
||||
/// is still initializing. When the definition gets read it will update
|
||||
/// the DefinitionData pointer of all pending references.
|
||||
PendingForwardRefsMap PendingForwardRefs;
|
||||
|
||||
/// \brief The set of C++ or Objective-C classes that have forward
|
||||
/// declarations that have not yet been linked to their definitions.
|
||||
llvm::SmallPtrSet<Decl *, 4> PendingDefinitions;
|
||||
|
|
|
@ -6149,9 +6149,6 @@ void ASTReader::FinishedDeserializing() {
|
|||
|
||||
finishPendingActions();
|
||||
PendingDeclChainsKnown.clear();
|
||||
|
||||
assert(PendingForwardRefs.size() == 0 &&
|
||||
"Some forward refs did not get linked to the definition!");
|
||||
}
|
||||
--NumCurrentElementsDeserializing;
|
||||
}
|
||||
|
|
|
@ -615,32 +615,10 @@ void ASTDeclReader::VisitObjCInterfaceDecl(ObjCInterfaceDecl *ID) {
|
|||
// We will rebuild this list lazily.
|
||||
ID->setIvarList(0);
|
||||
|
||||
// If there are any pending forward references, make their definition data
|
||||
// pointers point at the newly-allocated data.
|
||||
ASTReader::PendingForwardRefsMap::iterator
|
||||
FindI = Reader.PendingForwardRefs.find(ID);
|
||||
if (FindI != Reader.PendingForwardRefs.end()) {
|
||||
ASTReader::ForwardRefs &Refs = FindI->second;
|
||||
for (ASTReader::ForwardRefs::iterator I = Refs.begin(),
|
||||
E = Refs.end();
|
||||
I != E; ++I)
|
||||
cast<ObjCInterfaceDecl>(*I)->Data = ID->Data;
|
||||
#ifndef NDEBUG
|
||||
// We later check whether PendingForwardRefs is empty to make sure all
|
||||
// pending references were linked.
|
||||
Reader.PendingForwardRefs.erase(ID);
|
||||
#endif
|
||||
|
||||
// Note that we have deserialized a definition.
|
||||
Reader.PendingDefinitions.insert(ID);
|
||||
}
|
||||
} else if (Def) {
|
||||
if (Def->Data) {
|
||||
ID->Data = Def->Data;
|
||||
} else {
|
||||
// The definition is still initializing.
|
||||
Reader.PendingForwardRefs[Def].push_back(ID);
|
||||
}
|
||||
// Note that we have deserialized a definition.
|
||||
Reader.PendingDefinitions.insert(ID);
|
||||
} else if (Def && Def->Data) {
|
||||
ID->Data = Def->Data;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1018,31 +996,11 @@ void ASTDeclReader::InitializeCXXDefinitionData(CXXRecordDecl *D,
|
|||
if (D == DefinitionDecl) {
|
||||
D->DefinitionData = new (C) struct CXXRecordDecl::DefinitionData(D);
|
||||
ReadCXXDefinitionData(*D->DefinitionData, Record, Idx);
|
||||
// We read the definition info. Check if there are pending forward
|
||||
// references that need to point to this DefinitionData pointer.
|
||||
ASTReader::PendingForwardRefsMap::iterator
|
||||
FindI = Reader.PendingForwardRefs.find(D);
|
||||
if (FindI != Reader.PendingForwardRefs.end()) {
|
||||
ASTReader::ForwardRefs &Refs = FindI->second;
|
||||
for (ASTReader::ForwardRefs::iterator
|
||||
I = Refs.begin(), E = Refs.end(); I != E; ++I)
|
||||
cast<CXXRecordDecl>(*I)->DefinitionData = D->DefinitionData;
|
||||
#ifndef NDEBUG
|
||||
// We later check whether PendingForwardRefs is empty to make sure all
|
||||
// pending references were linked.
|
||||
Reader.PendingForwardRefs.erase(D);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
// Note that we have deserialized a definition.
|
||||
Reader.PendingDefinitions.insert(D);
|
||||
} else if (DefinitionDecl) {
|
||||
if (DefinitionDecl->DefinitionData) {
|
||||
D->DefinitionData = DefinitionDecl->DefinitionData;
|
||||
} else {
|
||||
// The definition is still initializing.
|
||||
Reader.PendingForwardRefs[DefinitionDecl].push_back(D);
|
||||
}
|
||||
} else if (DefinitionDecl && DefinitionDecl->DefinitionData) {
|
||||
D->DefinitionData = DefinitionDecl->DefinitionData;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2244,12 +2202,8 @@ void ASTDeclReader::UpdateDecl(Decl *D, ModuleFile &ModuleFile,
|
|||
ObjCInterfaceDecl *ID = cast<ObjCInterfaceDecl>(D);
|
||||
ObjCInterfaceDecl *Def
|
||||
= Reader.ReadDeclAs<ObjCInterfaceDecl>(ModuleFile, Record, Idx);
|
||||
if (Def->Data) {
|
||||
if (Def->Data)
|
||||
ID->Data = Def->Data;
|
||||
} else {
|
||||
// The definition is still initializing.
|
||||
Reader.PendingForwardRefs[Def].push_back(ID);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue