r218938 - Driver: Use pointee_iterator rather than iterating over unique_ptrs

Justin Bogner mail at justinbogner.com
Thu Oct 2 18:04:53 PDT 2014


Author: bogner
Date: Thu Oct  2 20:04:53 2014
New Revision: 218938

URL: http://llvm.org/viewvc/llvm-project?rev=218938&view=rev
Log:
Driver: Use pointee_iterator rather than iterating over unique_ptrs

There's probably never a good reason to iterate over unique_ptrs. This
lets us use range-for and say Job.foo instead of (*it)->foo in a few
places.

Modified:
    cfe/trunk/include/clang/Driver/Job.h
    cfe/trunk/lib/Driver/Compilation.cpp
    cfe/trunk/lib/Driver/Driver.cpp
    cfe/trunk/lib/Driver/Job.cpp
    cfe/trunk/lib/Frontend/CreateInvocationFromCommandLine.cpp
    cfe/trunk/lib/Tooling/CompilationDatabase.cpp
    cfe/trunk/lib/Tooling/Tooling.cpp

Modified: cfe/trunk/include/clang/Driver/Job.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Job.h?rev=218938&r1=218937&r2=218938&view=diff
==============================================================================
--- cfe/trunk/include/clang/Driver/Job.h (original)
+++ cfe/trunk/include/clang/Driver/Job.h Thu Oct  2 20:04:53 2014
@@ -13,6 +13,7 @@
 #include "clang/Basic/LLVM.h"
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/Option/Option.h"
+#include "llvm/ADT/iterator.h"
 #include <memory>
 
 namespace llvm {
@@ -158,8 +159,8 @@ class JobList : public Job {
 public:
   typedef SmallVector<std::unique_ptr<Job>, 4> list_type;
   typedef list_type::size_type size_type;
-  typedef list_type::iterator iterator;
-  typedef list_type::const_iterator const_iterator;
+  typedef llvm::pointee_iterator<list_type::iterator> iterator;
+  typedef llvm::pointee_iterator<list_type::const_iterator> const_iterator;
 
 private:
   list_type Jobs;

Modified: cfe/trunk/lib/Driver/Compilation.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Compilation.cpp?rev=218938&r1=218937&r2=218938&view=diff
==============================================================================
--- cfe/trunk/lib/Driver/Compilation.cpp (original)
+++ cfe/trunk/lib/Driver/Compilation.cpp Thu Oct  2 20:04:53 2014
@@ -202,9 +202,8 @@ void Compilation::ExecuteJob(const Job &
       FailingCommands.push_back(std::make_pair(Res, FailingCommand));
   } else {
     const JobList *Jobs = cast<JobList>(&J);
-    for (JobList::const_iterator it = Jobs->begin(), ie = Jobs->end();
-         it != ie; ++it)
-      ExecuteJob(**it, FailingCommands);
+    for (const auto &Job : *Jobs)
+      ExecuteJob(Job, FailingCommands);
   }
 }
 

Modified: cfe/trunk/lib/Driver/Driver.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Driver.cpp?rev=218938&r1=218937&r2=218938&view=diff
==============================================================================
--- cfe/trunk/lib/Driver/Driver.cpp (original)
+++ cfe/trunk/lib/Driver/Driver.cpp Thu Oct  2 20:04:53 2014
@@ -578,8 +578,8 @@ void Driver::generateCompilationDiagnost
 
 void Driver::setUpResponseFiles(Compilation &C, Job &J) {
   if (JobList *Jobs = dyn_cast<JobList>(&J)) {
-    for (JobList::iterator I = Jobs->begin(), E = Jobs->end(); I != E; ++I)
-      setUpResponseFiles(C, **I);
+    for (auto &Job : *Jobs)
+      setUpResponseFiles(C, Job);
     return;
   }
 

Modified: cfe/trunk/lib/Driver/Job.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Job.cpp?rev=218938&r1=218937&r2=218938&view=diff
==============================================================================
--- cfe/trunk/lib/Driver/Job.cpp (original)
+++ cfe/trunk/lib/Driver/Job.cpp Thu Oct  2 20:04:53 2014
@@ -287,8 +287,8 @@ JobList::JobList() : Job(JobListClass) {
 
 void JobList::Print(raw_ostream &OS, const char *Terminator, bool Quote,
                     bool CrashReport) const {
-  for (const_iterator it = begin(), ie = end(); it != ie; ++it)
-    (*it)->Print(OS, Terminator, Quote, CrashReport);
+  for (const auto &Job : *this)
+    Job.Print(OS, Terminator, Quote, CrashReport);
 }
 
 void JobList::clear() { Jobs.clear(); }

Modified: cfe/trunk/lib/Frontend/CreateInvocationFromCommandLine.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CreateInvocationFromCommandLine.cpp?rev=218938&r1=218937&r2=218938&view=diff
==============================================================================
--- cfe/trunk/lib/Frontend/CreateInvocationFromCommandLine.cpp (original)
+++ cfe/trunk/lib/Frontend/CreateInvocationFromCommandLine.cpp Thu Oct  2 20:04:53 2014
@@ -63,7 +63,7 @@ clang::createInvocationFromCommandLine(A
   // We expect to get back exactly one command job, if we didn't something
   // failed.
   const driver::JobList &Jobs = C->getJobs();
-  if (Jobs.size() != 1 || !isa<driver::Command>(**Jobs.begin())) {
+  if (Jobs.size() != 1 || !isa<driver::Command>(*Jobs.begin())) {
     SmallString<256> Msg;
     llvm::raw_svector_ostream OS(Msg);
     Jobs.Print(OS, "; ", true);
@@ -71,7 +71,7 @@ clang::createInvocationFromCommandLine(A
     return nullptr;
   }
 
-  const driver::Command &Cmd = cast<driver::Command>(**Jobs.begin());
+  const driver::Command &Cmd = cast<driver::Command>(*Jobs.begin());
   if (StringRef(Cmd.getCreator().getName()) != "clang") {
     Diags->Report(diag::err_fe_expected_clang_command);
     return nullptr;

Modified: cfe/trunk/lib/Tooling/CompilationDatabase.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Tooling/CompilationDatabase.cpp?rev=218938&r1=218937&r2=218938&view=diff
==============================================================================
--- cfe/trunk/lib/Tooling/CompilationDatabase.cpp (original)
+++ cfe/trunk/lib/Tooling/CompilationDatabase.cpp Thu Oct  2 20:04:53 2014
@@ -249,10 +249,9 @@ static bool stripPositionalArgs(std::vec
 
   CompileJobAnalyzer CompileAnalyzer;
 
-  for (driver::JobList::const_iterator I = Jobs.begin(), E = Jobs.end(); I != E;
-       ++I) {
-    if ((*I)->getKind() == driver::Job::CommandClass) {
-      const driver::Command &Cmd = cast<driver::Command>(**I);
+  for (const auto &Job : Jobs) {
+    if (Job.getKind() == driver::Job::CommandClass) {
+      const driver::Command &Cmd = cast<driver::Command>(Job);
       // Collect only for Assemble jobs. If we do all jobs we get duplicates
       // since Link jobs point to Assemble jobs as inputs.
       if (Cmd.getSource().getKind() == driver::Action::AssembleJobClass)

Modified: cfe/trunk/lib/Tooling/Tooling.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Tooling/Tooling.cpp?rev=218938&r1=218937&r2=218938&view=diff
==============================================================================
--- cfe/trunk/lib/Tooling/Tooling.cpp (original)
+++ cfe/trunk/lib/Tooling/Tooling.cpp Thu Oct  2 20:04:53 2014
@@ -69,7 +69,7 @@ static const llvm::opt::ArgStringList *g
   // We expect to get back exactly one Command job, if we didn't something
   // failed. Extract that job from the Compilation.
   const clang::driver::JobList &Jobs = Compilation->getJobs();
-  if (Jobs.size() != 1 || !isa<clang::driver::Command>(**Jobs.begin())) {
+  if (Jobs.size() != 1 || !isa<clang::driver::Command>(*Jobs.begin())) {
     SmallString<256> error_msg;
     llvm::raw_svector_ostream error_stream(error_msg);
     Jobs.Print(error_stream, "; ", true);
@@ -80,7 +80,7 @@ static const llvm::opt::ArgStringList *g
 
   // The one job we find should be to invoke clang again.
   const clang::driver::Command &Cmd =
-      cast<clang::driver::Command>(**Jobs.begin());
+      cast<clang::driver::Command>(*Jobs.begin());
   if (StringRef(Cmd.getCreator().getName()) != "clang") {
     Diagnostics->Report(clang::diag::err_fe_expected_clang_command);
     return nullptr;





More information about the cfe-commits mailing list