[lld] r315125 - Simplify LinkerScript::addOrphanSections. NFCI.

Rui Ueyama via llvm-commits llvm-commits at lists.llvm.org
Fri Oct 6 16:06:55 PDT 2017


Author: ruiu
Date: Fri Oct  6 16:06:55 2017
New Revision: 315125

URL: http://llvm.org/viewvc/llvm-project?rev=315125&view=rev
Log:
Simplify LinkerScript::addOrphanSections. NFCI.

This patch moves a std::find to a new function. It also removes
the following piece of code. I believe it should be fine because all
tests still pass.

  unsigned Index = std::distance(Opt.Commands.begin(), I);
  assert(Sec->SectionIndex == INT_MAX || Sec->SectionIndex == Index);
  Sec->SectionIndex = Index;

Modified:
    lld/trunk/ELF/LinkerScript.cpp

Modified: lld/trunk/ELF/LinkerScript.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/LinkerScript.cpp?rev=315125&r1=315124&r2=315125&view=diff
==============================================================================
--- lld/trunk/ELF/LinkerScript.cpp (original)
+++ lld/trunk/ELF/LinkerScript.cpp Fri Oct  6 16:06:55 2017
@@ -443,29 +443,32 @@ void LinkerScript::fabricateDefaultComma
                       make<SymbolAssignment>(".", Expr, ""));
 }
 
+static OutputSection *findByName(ArrayRef<BaseCommand *> Vec,
+                                 StringRef Name) {
+  for (BaseCommand *Base : Vec)
+    if (auto *Sec = dyn_cast<OutputSection>(Base))
+      if (Sec->Name == Name)
+        return Sec;
+  return nullptr;
+}
+
 // Add sections that didn't match any sections command.
 void LinkerScript::addOrphanSections(OutputSectionFactory &Factory) {
-  unsigned NumCommands = Opt.Commands.size();
+  unsigned End = Opt.Commands.size();
+
   for (InputSectionBase *S : InputSections) {
     if (!S->Live || S->Parent)
       continue;
+
     StringRef Name = getOutputSectionName(S->Name);
-    auto End = Opt.Commands.begin() + NumCommands;
-    auto I = std::find_if(Opt.Commands.begin(), End, [&](BaseCommand *Base) {
-      if (auto *Sec = dyn_cast<OutputSection>(Base))
-        return Sec->Name == Name;
-      return false;
-    });
     log(toString(S) + " is being placed in '" + Name + "'");
-    if (I == End) {
+
+    if (OutputSection *Sec = findByName(
+            makeArrayRef(Opt.Commands).slice(0, End), Name)) {
+      Factory.addInputSec(S, Name, Sec);
+    } else {
       Factory.addInputSec(S, Name, nullptr);
       assert(S->getOutputSection()->SectionIndex == INT_MAX);
-    } else {
-      OutputSection *Sec = cast<OutputSection>(*I);
-      Factory.addInputSec(S, Name, Sec);
-      unsigned Index = std::distance(Opt.Commands.begin(), I);
-      assert(Sec->SectionIndex == INT_MAX || Sec->SectionIndex == Index);
-      Sec->SectionIndex = Index;
     }
   }
 }




More information about the llvm-commits mailing list