[ELF] Delete SectionBase::assigned

D67504 removed uses of `assigned` from OutputSection::addSection, which
makes `assigned` purely used in processSectionCommands() and its
callees. By replacing its references with `parent`, we can remove
`assigned`.

Reviewed By: grimar

Differential Revision: https://reviews.llvm.org/D67531

git-svn-id: https://llvm.org/svn/llvm-project/lld/trunk@372735 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/ELF/InputSection.h b/ELF/InputSection.h
index 3a97407..d7c9532 100644
--- a/ELF/InputSection.h
+++ b/ELF/InputSection.h
@@ -54,22 +54,9 @@
 
   unsigned sectionKind : 3;
 
-  // The next three bit fields are only used by InputSectionBase, but we
+  // The next two bit fields are only used by InputSectionBase, but we
   // put them here so the struct packs better.
 
-  // True if this section has already been placed to a linker script
-  // output section. This is needed because, in a linker script, you
-  // can refer to the same section more than once. For example, in
-  // the following linker script,
-  //
-  //   .foo : { *(.text) }
-  //   .bar : { *(.text) }
-  //
-  // .foo takes all .text sections, and .bar becomes empty. To achieve
-  // this, we need to memorize whether a section has been placed or
-  // not for each input section.
-  unsigned assigned : 1;
-
   unsigned bss : 1;
 
   // Set for sections that should not be folded by ICF.
@@ -108,9 +95,9 @@
   SectionBase(Kind sectionKind, StringRef name, uint64_t flags,
               uint64_t entsize, uint64_t alignment, uint32_t type,
               uint32_t info, uint32_t link)
-      : name(name), repl(this), sectionKind(sectionKind), assigned(false),
-        bss(false), keepUnique(false), partition(0), alignment(alignment),
-        flags(flags), entsize(entsize), type(type), link(link), info(info) {}
+      : name(name), repl(this), sectionKind(sectionKind), bss(false),
+        keepUnique(false), partition(0), alignment(alignment), flags(flags),
+        entsize(entsize), type(type), link(link), info(info) {}
 };
 
 // This corresponds to a section of an input file.
diff --git a/ELF/LinkerScript.cpp b/ELF/LinkerScript.cpp
index 48f6c38..74fae36 100644
--- a/ELF/LinkerScript.cpp
+++ b/ELF/LinkerScript.cpp
@@ -414,7 +414,7 @@
     size_t sizeBefore = ret.size();
 
     for (InputSectionBase *sec : inputSections) {
-      if (!sec->isLive() || sec->assigned)
+      if (!sec->isLive() || sec->parent)
         continue;
 
       // For -emit-relocs we have to ignore entries like
@@ -433,7 +433,6 @@
         continue;
 
       ret.push_back(sec);
-      sec->assigned = true;
     }
 
     sortInputSections(
@@ -455,6 +454,7 @@
     mainPart->hashTab = nullptr;
 
   s->markDead();
+  s->parent = nullptr;
   for (InputSection *ds : s->dependentSections)
     discard(ds);
 }
@@ -466,6 +466,8 @@
   for (BaseCommand *base : outCmd.sectionCommands) {
     if (auto *cmd = dyn_cast<InputSectionDescription>(base)) {
       cmd->sectionBases = computeInputSections(cmd);
+      for (InputSectionBase *s : cmd->sectionBases)
+        s->parent = &outCmd;
       ret.insert(ret.end(), cmd->sectionBases.begin(), cmd->sectionBases.end());
     }
   }
@@ -497,7 +499,7 @@
       // way to "make it as if it wasn't present" is to make it empty.
       if (!matchConstraints(v, sec->constraint)) {
         for (InputSectionBase *s : v)
-          s->assigned = false;
+          s->parent = nullptr;
         sec->sectionCommands.clear();
         continue;
       }
@@ -512,8 +514,6 @@
       }
 
       sec->sectionIndex = i++;
-      for (InputSectionBase *s : v)
-        s->parent = sec;
     }
   }
 }