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.

llvm-svn: 243663
This commit is contained in:
Pete Cooper 2015-07-30 17:22:52 +00:00
parent 7a0c3a92c0
commit 57d3f14502
9 changed files with 24 additions and 34 deletions

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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();
}
}

View File

@ -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) {

View File

@ -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))

View File

@ -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

View File

@ -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:

View File

@ -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();

View File

@ -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) {