From 6440fd75532002285ee55bb4c81cfb8190456130 Mon Sep 17 00:00:00 2001 From: Aaron Ballman Date: Fri, 14 Mar 2014 18:34:04 +0000 Subject: [PATCH] [C++11] Replacing BlockDecl iterators capture_begin() and capture_end() with iterator_range captures(). Updating all of the usages of the iterators with range-based for loops. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@203958 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/AST/Decl.h | 10 +++ lib/ARCMigrate/TransBlockObjCVariable.cpp | 7 +-- lib/AST/ASTDumper.cpp | 15 +++-- lib/AST/Decl.cpp | 5 +- lib/Analysis/AnalysisDeclContext.cpp | 10 ++- lib/Analysis/UninitializedValues.cpp | 7 +-- lib/CodeGen/CGBlocks.cpp | 72 ++++++++++------------ lib/CodeGen/CGDebugInfo.cpp | 5 +- lib/CodeGen/CGDecl.cpp | 10 ++- lib/CodeGen/CGObjCMac.cpp | 18 +++--- lib/Rewrite/Frontend/RewriteModernObjC.cpp | 9 ++- lib/Rewrite/Frontend/RewriteObjC.cpp | 9 ++- lib/Sema/JumpDiagnostics.cpp | 5 +- lib/Sema/SemaExpr.cpp | 6 +- lib/Sema/TreeTransform.h | 5 +- lib/Serialization/ASTWriterDecl.cpp | 4 +- 16 files changed, 89 insertions(+), 108 deletions(-) diff --git a/include/clang/AST/Decl.h b/include/clang/AST/Decl.h index be64d901e3..ceb8f2d207 100644 --- a/include/clang/AST/Decl.h +++ b/include/clang/AST/Decl.h @@ -3354,6 +3354,16 @@ public: typedef const Capture *capture_iterator; typedef const Capture *capture_const_iterator; + typedef llvm::iterator_range capture_range; + typedef llvm::iterator_range capture_const_range; + + capture_range captures() { + return capture_range(capture_begin(), capture_end()); + } + capture_const_range captures() const { + return capture_const_range(capture_begin(), capture_end()); + } + capture_iterator capture_begin() { return Captures; } capture_iterator capture_end() { return Captures + NumCaptures; } capture_const_iterator capture_begin() const { return Captures; } diff --git a/lib/ARCMigrate/TransBlockObjCVariable.cpp b/lib/ARCMigrate/TransBlockObjCVariable.cpp index 97c4e3480c..fac6a84c45 100644 --- a/lib/ARCMigrate/TransBlockObjCVariable.cpp +++ b/lib/ARCMigrate/TransBlockObjCVariable.cpp @@ -78,10 +78,9 @@ public: bool VisitBlockDecl(BlockDecl *block) { SmallVector BlockVars; - for (BlockDecl::capture_iterator - I = block->capture_begin(), E = block->capture_end(); I != E; ++I) { - VarDecl *var = I->getVariable(); - if (I->isByRef() && + for (const auto &I : block->captures()) { + VarDecl *var = I.getVariable(); + if (I.isByRef() && var->getType()->isObjCObjectPointerType() && isImplicitStrong(var->getType())) { BlockVars.push_back(var); diff --git a/lib/AST/ASTDumper.cpp b/lib/AST/ASTDumper.cpp index 455972d923..cefb21fb5f 100644 --- a/lib/AST/ASTDumper.cpp +++ b/lib/AST/ASTDumper.cpp @@ -1449,20 +1449,19 @@ void ASTDumper::VisitBlockDecl(const BlockDecl *D) { IndentScope Indent(*this); OS << "capture this"; } - for (BlockDecl::capture_iterator I = D->capture_begin(), E = D->capture_end(); - I != E; ++I) { + for (const auto &I : D->captures()) { IndentScope Indent(*this); OS << "capture"; - if (I->isByRef()) + if (I.isByRef()) OS << " byref"; - if (I->isNested()) + if (I.isNested()) OS << " nested"; - if (I->getVariable()) { + if (I.getVariable()) { OS << ' '; - dumpBareDeclRef(I->getVariable()); + dumpBareDeclRef(I.getVariable()); } - if (I->hasCopyExpr()) - dumpStmt(I->getCopyExpr()); + if (I.hasCopyExpr()) + dumpStmt(I.getCopyExpr()); } lastChild(); dumpStmt(D->getBody()); diff --git a/lib/AST/Decl.cpp b/lib/AST/Decl.cpp index 89f7291c4d..038c7acb0f 100644 --- a/lib/AST/Decl.cpp +++ b/lib/AST/Decl.cpp @@ -3452,10 +3452,9 @@ void BlockDecl::setCaptures(ASTContext &Context, } bool BlockDecl::capturesVariable(const VarDecl *variable) const { - for (capture_const_iterator - i = capture_begin(), e = capture_end(); i != e; ++i) + for (const auto &I : captures()) // Only auto vars can be captured, so no redeclaration worries. - if (i->getVariable() == variable) + if (I.getVariable() == variable) return true; return false; diff --git a/lib/Analysis/AnalysisDeclContext.cpp b/lib/Analysis/AnalysisDeclContext.cpp index 1cc87d1a69..13f74aef69 100644 --- a/lib/Analysis/AnalysisDeclContext.cpp +++ b/lib/Analysis/AnalysisDeclContext.cpp @@ -133,9 +133,8 @@ const ImplicitParamDecl *AnalysisDeclContext::getSelfDecl() const { return MD->getSelfDecl(); if (const BlockDecl *BD = dyn_cast(D)) { // See if 'self' was captured by the block. - for (BlockDecl::capture_const_iterator it = BD->capture_begin(), - et = BD->capture_end(); it != et; ++it) { - const VarDecl *VD = it->getVariable(); + for (const auto &I : BD->captures()) { + const VarDecl *VD = I.getVariable(); if (VD->getName() == "self") return dyn_cast(VD); } @@ -511,9 +510,8 @@ static DeclVec* LazyInitializeReferencedDecls(const BlockDecl *BD, new (BV) DeclVec(BC, 10); // Go through the capture list. - for (BlockDecl::capture_const_iterator CI = BD->capture_begin(), - CE = BD->capture_end(); CI != CE; ++CI) { - BV->push_back(CI->getVariable(), BC); + for (const auto &CI : BD->captures()) { + BV->push_back(CI.getVariable(), BC); } // Find the referenced global/static variables. diff --git a/lib/Analysis/UninitializedValues.cpp b/lib/Analysis/UninitializedValues.cpp index 005426dc7d..29c17c3765 100644 --- a/lib/Analysis/UninitializedValues.cpp +++ b/lib/Analysis/UninitializedValues.cpp @@ -632,12 +632,11 @@ void TransferFunctions::VisitObjCForCollectionStmt(ObjCForCollectionStmt *FS) { void TransferFunctions::VisitBlockExpr(BlockExpr *be) { const BlockDecl *bd = be->getBlockDecl(); - for (BlockDecl::capture_const_iterator i = bd->capture_begin(), - e = bd->capture_end() ; i != e; ++i) { - const VarDecl *vd = i->getVariable(); + for (const auto &I : bd->captures()) { + const VarDecl *vd = I.getVariable(); if (!isTrackedVar(vd)) continue; - if (i->isByRef()) { + if (I.isByRef()) { vals[vd] = Initialized; continue; } diff --git a/lib/CodeGen/CGBlocks.cpp b/lib/CodeGen/CGBlocks.cpp index 56c34bcf61..a1f13682d9 100644 --- a/lib/CodeGen/CGBlocks.cpp +++ b/lib/CodeGen/CGBlocks.cpp @@ -370,11 +370,10 @@ static void computeBlockInfo(CodeGenModule &CGM, CodeGenFunction *CGF, } // Next, all the block captures. - for (BlockDecl::capture_const_iterator ci = block->capture_begin(), - ce = block->capture_end(); ci != ce; ++ci) { - const VarDecl *variable = ci->getVariable(); + for (const auto &CI : block->captures()) { + const VarDecl *variable = CI.getVariable(); - if (ci->isByRef()) { + if (CI.isByRef()) { // We have to copy/dispose of the __block reference. info.NeedsCopyDispose = true; @@ -387,8 +386,7 @@ static void computeBlockInfo(CodeGenModule &CGM, CodeGenFunction *CGF, maxFieldAlign = std::max(maxFieldAlign, tinfo.second); layout.push_back(BlockLayoutChunk(tinfo.second, tinfo.first, - Qualifiers::OCL_None, - &*ci, llvmType)); + Qualifiers::OCL_None, &CI, llvmType)); continue; } @@ -422,7 +420,7 @@ static void computeBlockInfo(CodeGenModule &CGM, CodeGenFunction *CGF, lifetime = Qualifiers::OCL_Strong; // So do types that require non-trivial copy construction. - } else if (ci->hasCopyExpr()) { + } else if (CI.hasCopyExpr()) { info.NeedsCopyDispose = true; info.HasCXXObject = true; @@ -446,7 +444,7 @@ static void computeBlockInfo(CodeGenModule &CGM, CodeGenFunction *CGF, llvm::Type *llvmType = CGM.getTypes().ConvertTypeForMem(VT); - layout.push_back(BlockLayoutChunk(align, size, lifetime, &*ci, llvmType)); + layout.push_back(BlockLayoutChunk(align, size, lifetime, &CI, llvmType)); } // If that was everything, we're done here. @@ -581,14 +579,13 @@ static void enterBlockScope(CodeGenFunction &CGF, BlockDecl *block) { // Walk through the captures (in order) and find the ones not // captured by constant. - for (BlockDecl::capture_const_iterator ci = block->capture_begin(), - ce = block->capture_end(); ci != ce; ++ci) { + for (const auto &CI : block->captures()) { // Ignore __block captures; there's nothing special in the // on-stack block that we need to do for them. - if (ci->isByRef()) continue; + if (CI.isByRef()) continue; // Ignore variables that are constant-captured. - const VarDecl *variable = ci->getVariable(); + const VarDecl *variable = CI.getVariable(); CGBlockInfo::Capture &capture = blockInfo.getCapture(variable); if (capture.isConstant()) continue; @@ -741,9 +738,8 @@ llvm::Value *CodeGenFunction::EmitBlockLiteral(const CGBlockInfo &blockInfo) { } // Next, captured variables. - for (BlockDecl::capture_const_iterator ci = blockDecl->capture_begin(), - ce = blockDecl->capture_end(); ci != ce; ++ci) { - const VarDecl *variable = ci->getVariable(); + for (const auto &CI : blockDecl->captures()) { + const VarDecl *variable = CI.getVariable(); const CGBlockInfo::Capture &capture = blockInfo.getCapture(variable); // Ignore constant captures. @@ -761,7 +757,7 @@ llvm::Value *CodeGenFunction::EmitBlockLiteral(const CGBlockInfo &blockInfo) { // Compute the address of the thing we're going to move into the // block literal. llvm::Value *src; - if (BlockInfo && ci->isNested()) { + if (BlockInfo && CI.isNested()) { // We need to use the capture from the enclosing block. const CGBlockInfo::Capture &enclosingCapture = BlockInfo->getCapture(variable); @@ -780,8 +776,8 @@ llvm::Value *CodeGenFunction::EmitBlockLiteral(const CGBlockInfo &blockInfo) { // emission. src = LocalDeclMap.lookup(variable); if (!src) { - DeclRefExpr declRef(const_cast(variable), - /*refersToEnclosing*/ ci->isNested(), type, + DeclRefExpr declRef(const_cast(variable), + /*refersToEnclosing*/ CI.isNested(), type, VK_LValue, SourceLocation()); src = EmitDeclRefLValue(&declRef).getAddress(); } @@ -791,9 +787,9 @@ llvm::Value *CodeGenFunction::EmitBlockLiteral(const CGBlockInfo &blockInfo) { // the block field. There's no need to chase the forwarding // pointer at this point, since we're building something that will // live a shorter life than the stack byref anyway. - if (ci->isByRef()) { + if (CI.isByRef()) { // Get a void* that points to the byref struct. - if (ci->isNested()) + if (CI.isNested()) src = Builder.CreateAlignedLoad(src, align.getQuantity(), "byref.capture"); else @@ -803,7 +799,7 @@ llvm::Value *CodeGenFunction::EmitBlockLiteral(const CGBlockInfo &blockInfo) { Builder.CreateAlignedStore(src, blockField, align.getQuantity()); // If we have a copy constructor, evaluate that into the block field. - } else if (const Expr *copyExpr = ci->getCopyExpr()) { + } else if (const Expr *copyExpr = CI.getCopyExpr()) { if (blockDecl->isConversionFromLambda()) { // If we have a lambda conversion, emit the expression // directly into the block instead. @@ -851,7 +847,7 @@ llvm::Value *CodeGenFunction::EmitBlockLiteral(const CGBlockInfo &blockInfo) { // We use one of these or the other depending on whether the // reference is nested. DeclRefExpr declRef(const_cast(variable), - /*refersToEnclosing*/ ci->isNested(), type, + /*refersToEnclosing*/ CI.isNested(), type, VK_LValue, SourceLocation()); ImplicitCastExpr l2r(ImplicitCastExpr::OnStack, type, CK_LValueToRValue, @@ -862,7 +858,7 @@ llvm::Value *CodeGenFunction::EmitBlockLiteral(const CGBlockInfo &blockInfo) { } // Activate the cleanup if layout pushed one. - if (!ci->isByRef()) { + if (!CI.isByRef()) { EHScopeStack::stable_iterator cleanup = capture.getCleanup(); if (cleanup.isValid()) ActivateCleanupBlock(cleanup, blockInfo.DominatingIP); @@ -1175,9 +1171,8 @@ CodeGenFunction::GenerateBlockFunction(GlobalDecl GD, } // Also force all the constant captures. - for (BlockDecl::capture_const_iterator ci = blockDecl->capture_begin(), - ce = blockDecl->capture_end(); ci != ce; ++ci) { - const VarDecl *variable = ci->getVariable(); + for (const auto &CI : blockDecl->captures()) { + const VarDecl *variable = CI.getVariable(); const CGBlockInfo::Capture &capture = blockInfo.getCapture(variable); if (!capture.isConstant()) continue; @@ -1218,9 +1213,8 @@ CodeGenFunction::GenerateBlockFunction(GlobalDecl GD, // Emit debug information for all the DeclRefExprs. // FIXME: also for 'this' if (CGDebugInfo *DI = getDebugInfo()) { - for (BlockDecl::capture_const_iterator ci = blockDecl->capture_begin(), - ce = blockDecl->capture_end(); ci != ce; ++ci) { - const VarDecl *variable = ci->getVariable(); + for (const auto &CI : blockDecl->captures()) { + const VarDecl *variable = CI.getVariable(); DI->EmitLocation(Builder, variable->getLocation()); if (CGM.getCodeGenOpts().getDebugInfo() @@ -1327,25 +1321,24 @@ CodeGenFunction::GenerateCopyHelperFunction(const CGBlockInfo &blockInfo) { const BlockDecl *blockDecl = blockInfo.getBlockDecl(); - for (BlockDecl::capture_const_iterator ci = blockDecl->capture_begin(), - ce = blockDecl->capture_end(); ci != ce; ++ci) { - const VarDecl *variable = ci->getVariable(); + for (const auto &CI : blockDecl->captures()) { + const VarDecl *variable = CI.getVariable(); QualType type = variable->getType(); const CGBlockInfo::Capture &capture = blockInfo.getCapture(variable); if (capture.isConstant()) continue; - const Expr *copyExpr = ci->getCopyExpr(); + const Expr *copyExpr = CI.getCopyExpr(); BlockFieldFlags flags; bool useARCWeakCopy = false; bool useARCStrongCopy = false; if (copyExpr) { - assert(!ci->isByRef()); + assert(!CI.isByRef()); // don't bother computing flags - } else if (ci->isByRef()) { + } else if (CI.isByRef()) { flags = BLOCK_FIELD_IS_BYREF; if (type.isObjCGCWeak()) flags |= BLOCK_FIELD_IS_WEAK; @@ -1425,7 +1418,7 @@ CodeGenFunction::GenerateCopyHelperFunction(const CGBlockInfo &blockInfo) { }; bool copyCanThrow = false; - if (ci->isByRef() && variable->getType()->getAsCXXRecordDecl()) { + if (CI.isByRef() && variable->getType()->getAsCXXRecordDecl()) { const Expr *copyExpr = CGM.getContext().getBlockVarCopyInits(variable); if (copyExpr) { @@ -1496,9 +1489,8 @@ CodeGenFunction::GenerateDestroyHelperFunction(const CGBlockInfo &blockInfo) { CodeGenFunction::RunCleanupsScope cleanups(*this); - for (BlockDecl::capture_const_iterator ci = blockDecl->capture_begin(), - ce = blockDecl->capture_end(); ci != ce; ++ci) { - const VarDecl *variable = ci->getVariable(); + for (const auto &CI : blockDecl->captures()) { + const VarDecl *variable = CI.getVariable(); QualType type = variable->getType(); const CGBlockInfo::Capture &capture = blockInfo.getCapture(variable); @@ -1510,7 +1502,7 @@ CodeGenFunction::GenerateDestroyHelperFunction(const CGBlockInfo &blockInfo) { bool useARCWeakDestroy = false; bool useARCStrongDestroy = false; - if (ci->isByRef()) { + if (CI.isByRef()) { flags = BLOCK_FIELD_IS_BYREF; if (type.isObjCGCWeak()) flags |= BLOCK_FIELD_IS_WEAK; diff --git a/lib/CodeGen/CGDebugInfo.cpp b/lib/CodeGen/CGDebugInfo.cpp index 2b81b3789e..cfc94430bd 100644 --- a/lib/CodeGen/CGDebugInfo.cpp +++ b/lib/CodeGen/CGDebugInfo.cpp @@ -3031,10 +3031,7 @@ void CGDebugInfo::EmitDeclareOfBlockLiteralArgVariable(const CGBlockInfo &block, } // Variable captures. - for (BlockDecl::capture_const_iterator - i = blockDecl->capture_begin(), e = blockDecl->capture_end(); - i != e; ++i) { - const BlockDecl::Capture &capture = *i; + for (const auto &capture : blockDecl->captures()) { const VarDecl *variable = capture.getVariable(); const CGBlockInfo::Capture &captureInfo = block.getCapture(variable); diff --git a/lib/CodeGen/CGDecl.cpp b/lib/CodeGen/CGDecl.cpp index 4b063c49c7..cf1c36675e 100644 --- a/lib/CodeGen/CGDecl.cpp +++ b/lib/CodeGen/CGDecl.cpp @@ -530,9 +530,8 @@ static bool isAccessedBy(const VarDecl &var, const Stmt *s) { return (ref->getDecl() == &var); if (const BlockExpr *be = dyn_cast(e)) { const BlockDecl *block = be->getBlockDecl(); - for (BlockDecl::capture_const_iterator i = block->capture_begin(), - e = block->capture_end(); i != e; ++i) { - if (i->getVariable() == &var) + for (const auto &I : block->captures()) { + if (I.getVariable() == &var) return true; } } @@ -993,9 +992,8 @@ static bool isCapturedBy(const VarDecl &var, const Expr *e) { if (const BlockExpr *be = dyn_cast(e)) { const BlockDecl *block = be->getBlockDecl(); - for (BlockDecl::capture_const_iterator i = block->capture_begin(), - e = block->capture_end(); i != e; ++i) { - if (i->getVariable() == &var) + for (const auto &I : block->captures()) { + if (I.getVariable() == &var) return true; } diff --git a/lib/CodeGen/CGObjCMac.cpp b/lib/CodeGen/CGObjCMac.cpp index 64b55d21c2..a1d9f18154 100644 --- a/lib/CodeGen/CGObjCMac.cpp +++ b/lib/CodeGen/CGObjCMac.cpp @@ -1961,9 +1961,8 @@ llvm::Constant *CGObjCCommonMac::BuildGCBlockLayout(CodeGenModule &CGM, // to be GC'ed. // Walk the captured variables. - for (BlockDecl::capture_const_iterator ci = blockDecl->capture_begin(), - ce = blockDecl->capture_end(); ci != ce; ++ci) { - const VarDecl *variable = ci->getVariable(); + for (const auto &CI : blockDecl->captures()) { + const VarDecl *variable = CI.getVariable(); QualType type = variable->getType(); const CGBlockInfo::Capture &capture = blockInfo.getCapture(variable); @@ -1974,7 +1973,7 @@ llvm::Constant *CGObjCCommonMac::BuildGCBlockLayout(CodeGenModule &CGM, uint64_t fieldOffset = layout->getElementOffset(capture.getIndex()); // __block variables are passed by their descriptor address. - if (ci->isByRef()) { + if (CI.isByRef()) { IvarsInfo.push_back(GC_IVAR(fieldOffset, /*size in words*/ 1)); continue; } @@ -2474,9 +2473,8 @@ llvm::Constant *CGObjCCommonMac::BuildRCBlockLayout(CodeGenModule &CGM, blockInfo.BlockHeaderForcedGapOffset, blockInfo.BlockHeaderForcedGapSize); // Walk the captured variables. - for (BlockDecl::capture_const_iterator ci = blockDecl->capture_begin(), - ce = blockDecl->capture_end(); ci != ce; ++ci) { - const VarDecl *variable = ci->getVariable(); + for (const auto &CI : blockDecl->captures()) { + const VarDecl *variable = CI.getVariable(); QualType type = variable->getType(); const CGBlockInfo::Capture &capture = blockInfo.getCapture(variable); @@ -2488,17 +2486,17 @@ llvm::Constant *CGObjCCommonMac::BuildRCBlockLayout(CodeGenModule &CGM, CharUnits::fromQuantity(layout->getElementOffset(capture.getIndex())); assert(!type->isArrayType() && "array variable should not be caught"); - if (!ci->isByRef()) + if (!CI.isByRef()) if (const RecordType *record = type->getAs()) { BuildRCBlockVarRecordLayout(record, fieldOffset, hasUnion); continue; } CharUnits fieldSize; - if (ci->isByRef()) + if (CI.isByRef()) fieldSize = CharUnits::fromQuantity(WordSizeInBytes); else fieldSize = CGM.getContext().getTypeSizeInChars(type); - UpdateRunSkipBlockVars(ci->isByRef(), getBlockCaptureLifetime(type, false), + UpdateRunSkipBlockVars(CI.isByRef(), getBlockCaptureLifetime(type, false), fieldOffset, fieldSize); } return getBitmapBlockLayout(false); diff --git a/lib/Rewrite/Frontend/RewriteModernObjC.cpp b/lib/Rewrite/Frontend/RewriteModernObjC.cpp index 93e89a91ad..dfdc0f6340 100644 --- a/lib/Rewrite/Frontend/RewriteModernObjC.cpp +++ b/lib/Rewrite/Frontend/RewriteModernObjC.cpp @@ -5509,11 +5509,10 @@ Stmt *RewriteModernObjC::SynthBlockInitExpr(BlockExpr *Exp, SourceLocation()); bool isNestedCapturedVar = false; if (block) - for (BlockDecl::capture_const_iterator ci = block->capture_begin(), - ce = block->capture_end(); ci != ce; ++ci) { - const VarDecl *variable = ci->getVariable(); - if (variable == ND && ci->isNested()) { - assert (ci->isByRef() && + for (const auto &CI : block->captures()) { + const VarDecl *variable = CI.getVariable(); + if (variable == ND && CI.isNested()) { + assert (CI.isByRef() && "SynthBlockInitExpr - captured block variable is not byref"); isNestedCapturedVar = true; break; diff --git a/lib/Rewrite/Frontend/RewriteObjC.cpp b/lib/Rewrite/Frontend/RewriteObjC.cpp index 4cd71d89f1..96780c045e 100644 --- a/lib/Rewrite/Frontend/RewriteObjC.cpp +++ b/lib/Rewrite/Frontend/RewriteObjC.cpp @@ -4559,11 +4559,10 @@ Stmt *RewriteObjC::SynthBlockInitExpr(BlockExpr *Exp, SourceLocation()); bool isNestedCapturedVar = false; if (block) - for (BlockDecl::capture_const_iterator ci = block->capture_begin(), - ce = block->capture_end(); ci != ce; ++ci) { - const VarDecl *variable = ci->getVariable(); - if (variable == ND && ci->isNested()) { - assert (ci->isByRef() && + for (const auto &CI : block->captures()) { + const VarDecl *variable = CI.getVariable(); + if (variable == ND && CI.isNested()) { + assert (CI.isByRef() && "SynthBlockInitExpr - captured block variable is not byref"); isNestedCapturedVar = true; break; diff --git a/lib/Sema/JumpDiagnostics.cpp b/lib/Sema/JumpDiagnostics.cpp index 43a74e1ad8..1f5d682bba 100644 --- a/lib/Sema/JumpDiagnostics.cpp +++ b/lib/Sema/JumpDiagnostics.cpp @@ -444,9 +444,8 @@ void JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) if (ExprWithCleanups *EWC = dyn_cast(SubStmt)) { for (unsigned i = 0, e = EWC->getNumObjects(); i != e; ++i) { const BlockDecl *BDecl = EWC->getObject(i); - for (BlockDecl::capture_const_iterator ci = BDecl->capture_begin(), - ce = BDecl->capture_end(); ci != ce; ++ci) { - VarDecl *variable = ci->getVariable(); + for (const auto &CI : BDecl->captures()) { + VarDecl *variable = CI.getVariable(); BuildScopeInformation(variable, BDecl, ParentScope); } } diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp index a1ef970ca1..51daf856d5 100644 --- a/lib/Sema/SemaExpr.cpp +++ b/lib/Sema/SemaExpr.cpp @@ -10575,10 +10575,8 @@ ExprResult Sema::ActOnBlockStmtExpr(SourceLocation CaretLoc, // It also gets a branch-protected scope if any of the captured // variables needs destruction. - for (BlockDecl::capture_const_iterator - ci = Result->getBlockDecl()->capture_begin(), - ce = Result->getBlockDecl()->capture_end(); ci != ce; ++ci) { - const VarDecl *var = ci->getVariable(); + for (const auto &CI : Result->getBlockDecl()->captures()) { + const VarDecl *var = CI.getVariable(); if (var->getType().isDestructedType() != QualType::DK_none) { getCurFunction()->setHasBranchProtectedScope(); break; diff --git a/lib/Sema/TreeTransform.h b/lib/Sema/TreeTransform.h index 7195871d94..60dfb13334 100644 --- a/lib/Sema/TreeTransform.h +++ b/lib/Sema/TreeTransform.h @@ -9343,9 +9343,8 @@ TreeTransform::TransformBlockExpr(BlockExpr *E) { // In builds with assertions, make sure that we captured everything we // captured before. if (!SemaRef.getDiagnostics().hasErrorOccurred()) { - for (BlockDecl::capture_iterator i = oldBlock->capture_begin(), - e = oldBlock->capture_end(); i != e; ++i) { - VarDecl *oldCapture = i->getVariable(); + for (const auto &I : oldBlock->captures()) { + VarDecl *oldCapture = I.getVariable(); // Ignore parameter packs. if (isa(oldCapture) && diff --git a/lib/Serialization/ASTWriterDecl.cpp b/lib/Serialization/ASTWriterDecl.cpp index ba5e62a853..e5e0731d1f 100644 --- a/lib/Serialization/ASTWriterDecl.cpp +++ b/lib/Serialization/ASTWriterDecl.cpp @@ -819,9 +819,7 @@ void ASTDeclWriter::VisitBlockDecl(BlockDecl *D) { Record.push_back(D->isConversionFromLambda()); Record.push_back(D->capturesCXXThis()); Record.push_back(D->getNumCaptures()); - for (BlockDecl::capture_iterator - i = D->capture_begin(), e = D->capture_end(); i != e; ++i) { - const BlockDecl::Capture &capture = *i; + for (const auto &capture : D->captures()) { Writer.AddDeclRef(capture.getVariable(), Record); unsigned flags = 0; -- 2.40.0