From a993d607def2592a5f571b185f8cb0382937a0ed Mon Sep 17 00:00:00 2001 From: Jez Ng Date: Wed, 16 Mar 2022 17:53:02 -0400 Subject: [PATCH] [lld-macho][nfc] Add comment explaining why a cast<> is safe --- lld/MachO/MarkLive.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/lld/MachO/MarkLive.cpp b/lld/MachO/MarkLive.cpp index 979803f1fe70..e9b0fd4f7b1a 100644 --- a/lld/MachO/MarkLive.cpp +++ b/lld/MachO/MarkLive.cpp @@ -160,11 +160,16 @@ void MarkLiveImpl::markTransitively() { // Mark things reachable from GC roots as live. while (!worklist.empty()) { WorklistEntry *entry = worklist.pop_back_val(); - assert(cast(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(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()) addSym(s, entry); else