forked from OSchip/llvm-project
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:
parent
e4a838ac3f
commit
e96037923f
|
@ -917,10 +917,6 @@ private:
|
|||
|
||||
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.
|
||||
///
|
||||
/// This routine should only be used for fatal errors that have to
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue