Index: ../llvm/include/llvm/ADT/STLExtras.h =================================================================== --- ../llvm/include/llvm/ADT/STLExtras.h +++ ../llvm/include/llvm/ADT/STLExtras.h @@ -810,6 +810,13 @@ C.clear(); } +/// Provide wrappers to std::for_each which take ranges instead of having to +/// pass begin/end explicitly. +template +UnaryPredicate for_each(R &&Range, UnaryPredicate P) { + return std::for_each(std::begin(Range), std::end(Range), P); +} + /// Provide wrappers to std::all_of which take ranges instead of having to pass /// begin/end explicitly. template Index: ../llvm/lib/LTO/LTOCodeGenerator.cpp =================================================================== --- ../llvm/lib/LTO/LTOCodeGenerator.cpp +++ ../llvm/lib/LTO/LTOCodeGenerator.cpp @@ -471,11 +471,9 @@ GV.setLinkage(I->second); }; - std::for_each(MergedModule->begin(), MergedModule->end(), externalize); - std::for_each(MergedModule->global_begin(), MergedModule->global_end(), - externalize); - std::for_each(MergedModule->alias_begin(), MergedModule->alias_end(), - externalize); + llvm::for_each(MergedModule->functions(), externalize); + llvm::for_each(MergedModule->globals(), externalize); + llvm::for_each(MergedModule->aliases(), externalize); } void LTOCodeGenerator::verifyMergedModuleOnce() { Index: ../llvm/lib/Target/Hexagon/HexagonVectorLoopCarriedReuse.cpp =================================================================== --- ../llvm/lib/Target/Hexagon/HexagonVectorLoopCarriedReuse.cpp +++ ../llvm/lib/Target/Hexagon/HexagonVectorLoopCarriedReuse.cpp @@ -551,8 +551,7 @@ Changed = true; Continue = true; } - std::for_each(Dependences.begin(), Dependences.end(), - std::default_delete()); + llvm::for_each(Dependences, std::default_delete()); } while (Continue); return Changed; } Index: ../llvm/lib/Transforms/Utils/SplitModule.cpp =================================================================== --- ../llvm/lib/Transforms/Utils/SplitModule.cpp +++ ../llvm/lib/Transforms/Utils/SplitModule.cpp @@ -125,9 +125,9 @@ addAllGlobalValueUsers(GVtoClusterMap, &GV, &GV); }; - std::for_each(M->begin(), M->end(), recordGVSet); - std::for_each(M->global_begin(), M->global_end(), recordGVSet); - std::for_each(M->alias_begin(), M->alias_end(), recordGVSet); + llvm::for_each(M->functions(), recordGVSet); + llvm::for_each(M->globals(), recordGVSet); + llvm::for_each(M->aliases(), recordGVSet); // Assigned all GVs to merged clusters while balancing number of objects in // each. Index: ../llvm/tools/llvm-cxxdump/llvm-cxxdump.cpp =================================================================== --- ../llvm/tools/llvm-cxxdump/llvm-cxxdump.cpp +++ ../llvm/tools/llvm-cxxdump/llvm-cxxdump.cpp @@ -549,8 +549,7 @@ if (opts::InputFilenames.size() == 0) opts::InputFilenames.push_back("-"); - std::for_each(opts::InputFilenames.begin(), opts::InputFilenames.end(), - dumpInput); + llvm::for_each(opts::InputFilenames, dumpInput); return EXIT_SUCCESS; } Index: ../llvm/tools/llvm-mcmarkup/llvm-mcmarkup.cpp =================================================================== --- ../llvm/tools/llvm-mcmarkup/llvm-mcmarkup.cpp +++ ../llvm/tools/llvm-mcmarkup/llvm-mcmarkup.cpp @@ -220,7 +220,6 @@ if (InputFilenames.size() == 0) InputFilenames.push_back("-"); - std::for_each(InputFilenames.begin(), InputFilenames.end(), - parseMCMarkup); + llvm::for_each(InputFilenames, parseMCMarkup); return 0; } Index: ../llvm/tools/llvm-nm/llvm-nm.cpp =================================================================== --- ../llvm/tools/llvm-nm/llvm-nm.cpp +++ ../llvm/tools/llvm-nm/llvm-nm.cpp @@ -1971,8 +1971,7 @@ if (NoDyldInfo && (AddDyldInfo || DyldInfoOnly)) error("-no-dyldinfo can't be used with -add-dyldinfo or -dyldinfo-only"); - std::for_each(InputFilenames.begin(), InputFilenames.end(), - dumpSymbolNamesFromFile); + llvm::for_each(InputFilenames, dumpSymbolNamesFromFile); if (HadError) return 1; Index: ../llvm/tools/llvm-objdump/llvm-objdump.cpp =================================================================== --- ../llvm/tools/llvm-objdump/llvm-objdump.cpp +++ ../llvm/tools/llvm-objdump/llvm-objdump.cpp @@ -2186,8 +2186,7 @@ return 2; } - std::for_each(InputFilenames.begin(), InputFilenames.end(), - DumpInput); + llvm::for_each(InputFilenames, DumpInput); return EXIT_SUCCESS; } Index: ../llvm/tools/llvm-pdbutil/llvm-pdbutil.cpp =================================================================== --- ../llvm/tools/llvm-pdbutil/llvm-pdbutil.cpp +++ ../llvm/tools/llvm-pdbutil/llvm-pdbutil.cpp @@ -1202,14 +1202,11 @@ opts::pretty::ExcludeCompilands.push_back( "d:\\\\th.obj.x86fre\\\\minkernel"); } - std::for_each(opts::pretty::InputFilenames.begin(), - opts::pretty::InputFilenames.end(), dumpPretty); + llvm::for_each(opts::pretty::InputFilenames, dumpPretty); } else if (opts::DumpSubcommand) { - std::for_each(opts::dump::InputFilenames.begin(), - opts::dump::InputFilenames.end(), dumpRaw); + llvm::for_each(opts::dump::InputFilenames, dumpRaw); } else if (opts::BytesSubcommand) { - std::for_each(opts::bytes::InputFilenames.begin(), - opts::bytes::InputFilenames.end(), dumpBytes); + llvm::for_each(opts::bytes::InputFilenames, dumpBytes); } else if (opts::DiffSubcommand) { for (StringRef S : opts::diff::RawModiEquivalences) { StringRef Left; Index: ../llvm/tools/llvm-readobj/llvm-readobj.cpp =================================================================== --- ../llvm/tools/llvm-readobj/llvm-readobj.cpp +++ ../llvm/tools/llvm-readobj/llvm-readobj.cpp @@ -569,8 +569,7 @@ if (opts::InputFilenames.size() == 0) opts::InputFilenames.push_back("-"); - std::for_each(opts::InputFilenames.begin(), opts::InputFilenames.end(), - dumpInput); + llvm::for_each(opts::InputFilenames, dumpInput); if (opts::CodeViewMergedTypes) { ScopedPrinter W(outs()); Index: ../llvm/tools/llvm-size/llvm-size.cpp =================================================================== --- ../llvm/tools/llvm-size/llvm-size.cpp +++ ../llvm/tools/llvm-size/llvm-size.cpp @@ -883,8 +883,7 @@ InputFilenames.push_back("a.out"); MoreThanOneFile = InputFilenames.size() > 1; - std::for_each(InputFilenames.begin(), InputFilenames.end(), - printFileSectionSizes); + llvm::for_each(InputFilenames, printFileSectionSizes); if (OutputFormat == berkeley && TotalSizes) printBerkelyTotals(); Index: ../llvm/unittests/ADT/STLExtrasTest.cpp =================================================================== --- ../llvm/unittests/ADT/STLExtrasTest.cpp +++ ../llvm/unittests/ADT/STLExtrasTest.cpp @@ -255,6 +255,14 @@ EXPECT_EQ(1, count(v, 4)); } +TEST(STLExtrasTest, for_each) { + std::vector v{ 0, 1, 2, 3, 4 }; + int count = 0; + + llvm::for_each(v, [&count](int) { ++count; }); + EXPECT_EQ(5, count); +} + TEST(STLExtrasTest, ToVector) { std::vector v = {'a', 'b', 'c'}; auto Enumerated = to_vector<4>(enumerate(v));