[lld-macho][nfc] Add comment explaining why a cast<> is safe
authorJez Ng <jezng@fb.com>
Wed, 16 Mar 2022 21:53:02 +0000 (17:53 -0400)
committerJez Ng <jezng@fb.com>
Mon, 21 Mar 2022 11:23:09 +0000 (07:23 -0400)
lld/MachO/MarkLive.cpp

index 979803f..e9b0fd4 100644 (file)
@@ -160,11 +160,16 @@ void MarkLiveImpl<RecordWhyLive>::markTransitively() {
     // Mark things reachable from GC roots as live.
     while (!worklist.empty()) {
       WorklistEntry *entry = worklist.pop_back_val();
-      assert(cast<ConcatInputSection>(getInputSection(entry))->live &&
+      // Entries that get placed onto the worklist always contain
+      // ConcatInputSections. `WhyLiveEntry::prev` may point to entries that
+      // contain other types of InputSections (due to S_ATTR_LIVE_SUPPORT), but
+      // those entries should never be pushed onto the worklist.
+      auto *isec = cast<ConcatInputSection>(getInputSection(entry));
+      assert(isec->live &&
              "We mark as live when pushing onto the worklist!");
 
       // Mark all symbols listed in the relocation table for this section.
-      for (const Reloc &r : getInputSection(entry)->relocs) {
+      for (const Reloc &r : isec->relocs) {
         if (auto *s = r.referent.dyn_cast<Symbol *>())
           addSym(s, entry);
         else