diff options
author | Tom Stellard <tstellar@redhat.com> | 2018-11-16 06:04:28 +0000 |
---|---|---|
committer | Tom Stellard <tstellar@redhat.com> | 2018-11-16 06:04:28 +0000 |
commit | 637da661b5ef6fd47f4b077ffd26a79b1c1892f9 (patch) | |
tree | 4b0dd092bf0e52cea11daae552eab9449ba8cc62 | |
parent | 434b6ab1b240bfdb60ba8ca645d3658bc7b27d81 (diff) |
Merging r344605:release_70
------------------------------------------------------------------------
r344605 | jankratochvil | 2018-10-16 04:38:22 -0700 (Tue, 16 Oct 2018) | 12 lines
Fix: Assertion failed: (!m_first_die || m_first_die == m_die_array.front()), function ExtractDIEsRWLocked
xbolva00 bugreported $subj in: 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.
Differential Revision: https://reviews.llvm.org/D53255
------------------------------------------------------------------------
git-svn-id: https://llvm.org/svn/llvm-project/lldb/branches/release_70@347030 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp b/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp index f44b2bb97..d26556d73 100644 --- a/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp +++ b/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp @@ -261,7 +261,11 @@ void DWARFUnit::ExtractDIEsRWLocked() { } 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(); } |