From: Aaron Ballman Date: Thu, 13 Mar 2014 16:51:27 +0000 (+0000) Subject: [C++11] Replacing CXXRecordDecl iterators ctor_begin() and ctor_end() with iterator_r... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=427334b55da913e7440d6bcb3cccedd5926b2480;p=clang [C++11] Replacing CXXRecordDecl iterators ctor_begin() and ctor_end() with iterator_range ctors(). Updating all of the usages of the iterators with range-based for loops. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@203814 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/AST/DeclCXX.h b/include/clang/AST/DeclCXX.h index 994f5a4556..db751b2275 100644 --- a/include/clang/AST/DeclCXX.h +++ b/include/clang/AST/DeclCXX.h @@ -730,6 +730,10 @@ public: /// Iterator access to constructor members. typedef specific_decl_iterator ctor_iterator; + typedef llvm::iterator_range> + ctor_range; + + ctor_range ctors() const { return ctor_range(ctor_begin(), ctor_end()); } ctor_iterator ctor_begin() const { return ctor_iterator(decls_begin()); diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp index 5b85d1d235..21b49e7826 100644 --- a/lib/Sema/SemaDeclCXX.cpp +++ b/lib/Sema/SemaDeclCXX.cpp @@ -5284,10 +5284,9 @@ bool Sema::ShouldDeleteSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM, if (!Diagnose) return true; // Find any user-declared move constructor. - for (CXXRecordDecl::ctor_iterator I = RD->ctor_begin(), - E = RD->ctor_end(); I != E; ++I) { + for (auto *I : RD->ctors()) { if (I->isMoveConstructor()) { - UserDeclaredMove = *I; + UserDeclaredMove = I; break; } } @@ -5393,11 +5392,10 @@ static bool findTrivialSpecialMember(Sema &S, CXXRecordDecl *RD, CXXConstructorDecl *DefCtor = 0; if (RD->needsImplicitDefaultConstructor()) S.DeclareImplicitDefaultConstructor(RD); - for (CXXRecordDecl::ctor_iterator CI = RD->ctor_begin(), - CE = RD->ctor_end(); CI != CE; ++CI) { + for (auto *CI : RD->ctors()) { if (!CI->isDefaultConstructor()) continue; - DefCtor = *CI; + DefCtor = CI; if (!DefCtor->isUserProvided()) break; } @@ -5486,10 +5484,9 @@ static bool findTrivialSpecialMember(Sema &S, CXXRecordDecl *RD, } static CXXConstructorDecl *findUserDeclaredCtor(CXXRecordDecl *RD) { - for (CXXRecordDecl::ctor_iterator CI = RD->ctor_begin(), CE = RD->ctor_end(); - CI != CE; ++CI) + for (auto *CI : RD->ctors()) if (!CI->isImplicit()) - return *CI; + return CI; // Look for constructor templates. typedef CXXRecordDecl::specific_decl_iterator tmpl_iter; @@ -8296,10 +8293,8 @@ private: /// Process all constructors for a class. void visitAll(const CXXRecordDecl *RD, VisitFn Callback) { - for (CXXRecordDecl::ctor_iterator CtorIt = RD->ctor_begin(), - CtorE = RD->ctor_end(); - CtorIt != CtorE; ++CtorIt) - (this->*Callback)(*CtorIt); + for (const auto *Ctor : RD->ctors()) + (this->*Callback)(Ctor); for (CXXRecordDecl::specific_decl_iterator I(RD->decls_begin()), E(RD->decls_end()); I != E; ++I) { @@ -9290,10 +9285,9 @@ static void diagnoseDeprecatedCopyOperation(Sema &S, CXXMethodDecl *CopyOp, RD->hasUserDeclaredCopyConstructor() && !S.getLangOpts().MSVCCompat) { // Find any user-declared copy constructor. - for (CXXRecordDecl::ctor_iterator I = RD->ctor_begin(), - E = RD->ctor_end(); I != E; ++I) { + for (auto *I : RD->ctors()) { if (I->isCopyConstructor()) { - UserDeclaredOperation = *I; + UserDeclaredOperation = I; break; } } diff --git a/lib/StaticAnalyzer/Checkers/VirtualCallChecker.cpp b/lib/StaticAnalyzer/Checkers/VirtualCallChecker.cpp index 800d7c439c..9b5c8529df 100644 --- a/lib/StaticAnalyzer/Checkers/VirtualCallChecker.cpp +++ b/lib/StaticAnalyzer/Checkers/VirtualCallChecker.cpp @@ -216,8 +216,7 @@ public: WalkAST walker(this, BR, mgr.getAnalysisDeclContext(RD)); // Check the constructors. - for (CXXRecordDecl::ctor_iterator I = RD->ctor_begin(), E = RD->ctor_end(); - I != E; ++I) { + for (const auto *I : RD->ctors()) { if (!I->isCopyOrMoveConstructor()) if (Stmt *Body = I->getBody()) { walker.Visit(Body);