From: Fangrui Song Date: Wed, 27 Mar 2019 09:38:05 +0000 (+0000) Subject: [DWARF] Add D to Seen early to avoid duplicate elements in Worklist X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=650dceb82e23fc742651506ad3576930e9bd05e9;p=llvm [DWARF] Add D to Seen early to avoid duplicate elements in Worklist git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@357054 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/DebugInfo/DWARF/DWARFDie.cpp b/lib/DebugInfo/DWARF/DWARFDie.cpp index 4a837cd3526..3015ce2e94b 100644 --- a/lib/DebugInfo/DWARF/DWARFDie.cpp +++ b/lib/DebugInfo/DWARF/DWARFDie.cpp @@ -396,6 +396,7 @@ DWARFDie::findRecursively(ArrayRef Attrs) const { // DWARF. This corresponds to following the DW_AT_abstract_origin and // DW_AT_specification just once. SmallSet Seen; + Seen.insert(*this); while (!Worklist.empty()) { DWARFDie Die = Worklist.back(); @@ -404,19 +405,16 @@ DWARFDie::findRecursively(ArrayRef Attrs) const { if (!Die.isValid()) continue; - if (Seen.count(Die)) - continue; - - Seen.insert(Die); - if (auto Value = Die.find(Attrs)) return Value; if (auto D = Die.getAttributeValueAsReferencedDie(DW_AT_abstract_origin)) - Worklist.push_back(D); + if (Seen.insert(D).second) + Worklist.push_back(D); if (auto D = Die.getAttributeValueAsReferencedDie(DW_AT_specification)) - Worklist.push_back(D); + if (Seen.insert(D).second) + Worklist.push_back(D); } return None;