diff options
-rw-r--r-- | clang/include/clang/Serialization/ASTReader.h | 4 | ||||
-rw-r--r-- | clang/lib/Serialization/ASTReaderDecl.cpp | 57 |
2 files changed, 0 insertions, 61 deletions
diff --git a/clang/include/clang/Serialization/ASTReader.h b/clang/include/clang/Serialization/ASTReader.h index af69148140c..7bdd0a70dc1 100644 --- a/clang/include/clang/Serialization/ASTReader.h +++ b/clang/include/clang/Serialization/ASTReader.h @@ -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 diff --git a/clang/lib/Serialization/ASTReaderDecl.cpp b/clang/lib/Serialization/ASTReaderDecl.cpp index 54344051dc0..d9243f62e5a 100644 --- a/clang/lib/Serialization/ASTReaderDecl.cpp +++ b/clang/lib/Serialization/ASTReaderDecl.cpp @@ -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); -} |