Remove ASTReader::needPendingInstantiation(), introduced in r164993,

which is neither correct nor necessary. The use of this routine was
eliminated by r165137.

llvm-svn: 165139
This commit is contained in:
Douglas Gregor 2012-10-03 18:38:43 +00:00
parent e4a838ac3f
commit e96037923f
2 changed files with 0 additions and 61 deletions

View File

@ -917,10 +917,6 @@ private:
void finishPendingActions(); void finishPendingActions();
/// \brief Whether D needs to be instantiated, i.e. whether an instantiation
/// for D does not exist yet.
bool needPendingInstantiation(ValueDecl* D) const;
/// \brief Produce an error diagnostic and return true. /// \brief Produce an error diagnostic and return true.
/// ///
/// This routine should only be used for fatal errors that have to /// This routine should only be used for fatal errors that have to

View File

@ -2510,60 +2510,3 @@ void ASTDeclReader::UpdateDecl(Decl *D, ModuleFile &ModuleFile,
} }
} }
} }
/// \brief Return a template specialization of ND (should be a TemplateDecl)
/// that matches FD or TD.
static NamedDecl* findMatchingSpecialization(FunctionDecl* FD,
ClassTemplateSpecializationDecl*TD,
NamedDecl* ND) {
TemplateDecl* Templt = dyn_cast<TemplateDecl>(ND);
if (!Templt) return 0;
if (FD) {
FunctionTemplateDecl* FTD = dyn_cast<FunctionTemplateDecl>(Templt);
if (!FTD) return 0;
const TemplateArgumentList* TmpltArgs = FD->getTemplateSpecializationArgs();
assert(TmpltArgs || "Template without arguments");
void* InsertionPoint;
return FTD->findSpecialization(TmpltArgs->data(), TmpltArgs->size(),
InsertionPoint);
} else {
ClassTemplateDecl* CTD = dyn_cast<ClassTemplateDecl>(Templt);
if (!CTD) return 0;
const TemplateArgumentList& TmpltArgs = TD->getTemplateArgs();
void* InsertionPoint;
return CTD->findSpecialization(TmpltArgs.data(), TmpltArgs.size(),
InsertionPoint);
}
return 0;
}
/// \brief Find out whether an instantiation (outside the module) already exists
bool ASTReader::needPendingInstantiation(ValueDecl* D) const {
DeclContext *DC = D->getDeclContext()->getRedeclContext();
DeclarationName Name = D->getDeclName();
assert(Name && "unnamed template");
FunctionDecl* FD = dyn_cast<FunctionDecl>(D);
ClassTemplateSpecializationDecl* CD
= FD ? 0 : dyn_cast<ClassTemplateSpecializationDecl>(D);
NamedDecl* FoundSpecialization = 0;
if (DC->isTranslationUnit() && SemaObj) {
IdentifierResolver &IdResolver = SemaObj->IdResolver;
for (IdentifierResolver::iterator I = IdResolver.begin(Name),
IEnd = IdResolver.end();
I != IEnd && !FoundSpecialization; ++I)
FoundSpecialization = findMatchingSpecialization(FD, CD, *I);
} else {
// templates are redeclarables, i.e. they must have been merged into
// the primary context. Use localUncachedLookup to not pick up template
// decls from modules again.
llvm::SmallVector<NamedDecl*, 6> Results;
DC->getPrimaryContext()->localUncachedLookup(Name, Results);
for (llvm::SmallVector<NamedDecl *, 6>::const_iterator
I = Results.begin(), E = Results.end();
I != E && FoundSpecialization; ++I)
FoundSpecialization = findMatchingSpecialization(FD, CD, *I);
}
return FoundSpecialization && isSameEntity(FoundSpecialization, D);
}