From 34219cae4a2014d6a2cf0b6ae873f9d4089cdb40 Mon Sep 17 00:00:00 2001 From: Pete Cooper <peter_cooper@apple.com> Date: Thu, 30 Jul 2015 17:22:52 +0000 Subject: [PATCH] Use llvm::reverse to make a bunch of loops use foreach. NFC. In llvm commit r243581, a reverse range adapter was added which allows us to change code such as for (auto I = Fields.rbegin(), E = Fields.rend(); I != E; ++I) { in to for (const FieldDecl *I : llvm::reverse(Fields)) This commit changes a few of the places in clang which are eligible to use this new adapter. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@243663 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/ARCMigrate/TransformActions.cpp | 7 +++---- lib/Analysis/CFG.cpp | 5 ++--- lib/CodeGen/CGCall.cpp | 7 +++---- lib/CodeGen/CoverageMappingGen.cpp | 12 ++++++------ lib/Sema/AnalysisBasedWarnings.cpp | 3 +-- lib/Sema/SemaDecl.cpp | 5 ++--- lib/Serialization/ASTReader.cpp | 9 ++++----- lib/StaticAnalyzer/Core/ExprEngineC.cpp | 4 +--- tools/libclang/CIndex.cpp | 6 ++---- 9 files changed, 24 insertions(+), 34 deletions(-) diff --git a/lib/ARCMigrate/TransformActions.cpp b/lib/ARCMigrate/TransformActions.cpp index 9fb2f1d3eea..c628b54ed41 100644 --- a/lib/ARCMigrate/TransformActions.cpp +++ b/lib/ARCMigrate/TransformActions.cpp @@ -505,11 +505,10 @@ void TransformActionsImpl::commitClearDiagnostic(ArrayRef<unsigned> IDs, void TransformActionsImpl::addInsertion(SourceLocation loc, StringRef text) { SourceManager &SM = Ctx.getSourceManager(); loc = SM.getExpansionLoc(loc); - for (std::list<CharRange>::reverse_iterator - I = Removals.rbegin(), E = Removals.rend(); I != E; ++I) { - if (!SM.isBeforeInTranslationUnit(loc, I->End)) + for (const CharRange &I : llvm::reverse(Removals)) { + if (!SM.isBeforeInTranslationUnit(loc, I.End)) break; - if (I->Begin.isBeforeInTranslationUnitThan(loc)) + if (I.Begin.isBeforeInTranslationUnitThan(loc)) return; } diff --git a/lib/Analysis/CFG.cpp b/lib/Analysis/CFG.cpp index 07b80edfe69..3a358f91b09 100644 --- a/lib/Analysis/CFG.cpp +++ b/lib/Analysis/CFG.cpp @@ -994,9 +994,8 @@ std::unique_ptr<CFG> CFGBuilder::buildCFG(const Decl *D, Stmt *Statement) { // For C++ constructor add initializers to CFG. if (const CXXConstructorDecl *CD = dyn_cast_or_null<CXXConstructorDecl>(D)) { - for (CXXConstructorDecl::init_const_reverse_iterator I = CD->init_rbegin(), - E = CD->init_rend(); I != E; ++I) { - B = addInitializer(*I); + for (auto *I : llvm::reverse(CD->inits())) { + B = addInitializer(I); if (badCFG) return nullptr; } diff --git a/lib/CodeGen/CGCall.cpp b/lib/CodeGen/CGCall.cpp index c8dc01ed05a..8f1b4aada1a 100644 --- a/lib/CodeGen/CGCall.cpp +++ b/lib/CodeGen/CGCall.cpp @@ -2614,10 +2614,9 @@ static void deactivateArgCleanupsBeforeCall(CodeGenFunction &CGF, ArrayRef<CallArgList::CallArgCleanup> Cleanups = CallArgs.getCleanupsToDeactivate(); // Iterate in reverse to increase the likelihood of popping the cleanup. - for (ArrayRef<CallArgList::CallArgCleanup>::reverse_iterator - I = Cleanups.rbegin(), E = Cleanups.rend(); I != E; ++I) { - CGF.DeactivateCleanupBlock(I->Cleanup, I->IsActiveIP); - I->IsActiveIP->eraseFromParent(); + for (const auto &I : llvm::reverse(Cleanups)) { + CGF.DeactivateCleanupBlock(I.Cleanup, I.IsActiveIP); + I.IsActiveIP->eraseFromParent(); } } diff --git a/lib/CodeGen/CoverageMappingGen.cpp b/lib/CodeGen/CoverageMappingGen.cpp index 9a82caff45c..90e45a011ca 100644 --- a/lib/CodeGen/CoverageMappingGen.cpp +++ b/lib/CodeGen/CoverageMappingGen.cpp @@ -496,12 +496,12 @@ struct CounterCoverageMappingBuilder llvm::SmallSet<SourceLocation, 8> StartLocs; Optional<Counter> ParentCounter; - for (auto I = RegionStack.rbegin(), E = RegionStack.rend(); I != E; ++I) { - if (!I->hasStartLoc()) + for (SourceMappingRegion &I : llvm::reverse(RegionStack)) { + if (!I.hasStartLoc()) continue; - SourceLocation Loc = I->getStartLoc(); + SourceLocation Loc = I.getStartLoc(); if (!isNestedIn(Loc, ParentFile)) { - ParentCounter = I->getCounter(); + ParentCounter = I.getCounter(); break; } @@ -510,11 +510,11 @@ struct CounterCoverageMappingBuilder // correct count. We avoid creating redundant regions by stopping once // we've seen this region. if (StartLocs.insert(Loc).second) - SourceRegions.emplace_back(I->getCounter(), Loc, + SourceRegions.emplace_back(I.getCounter(), Loc, getEndOfFileOrMacro(Loc)); Loc = getIncludeOrExpansionLoc(Loc); } - I->setStartLoc(getPreciseTokenLocEnd(Loc)); + I.setStartLoc(getPreciseTokenLocEnd(Loc)); } if (ParentCounter) { diff --git a/lib/Sema/AnalysisBasedWarnings.cpp b/lib/Sema/AnalysisBasedWarnings.cpp index 59c25d235a6..9e69ecc5834 100644 --- a/lib/Sema/AnalysisBasedWarnings.cpp +++ b/lib/Sema/AnalysisBasedWarnings.cpp @@ -1098,8 +1098,7 @@ static void DiagnoseSwitchLabelsFallthrough(Sema &S, AnalysisDeclContext &AC, FM.fillReachableBlocks(Cfg); - for (CFG::reverse_iterator I = Cfg->rbegin(), E = Cfg->rend(); I != E; ++I) { - const CFGBlock *B = *I; + for (const CFGBlock *B : llvm::reverse(*Cfg)) { const Stmt *Label = B->getLabel(); if (!Label || !isa<SwitchCase>(Label)) diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp index 661edc74c5e..98db0c7b5ae 100644 --- a/lib/Sema/SemaDecl.cpp +++ b/lib/Sema/SemaDecl.cpp @@ -8570,9 +8570,8 @@ namespace { // Convert FieldDecls to their index number. llvm::SmallVector<unsigned, 4> UsedFieldIndex; - for (auto I = Fields.rbegin(), E = Fields.rend(); I != E; ++I) { - UsedFieldIndex.push_back((*I)->getFieldIndex()); - } + for (const FieldDecl *I : llvm::reverse(Fields)) + UsedFieldIndex.push_back(I->getFieldIndex()); // See if a warning is needed by checking the first difference in index // numbers. If field being used has index less than the field being diff --git a/lib/Serialization/ASTReader.cpp b/lib/Serialization/ASTReader.cpp index 0a76488c900..bf3f830e795 100644 --- a/lib/Serialization/ASTReader.cpp +++ b/lib/Serialization/ASTReader.cpp @@ -1592,16 +1592,15 @@ void ASTReader::ReadDefinedMacros() { // Note that we are loading defined macros. Deserializing Macros(this); - for (ModuleReverseIterator I = ModuleMgr.rbegin(), - E = ModuleMgr.rend(); I != E; ++I) { - BitstreamCursor &MacroCursor = (*I)->MacroCursor; + for (auto &I : llvm::reverse(ModuleMgr)) { + BitstreamCursor &MacroCursor = I->MacroCursor; // If there was no preprocessor block, skip this file. if (!MacroCursor.getBitStreamReader()) continue; BitstreamCursor Cursor = MacroCursor; - Cursor.JumpToBit((*I)->MacroStartOffset); + Cursor.JumpToBit(I->MacroStartOffset); RecordData Record; while (true) { @@ -1623,7 +1622,7 @@ void ASTReader::ReadDefinedMacros() { case PP_MACRO_OBJECT_LIKE: case PP_MACRO_FUNCTION_LIKE: - getLocalIdentifier(**I, Record[0]); + getLocalIdentifier(*I, Record[0]); break; case PP_TOKEN: diff --git a/lib/StaticAnalyzer/Core/ExprEngineC.cpp b/lib/StaticAnalyzer/Core/ExprEngineC.cpp index 1777ea97a40..5f9df744042 100644 --- a/lib/StaticAnalyzer/Core/ExprEngineC.cpp +++ b/lib/StaticAnalyzer/Core/ExprEngineC.cpp @@ -663,9 +663,7 @@ void ExprEngine::VisitGuardedExpr(const Expr *Ex, bool hasValue = false; SVal V; - for (CFGBlock::const_reverse_iterator I = SrcBlock->rbegin(), - E = SrcBlock->rend(); I != E; ++I) { - CFGElement CE = *I; + for (CFGElement CE : llvm::reverse(*SrcBlock)) { if (Optional<CFGStmt> CS = CE.getAs<CFGStmt>()) { const Expr *ValEx = cast<Expr>(CS->getStmt()); ValEx = ValEx->IgnoreParens(); diff --git a/tools/libclang/CIndex.cpp b/tools/libclang/CIndex.cpp index ed9a1ec6f01..6a8a0c55c84 100644 --- a/tools/libclang/CIndex.cpp +++ b/tools/libclang/CIndex.cpp @@ -2174,10 +2174,8 @@ void EnqueueVisitor::VisitCompoundLiteralExpr(const CompoundLiteralExpr *E) { AddTypeLoc(E->getTypeSourceInfo()); } void EnqueueVisitor::VisitCompoundStmt(const CompoundStmt *S) { - for (CompoundStmt::const_reverse_body_iterator I = S->body_rbegin(), - E = S->body_rend(); I != E; ++I) { - AddStmt(*I); - } + for (auto &I : llvm::reverse(S->body())) + AddStmt(I); } void EnqueueVisitor:: VisitMSDependentExistsStmt(const MSDependentExistsStmt *S) { -- GitLab