Author: Benjamin Kramer Date: 2022-03-18T01:25:34+01:00 New Revision: 5d2ce7663b10c107328a4ae0c678165209e64619
URL: https://github.com/llvm/llvm-project/commit/5d2ce7663b10c107328a4ae0c678165209e64619 DIFF: https://github.com/llvm/llvm-project/commit/5d2ce7663b10c107328a4ae0c678165209e64619.diff LOG: Use llvm::append_range instead of push_back loops where applicable. NFCI. Added: Modified: clang/include/clang/ASTMatchers/ASTMatchers.h clang/include/clang/ASTMatchers/ASTMatchersInternal.h clang/include/clang/Analysis/CloneDetection.h clang/include/clang/Tooling/DiagnosticsYaml.h clang/lib/AST/ASTContext.cpp clang/lib/AST/VTableBuilder.cpp clang/lib/Analysis/CFG.cpp clang/lib/CodeGen/CGBlocks.cpp clang/lib/CodeGen/CGCall.cpp clang/lib/CodeGen/CGNonTrivialStruct.cpp clang/lib/CodeGen/CGVTables.cpp clang/lib/CodeGen/CodeGenFunction.cpp clang/lib/CodeGen/CodeGenModule.cpp clang/lib/CodeGen/TargetInfo.cpp clang/lib/Driver/ToolChains/Hexagon.cpp clang/lib/Sema/SemaCUDA.cpp clang/lib/Sema/SemaCodeComplete.cpp clang/lib/Sema/SemaCoroutine.cpp clang/lib/Sema/SemaDecl.cpp clang/lib/Sema/SemaDeclCXX.cpp clang/lib/Sema/SemaOpenMP.cpp clang/lib/Sema/SemaOverload.cpp clang/lib/Sema/SemaTemplateInstantiateDecl.cpp clang/lib/Sema/SemaType.cpp clang/lib/Serialization/ASTReader.cpp clang/lib/Serialization/ASTWriter.cpp clang/lib/Serialization/ASTWriterDecl.cpp llvm/include/llvm/ExecutionEngine/JITLink/MemoryFlags.h Removed: ################################################################################ diff --git a/clang/include/clang/ASTMatchers/ASTMatchers.h b/clang/include/clang/ASTMatchers/ASTMatchers.h index 6664a5bcfe7fb..c16bc5f0eafde 100644 --- a/clang/include/clang/ASTMatchers/ASTMatchers.h +++ b/clang/include/clang/ASTMatchers/ASTMatchers.h @@ -7928,8 +7928,7 @@ AST_MATCHER_P(Stmt, forFunction, internal::Matcher<FunctionDecl>, return true; } } else { - for (const auto &Parent : Finder->getASTContext().getParents(CurNode)) - Stack.push_back(Parent); + llvm::append_range(Stack, Finder->getASTContext().getParents(CurNode)); } } return false; @@ -7987,8 +7986,7 @@ AST_MATCHER_P(Stmt, forCallable, internal::Matcher<Decl>, InnerMatcher) { return true; } } else { - for (const auto &Parent : Finder->getASTContext().getParents(CurNode)) - Stack.push_back(Parent); + llvm::append_range(Stack, Finder->getASTContext().getParents(CurNode)); } } return false; diff --git a/clang/include/clang/ASTMatchers/ASTMatchersInternal.h b/clang/include/clang/ASTMatchers/ASTMatchersInternal.h index 5648c716c539e..49de9a458c3db 100644 --- a/clang/include/clang/ASTMatchers/ASTMatchersInternal.h +++ b/clang/include/clang/ASTMatchers/ASTMatchersInternal.h @@ -132,10 +132,7 @@ struct VariadicFunction { // We also allow calls with an already created array, in case the caller // already had it. ResultT operator()(ArrayRef<ArgT> Args) const { - SmallVector<const ArgT*, 8> InnerArgs; - for (const ArgT &Arg : Args) - InnerArgs.push_back(&Arg); - return Func(InnerArgs); + return Func(llvm::to_vector<8>(llvm::make_pointer_range(Args))); } private: diff --git a/clang/include/clang/Analysis/CloneDetection.h b/clang/include/clang/Analysis/CloneDetection.h index b2911a5b44eb9..ffd496c5c9f65 100644 --- a/clang/include/clang/Analysis/CloneDetection.h +++ b/clang/include/clang/Analysis/CloneDetection.h @@ -208,13 +208,7 @@ class CloneDetector { // The initial assumption is that there is only one clone group and every // statement is a clone of the others. This clone group will then be // split up with the help of the constraints. - CloneGroup AllClones; - AllClones.reserve(Sequences.size()); - for (const auto &C : Sequences) { - AllClones.push_back(C); - } - - Result.push_back(AllClones); + Result.push_back(Sequences); constrainClones(Result, ConstraintList...); } diff --git a/clang/include/clang/Tooling/DiagnosticsYaml.h b/clang/include/clang/Tooling/DiagnosticsYaml.h index 3f257d84f8136..88f81e1f62999 100644 --- a/clang/include/clang/Tooling/DiagnosticsYaml.h +++ b/clang/include/clang/Tooling/DiagnosticsYaml.h @@ -42,8 +42,7 @@ template <> struct MappingTraits<clang::tooling::DiagnosticMessage> { Io.mapOptional("FileOffset", M.FileOffset); std::vector<clang::tooling::Replacement> Fixes; for (auto &Replacements : M.Fix) { - for (auto &Replacement : Replacements.second) - Fixes.push_back(Replacement); + llvm::append_range(Fixes, Replacements.second); } Io.mapRequired("Replacements", Fixes); for (auto &Fix : Fixes) { diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp index 77b21746c83fc..3ba9f40a52a36 100644 --- a/clang/lib/AST/ASTContext.cpp +++ b/clang/lib/AST/ASTContext.cpp @@ -739,8 +739,8 @@ canonicalizeImmediatelyDeclaredConstraint(const ASTContext &C, Expr *IDC, // template<typename... T> concept C = true; // template<C<int> T> struct S; -> constraint is C<{T, int}> NewConverted.push_back(ConstrainedType); - for (auto &Arg : OldConverted.front().pack_elements().drop_front(1)) - NewConverted.push_back(Arg); + llvm::append_range(NewConverted, + OldConverted.front().pack_elements().drop_front(1)); TemplateArgument NewPack(NewConverted); NewConverted.clear(); @@ -752,8 +752,7 @@ canonicalizeImmediatelyDeclaredConstraint(const ASTContext &C, Expr *IDC, "Unexpected first argument kind for immediately-declared " "constraint"); NewConverted.push_back(ConstrainedType); - for (auto &Arg : OldConverted.drop_front(1)) - NewConverted.push_back(Arg); + llvm::append_range(NewConverted, OldConverted.drop_front(1)); } Expr *NewIDC = ConceptSpecializationExpr::Create( C, CSE->getNamedConcept(), NewConverted, nullptr, @@ -2601,8 +2600,7 @@ void ASTContext::DeepCollectObjCIvars(const ObjCInterfaceDecl *OI, if (const ObjCInterfaceDecl *SuperClass = OI->getSuperClass()) DeepCollectObjCIvars(SuperClass, false, Ivars); if (!leafClass) { - for (const auto *I : OI->ivars()) - Ivars.push_back(I); + llvm::append_range(Ivars, OI->ivars()); } else { auto *IDecl = const_cast<ObjCInterfaceDecl *>(OI); for (const ObjCIvarDecl *Iv = IDecl->all_declared_ivar_begin(); Iv; diff --git a/clang/lib/AST/VTableBuilder.cpp b/clang/lib/AST/VTableBuilder.cpp index a483b10842a73..12a709884447b 100644 --- a/clang/lib/AST/VTableBuilder.cpp +++ b/clang/lib/AST/VTableBuilder.cpp @@ -3385,10 +3385,8 @@ static bool rebucketPaths(VPtrInfoVector &Paths) { // sorted vector to implement a multiset to form the buckets. Note that the // ordering is based on pointers, but it doesn't change our output order. The // current algorithm is designed to match MSVC 2012's names. - llvm::SmallVector<std::reference_wrapper<VPtrInfo>, 2> PathsSorted; - PathsSorted.reserve(Paths.size()); - for (auto& P : Paths) - PathsSorted.push_back(*P); + llvm::SmallVector<std::reference_wrapper<VPtrInfo>, 2> PathsSorted( + llvm::make_pointee_range(Paths)); llvm::sort(PathsSorted, [](const VPtrInfo &LHS, const VPtrInfo &RHS) { return LHS.MangledPath < RHS.MangledPath; }); diff --git a/clang/lib/Analysis/CFG.cpp b/clang/lib/Analysis/CFG.cpp index 8246854dc1b51..840a934fd4641 100644 --- a/clang/lib/Analysis/CFG.cpp +++ b/clang/lib/Analysis/CFG.cpp @@ -441,8 +441,7 @@ reverse_children::reverse_children(Stmt *S) { } // Default case for all other statements. - for (Stmt *SubStmt : S->children()) - childrenBuf.push_back(SubStmt); + llvm::append_range(childrenBuf, S->children()); // This needs to be done *after* childrenBuf has been populated. children = childrenBuf; diff --git a/clang/lib/CodeGen/CGBlocks.cpp b/clang/lib/CodeGen/CGBlocks.cpp index abb777456f484..50f5435ddbcdf 100644 --- a/clang/lib/CodeGen/CGBlocks.cpp +++ b/clang/lib/CodeGen/CGBlocks.cpp @@ -1160,8 +1160,7 @@ llvm::Type *CodeGenModule::getGenericBlockLiteralType() { SmallVector<llvm::Type *, 8> StructFields( {IntTy, IntTy, getOpenCLRuntime().getGenericVoidPointerType()}); if (auto *Helper = getTargetCodeGenInfo().getTargetOpenCLBlockHelper()) { - for (auto I : Helper->getCustomFieldTypes()) - StructFields.push_back(I); + llvm::append_range(StructFields, Helper->getCustomFieldTypes()); } GenericBlockLiteralType = llvm::StructType::create( StructFields, "struct.__opencl_block_literal_generic"); diff --git a/clang/lib/CodeGen/CGCall.cpp b/clang/lib/CodeGen/CGCall.cpp index 0b3d1d0b467f0..f80aa630e4aba 100644 --- a/clang/lib/CodeGen/CGCall.cpp +++ b/clang/lib/CodeGen/CGCall.cpp @@ -942,8 +942,7 @@ getTypeExpansion(QualType Ty, const ASTContext &Context) { if (const auto *CXXRD = dyn_cast<CXXRecordDecl>(RD)) { assert(!CXXRD->isDynamicClass() && "cannot expand vtable pointers in dynamic classes"); - for (const CXXBaseSpecifier &BS : CXXRD->bases()) - Bases.push_back(&BS); + llvm::append_range(Bases, llvm::make_pointer_range(CXXRD->bases())); } for (const auto *FD : RD->fields()) { diff --git a/clang/lib/CodeGen/CGNonTrivialStruct.cpp b/clang/lib/CodeGen/CGNonTrivialStruct.cpp index 9b1ae12964aca..0abf39ad1f284 100644 --- a/clang/lib/CodeGen/CGNonTrivialStruct.cpp +++ b/clang/lib/CodeGen/CGNonTrivialStruct.cpp @@ -315,8 +315,7 @@ static const CGFunctionInfo &getFunctionInfo(CodeGenModule &CGM, Ctx, nullptr, SourceLocation(), &Ctx.Idents.get(ValNameStr[I]), ParamTy, ImplicitParamDecl::Other)); - for (auto &P : Params) - Args.push_back(P); + llvm::append_range(Args, Params); return CGM.getTypes().arrangeBuiltinFunctionDeclaration(Ctx.VoidTy, Args); } diff --git a/clang/lib/CodeGen/CGVTables.cpp b/clang/lib/CodeGen/CGVTables.cpp index 536db8dc4b41a..ab8a46b797bab 100644 --- a/clang/lib/CodeGen/CGVTables.cpp +++ b/clang/lib/CodeGen/CGVTables.cpp @@ -400,9 +400,7 @@ void CodeGenFunction::EmitMustTailThunk(GlobalDecl GD, // to translate AST arguments into LLVM IR arguments. For thunks, we know // that the caller prototype more or less matches the callee prototype with // the exception of 'this'. - SmallVector<llvm::Value *, 8> Args; - for (llvm::Argument &A : CurFn->args()) - Args.push_back(&A); + SmallVector<llvm::Value *, 8> Args(llvm::make_pointer_range(CurFn->args())); // Set the adjusted 'this' pointer. const ABIArgInfo &ThisAI = CurFnInfo->arg_begin()->info; diff --git a/clang/lib/CodeGen/CodeGenFunction.cpp b/clang/lib/CodeGen/CodeGenFunction.cpp index dc9bc78a867bf..8dc659afc1968 100644 --- a/clang/lib/CodeGen/CodeGenFunction.cpp +++ b/clang/lib/CodeGen/CodeGenFunction.cpp @@ -1409,8 +1409,7 @@ void CodeGenFunction::GenerateCode(GlobalDecl GD, llvm::Function *Fn, // Save parameters for coroutine function. if (Body && isa_and_nonnull<CoroutineBodyStmt>(Body)) - for (const auto *ParamDecl : FD->parameters()) - FnArgs.push_back(ParamDecl); + llvm::append_range(FnArgs, FD->parameters()); // Generate the body of the function. PGO.assignRegionCounters(GD, CurFn); @@ -2626,9 +2625,8 @@ static void CreateMultiVersionResolverReturn(CodeGenModule &CGM, return; } - llvm::SmallVector<llvm::Value *, 10> Args; - llvm::for_each(Resolver->args(), - [&](llvm::Argument &Arg) { Args.push_back(&Arg); }); + llvm::SmallVector<llvm::Value *, 10> Args( + llvm::make_pointer_range(Resolver->args())); llvm::CallInst *Result = Builder.CreateCall(FuncToReturn, Args); Result->setTailCallKind(llvm::CallInst::TCK_MustTail); diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index 3da51261e2299..d07a4770a2715 100644 --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -2508,8 +2508,8 @@ void CodeGenModule::EmitDeferred() { // Note we should not clear CUDADeviceVarODRUsedByHost since it is still // needed for further handling. if (getLangOpts().CUDA && getLangOpts().CUDAIsDevice) - for (const auto *V : getContext().CUDADeviceVarODRUsedByHost) - DeferredDeclsToEmit.push_back(V); + llvm::append_range(DeferredDeclsToEmit, + getContext().CUDADeviceVarODRUsedByHost); // Stop if we're out of both deferred vtables and deferred declarations. if (DeferredDeclsToEmit.empty()) diff --git a/clang/lib/CodeGen/TargetInfo.cpp b/clang/lib/CodeGen/TargetInfo.cpp index de4a6f610867b..915ffca27bd1c 100644 --- a/clang/lib/CodeGen/TargetInfo.cpp +++ b/clang/lib/CodeGen/TargetInfo.cpp @@ -11463,21 +11463,17 @@ TargetCodeGenInfo::createEnqueuedBlockKernel(CodeGenFunction &CGF, llvm::Function *Invoke, llvm::Type *BlockTy) const { auto *InvokeFT = Invoke->getFunctionType(); - llvm::SmallVector<llvm::Type *, 2> ArgTys; - for (auto &P : InvokeFT->params()) - ArgTys.push_back(P); auto &C = CGF.getLLVMContext(); std::string Name = Invoke->getName().str() + "_kernel"; - auto *FT = llvm::FunctionType::get(llvm::Type::getVoidTy(C), ArgTys, false); + auto *FT = llvm::FunctionType::get(llvm::Type::getVoidTy(C), + InvokeFT->params(), false); auto *F = llvm::Function::Create(FT, llvm::GlobalValue::ExternalLinkage, Name, &CGF.CGM.getModule()); auto IP = CGF.Builder.saveIP(); auto *BB = llvm::BasicBlock::Create(C, "entry", F); auto &Builder = CGF.Builder; Builder.SetInsertPoint(BB); - llvm::SmallVector<llvm::Value *, 2> Args; - for (auto &A : F->args()) - Args.push_back(&A); + llvm::SmallVector<llvm::Value *, 2> Args(llvm::make_pointer_range(F->args())); llvm::CallInst *call = Builder.CreateCall(Invoke, Args); call->setCallingConv(Invoke->getCallingConv()); Builder.CreateRetVoid(); diff --git a/clang/lib/Driver/ToolChains/Hexagon.cpp b/clang/lib/Driver/ToolChains/Hexagon.cpp index e772122f5ff5e..dceb234ce18ea 100644 --- a/clang/lib/Driver/ToolChains/Hexagon.cpp +++ b/clang/lib/Driver/ToolChains/Hexagon.cpp @@ -551,8 +551,7 @@ void HexagonToolChain::getHexagonLibraryPaths(const ArgList &Args, // -L Args //---------------------------------------------------------------------------- for (Arg *A : Args.filtered(options::OPT_L)) - for (const char *Value : A->getValues()) - LibPaths.push_back(Value); + llvm::append_range(LibPaths, A->getValues()); //---------------------------------------------------------------------------- // Other standard paths diff --git a/clang/lib/Sema/SemaCUDA.cpp b/clang/lib/Sema/SemaCUDA.cpp index e4e34d687dd2b..92785514e1048 100644 --- a/clang/lib/Sema/SemaCUDA.cpp +++ b/clang/lib/Sema/SemaCUDA.cpp @@ -355,9 +355,7 @@ bool Sema::inferCUDATargetForImplicitSpecialMember(CXXRecordDecl *ClassDecl, } if (!ClassDecl->isAbstract()) { - for (const auto &VB : ClassDecl->vbases()) { - Bases.push_back(&VB); - } + llvm::append_range(Bases, llvm::make_pointer_range(ClassDecl->vbases())); } for (const auto *B : Bases) { diff --git a/clang/lib/Sema/SemaCodeComplete.cpp b/clang/lib/Sema/SemaCodeComplete.cpp index ba99f18996ada..9d295941234f7 100644 --- a/clang/lib/Sema/SemaCodeComplete.cpp +++ b/clang/lib/Sema/SemaCodeComplete.cpp @@ -9505,8 +9505,7 @@ void Sema::CodeCompleteObjCMethodDecl(Scope *S, Optional<bool> IsInstanceMethod, IFace = Category->getClassInterface(); if (IFace) - for (auto *Cat : IFace->visible_categories()) - Containers.push_back(Cat); + llvm::append_range(Containers, IFace->visible_categories()); if (IsInstanceMethod) { for (unsigned I = 0, N = Containers.size(); I != N; ++I) diff --git a/clang/lib/Sema/SemaCoroutine.cpp b/clang/lib/Sema/SemaCoroutine.cpp index a7375f0909b89..f60bc807e080b 100644 --- a/clang/lib/Sema/SemaCoroutine.cpp +++ b/clang/lib/Sema/SemaCoroutine.cpp @@ -1390,8 +1390,7 @@ bool CoroutineStmtBuilder::makeNewAndDeleteExpr() { return false; SmallVector<Expr *, 2> NewArgs(1, FrameSize); - for (auto Arg : PlacementArgs) - NewArgs.push_back(Arg); + llvm::append_range(NewArgs, PlacementArgs); ExprResult NewExpr = S.BuildCallExpr(S.getCurScope(), NewRef.get(), Loc, NewArgs, Loc); diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index fa086ae0f6126..1c4cd616c46d8 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -9126,8 +9126,7 @@ Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, Diag(D.getIdentifierLoc(), diag::err_function_decl_cmse_ns_call); SmallVector<TemplateParameterList *, 4> TemplateParamLists; - for (TemplateParameterList *TPL : TemplateParamListsRef) - TemplateParamLists.push_back(TPL); + llvm::append_range(TemplateParamLists, TemplateParamListsRef); if (TemplateParameterList *Invented = D.getInventedTemplateParameterList()) { if (!TemplateParamLists.empty() && Invented->getDepth() == TemplateParamLists.back()->getDepth()) diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index a845d60f6d880..2a944913be391 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -14751,8 +14751,7 @@ static void checkMoveAssignmentForRepeatedMove(Sema &S, CXXRecordDecl *Class, continue; // We're going to move the base classes of Base. Add them to the list. - for (auto &BI : Base->bases()) - Worklist.push_back(&BI); + llvm::append_range(Worklist, llvm::make_pointer_range(Base->bases())); } } } @@ -18295,8 +18294,7 @@ void Sema::ActOnStartFunctionDeclarationDeclarator( } if (ExplicitParams) { Info.AutoTemplateParameterDepth = ExplicitParams->getDepth(); - for (NamedDecl *Param : *ExplicitParams) - Info.TemplateParams.push_back(Param); + llvm::append_range(Info.TemplateParams, *ExplicitParams); Info.NumExplicitTemplateParams = ExplicitParams->size(); } else { Info.AutoTemplateParameterDepth = TemplateParameterDepth; diff --git a/clang/lib/Sema/SemaOpenMP.cpp b/clang/lib/Sema/SemaOpenMP.cpp index a798411befa16..8e8535a0f98f6 100644 --- a/clang/lib/Sema/SemaOpenMP.cpp +++ b/clang/lib/Sema/SemaOpenMP.cpp @@ -3279,8 +3279,7 @@ void Sema::ActOnOpenMPAssumesDirective(SourceLocation Loc, continue; if (auto *CTD = dyn_cast<ClassTemplateDecl>(SubDC)) { DeclContexts.push_back(CTD->getTemplatedDecl()); - for (auto *S : CTD->specializations()) - DeclContexts.push_back(S); + llvm::append_range(DeclContexts, CTD->specializations()); continue; } if (auto *DC = dyn_cast<DeclContext>(SubDC)) @@ -13829,8 +13828,8 @@ bool Sema::checkTransformableLoopNest( llvm_unreachable("Unhandled loop transformation"); if (!DependentPreInits) return; - for (Decl *C : cast<DeclStmt>(DependentPreInits)->getDeclGroup()) - OriginalInits.back().push_back(C); + llvm::append_range(OriginalInits.back(), + cast<DeclStmt>(DependentPreInits)->getDeclGroup()); }); assert(OriginalInits.back().empty() && "No preinit after innermost loop"); OriginalInits.pop_back(); diff --git a/clang/lib/Sema/SemaOverload.cpp b/clang/lib/Sema/SemaOverload.cpp index fb071eee7c06c..c802bc7fd85c8 100644 --- a/clang/lib/Sema/SemaOverload.cpp +++ b/clang/lib/Sema/SemaOverload.cpp @@ -14353,7 +14353,7 @@ ExprResult Sema::BuildCallToMemberFunction(Scope *S, Expr *MemExprE, if (!AllowRecovery) return ExprError(); std::vector<Expr *> SubExprs = {MemExprE}; - llvm::for_each(Args, [&SubExprs](Expr *E) { SubExprs.push_back(E); }); + llvm::append_range(SubExprs, Args); return CreateRecoveryExpr(MemExprE->getBeginLoc(), RParenLoc, SubExprs, Type); }; diff --git a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp index aaee2d49c921c..ec993914595f3 100644 --- a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp +++ b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp @@ -520,8 +520,7 @@ static void instantiateOMPDeclareVariantAttr( continue; NeedDevicePtrExprs.push_back(ER.get()); } - for (auto A : Attr.appendArgs()) - AppendArgs.push_back(A); + llvm::append_range(AppendArgs, Attr.appendArgs()); S.ActOnOpenMPDeclareVariantDirective( FD, E, TI, NothingExprs, NeedDevicePtrExprs, AppendArgs, SourceLocation(), diff --git a/clang/lib/Sema/SemaType.cpp b/clang/lib/Sema/SemaType.cpp index d7bed132fd801..ad38738d4daba 100644 --- a/clang/lib/Sema/SemaType.cpp +++ b/clang/lib/Sema/SemaType.cpp @@ -236,8 +236,8 @@ namespace { if (hasSavedAttrs) return; DeclSpec &spec = getMutableDeclSpec(); - for (ParsedAttr &AL : spec.getAttributes()) - savedAttrs.push_back(&AL); + llvm::append_range(savedAttrs, + llvm::make_pointer_range(spec.getAttributes())); trivial &= savedAttrs.empty(); hasSavedAttrs = true; } diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp index 3552c45a3e0f5..e6b6e1fb51857 100644 --- a/clang/lib/Serialization/ASTReader.cpp +++ b/clang/lib/Serialization/ASTReader.cpp @@ -10612,9 +10612,8 @@ void ASTReader::diagnoseOdrViolations() { ExpandedList.push_back(&TA); continue; } - for (const TemplateArgument &PackTA : TA.getPackAsArray()) { - ExpandedList.push_back(&PackTA); - } + llvm::append_range(ExpandedList, llvm::make_pointer_range( + TA.getPackAsArray())); } return ExpandedList; }; diff --git a/clang/lib/Serialization/ASTWriter.cpp b/clang/lib/Serialization/ASTWriter.cpp index e3380386aadd2..01381b0bd6e01 100644 --- a/clang/lib/Serialization/ASTWriter.cpp +++ b/clang/lib/Serialization/ASTWriter.cpp @@ -1317,8 +1317,7 @@ void ASTWriter::WriteControlBlock(Preprocessor &PP, ASTContext &Context, Record.push_back(M.Signature ? 0 : M.File->getSize()); Record.push_back(M.Signature ? 0 : getTimestampForOutput(M.File)); - for (auto I : M.Signature) - Record.push_back(I); + llvm::append_range(Record, M.Signature); AddString(M.ModuleName, Record); AddPath(M.FileName, Record); @@ -3702,8 +3701,7 @@ class ASTDeclContextNameLookupTrait { data_type ImportData(const reader::ASTDeclContextNameLookupTrait::data_type &FromReader) { unsigned Start = DeclIDs.size(); - for (auto ID : FromReader) - DeclIDs.push_back(ID); + llvm::append_range(DeclIDs, FromReader); return std::make_pair(Start, DeclIDs.size()); } @@ -5912,8 +5910,7 @@ void ASTWriter::AddedVisibleDecl(const DeclContext *DC, const Decl *D) { // We're adding a visible declaration to a predefined decl context. Ensure // that we write out all of its lookup results so we don't get a nasty // surprise when we try to emit its lookup table. - for (auto *Child : DC->decls()) - DeclsToEmitEvenIfUnreferenced.push_back(Child); + llvm::append_range(DeclsToEmitEvenIfUnreferenced, DC->decls()); } DeclsToEmitEvenIfUnreferenced.push_back(D); } diff --git a/clang/lib/Serialization/ASTWriterDecl.cpp b/clang/lib/Serialization/ASTWriterDecl.cpp index 06cb60823db63..f2f9d39b1fffb 100644 --- a/clang/lib/Serialization/ASTWriterDecl.cpp +++ b/clang/lib/Serialization/ASTWriterDecl.cpp @@ -962,8 +962,7 @@ void ASTDeclWriter::VisitMSGuidDecl(MSGuidDecl *D) { Record.push_back(Parts.Part1); Record.push_back(Parts.Part2); Record.push_back(Parts.Part3); - for (auto C : Parts.Part4And5) - Record.push_back(C); + Record.append(std::begin(Parts.Part4And5), std::end(Parts.Part4And5)); Code = serialization::DECL_MS_GUID; } diff --git a/llvm/include/llvm/ExecutionEngine/JITLink/MemoryFlags.h b/llvm/include/llvm/ExecutionEngine/JITLink/MemoryFlags.h index e9771319ef06a..a18098e5a1a92 100644 --- a/llvm/include/llvm/ExecutionEngine/JITLink/MemoryFlags.h +++ b/llvm/include/llvm/ExecutionEngine/JITLink/MemoryFlags.h @@ -152,13 +152,9 @@ template <typename T> class AllocGroupSmallMap { using iterator = typename VectorTy::iterator; AllocGroupSmallMap() = default; - AllocGroupSmallMap(std::initializer_list<std::pair<AllocGroup, T>> Inits) { - Elems.reserve(Inits.size()); - for (const auto &E : Inits) - Elems.push_back(E); - llvm::sort(Elems, [](const ElemT &LHS, const ElemT &RHS) { - return LHS.first < RHS.first; - }); + AllocGroupSmallMap(std::initializer_list<std::pair<AllocGroup, T>> Inits) + : Elems(Inits) { + llvm::sort(Elems, llvm::less_first()); } iterator begin() { return Elems.begin(); } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits