jankratochvil created this revision.
jankratochvil added reviewers: clayborg, labath.
jankratochvil added a project: LLDB.
Herald added subscribers: JDevlieghere, aprantl.

xbolva00 bugreported $subj <https://reviews.llvm.org/D46810#1247410>
It can happen only from the line:

  m_die_array.back().SetEmptyChildren(true);

In the case `DW_TAG_compile_unit` has `DW_CHILDREN_yes` but there is only 0 
(end of list, no children present). Therefore the assertion can fortunately 
happen only with a hand-crafted DWARF or with DWARF from some suboptimal 
compilers.
I could not find a reproducer with unpatched LLDB code, could you provide what 
LLDB commands could reproduce that? A debuggee binary which can reproduce it 
is: lldb-repro.tar.xz </home/jkratoch/t/lldb-repro.tar.xz>


Repository:
  rLLDB LLDB

https://reviews.llvm.org/D53255

Files:
  source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp


Index: source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp
===================================================================
--- source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp
+++ source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp
@@ -261,7 +261,11 @@
   }
 
   if (!m_die_array.empty()) {
-    lldbassert(!m_first_die || m_first_die == m_die_array.front());
+    if (m_first_die) {
+      // Only needed for the assertion.
+      m_first_die.SetEmptyChildren(m_die_array.front().GetEmptyChildren());
+      lldbassert(m_first_die == m_die_array.front());
+    }
     m_first_die = m_die_array.front();
   }
 


Index: source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp
===================================================================
--- source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp
+++ source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp
@@ -261,7 +261,11 @@
   }
 
   if (!m_die_array.empty()) {
-    lldbassert(!m_first_die || m_first_die == m_die_array.front());
+    if (m_first_die) {
+      // Only needed for the assertion.
+      m_first_die.SetEmptyChildren(m_die_array.front().GetEmptyChildren());
+      lldbassert(m_first_die == m_die_array.front());
+    }
     m_first_die = m_die_array.front();
   }
 
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to