From 8d16b0cd8c853c468fc22538a2f9dd386cfe38ef Mon Sep 17 00:00:00 2001 From: Aaron Ballman Date: Fri, 14 Mar 2014 16:05:56 +0000 Subject: [PATCH] [C++11] Replacing FunctionTemplateDecl iterators spec_begin() and spec_end() with iterator_range specializations(). Updating all of the usages of the iterators with range-based for loops. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@203938 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/AST/DataRecursiveASTVisitor.h | 4 +--- include/clang/AST/DeclTemplate.h | 10 +++++++--- include/clang/AST/RecursiveASTVisitor.h | 4 +--- lib/AST/DeclPrinter.cpp | 7 +++---- lib/CodeGen/CGDebugInfo.cpp | 6 ++---- 5 files changed, 14 insertions(+), 17 deletions(-) diff --git a/include/clang/AST/DataRecursiveASTVisitor.h b/include/clang/AST/DataRecursiveASTVisitor.h index f6443e84f7..8495300768 100644 --- a/include/clang/AST/DataRecursiveASTVisitor.h +++ b/include/clang/AST/DataRecursiveASTVisitor.h @@ -1513,9 +1513,7 @@ template bool DataRecursiveASTVisitor::TraverseFunctionInstantiations( FunctionTemplateDecl *D) { FunctionTemplateDecl::spec_iterator end = D->spec_end(); - for (FunctionTemplateDecl::spec_iterator it = D->spec_begin(); it != end; - ++it) { - FunctionDecl* FD = *it; + for (auto *FD : D->specializations()) { switch (FD->getTemplateSpecializationKind()) { case TSK_Undeclared: case TSK_ImplicitInstantiation: diff --git a/include/clang/AST/DeclTemplate.h b/include/clang/AST/DeclTemplate.h index cc843e56c4..bbf746375d 100644 --- a/include/clang/AST/DeclTemplate.h +++ b/include/clang/AST/DeclTemplate.h @@ -713,9 +713,9 @@ public: } typedef redeclarable_base::redecl_range redecl_range; - typedef redeclarable_base::redecl_iterator redecl_iterator; - using redeclarable_base::redecls_begin; - using redeclarable_base::redecls_end; + typedef redeclarable_base::redecl_iterator redecl_iterator; + using redeclarable_base::redecls_begin; + using redeclarable_base::redecls_end; using redeclarable_base::redecls; using redeclarable_base::getPreviousDecl; using redeclarable_base::getMostRecentDecl; @@ -846,7 +846,11 @@ public: } typedef SpecIterator spec_iterator; + typedef llvm::iterator_range spec_range; + spec_range specializations() const { + return spec_range(spec_begin(), spec_end()); + } spec_iterator spec_begin() const { return makeSpecIterator(getSpecializations(), false); } diff --git a/include/clang/AST/RecursiveASTVisitor.h b/include/clang/AST/RecursiveASTVisitor.h index 259e97766f..52f61b2bd6 100644 --- a/include/clang/AST/RecursiveASTVisitor.h +++ b/include/clang/AST/RecursiveASTVisitor.h @@ -1534,9 +1534,7 @@ template bool RecursiveASTVisitor::TraverseTemplateInstantiations( FunctionTemplateDecl *D) { FunctionTemplateDecl::spec_iterator end = D->spec_end(); - for (FunctionTemplateDecl::spec_iterator it = D->spec_begin(); it != end; - ++it) { - FunctionDecl* FD = *it; + for (auto *FD : D->specializations()) { switch (FD->getTemplateSpecializationKind()) { case TSK_Undeclared: case TSK_ImplicitInstantiation: diff --git a/lib/AST/DeclPrinter.cpp b/lib/AST/DeclPrinter.cpp index bbe777b93c..c0df591b3d 100644 --- a/lib/AST/DeclPrinter.cpp +++ b/lib/AST/DeclPrinter.cpp @@ -885,10 +885,9 @@ void DeclPrinter::VisitTemplateDecl(const TemplateDecl *D) { void DeclPrinter::VisitFunctionTemplateDecl(FunctionTemplateDecl *D) { if (PrintInstantiation) { TemplateParameterList *Params = D->getTemplateParameters(); - for (FunctionTemplateDecl::spec_iterator I = D->spec_begin(), E = D->spec_end(); - I != E; ++I) { - PrintTemplateParameters(Params, (*I)->getTemplateSpecializationArgs()); - Visit(*I); + for (auto *I : D->specializations()) { + PrintTemplateParameters(Params, I->getTemplateSpecializationArgs()); + Visit(I); } } diff --git a/lib/CodeGen/CGDebugInfo.cpp b/lib/CodeGen/CGDebugInfo.cpp index 45001fc36e..2b81b3789e 100644 --- a/lib/CodeGen/CGDebugInfo.cpp +++ b/lib/CodeGen/CGDebugInfo.cpp @@ -1151,11 +1151,9 @@ CollectCXXMemberFunctions(const CXXRecordDecl *RD, llvm::DIFile Unit, // Add any template specializations that have already been seen. Like // implicit member functions, these may have been added to a declaration // in the case of vtable-based debug info reduction. - for (FunctionTemplateDecl::spec_iterator SI = FTD->spec_begin(), - SE = FTD->spec_end(); - SI != SE; ++SI) { + for (const auto *SI : FTD->specializations()) { llvm::DenseMap::iterator MI = - SPCache.find(cast(*SI)->getCanonicalDecl()); + SPCache.find(cast(SI)->getCanonicalDecl()); if (MI != SPCache.end()) EltTys.push_back(MI->second); } -- 2.40.0