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
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits