Index: lldb/trunk/lit/SymbolFile/DWARF/split-dwarf-inlining.cpp =================================================================== --- lldb/trunk/lit/SymbolFile/DWARF/split-dwarf-inlining.cpp +++ lldb/trunk/lit/SymbolFile/DWARF/split-dwarf-inlining.cpp @@ -0,0 +1,8 @@ +// RUN: %clangxx -target x86_64-pc-linux -gsplit-dwarf -fsplit-dwarf-inlining \ +// RUN: -c %s -o %t +// RUN: %lldb %t -o "breakpoint set -n foo" -b | FileCheck %s + +// CHECK: Breakpoint 1: 2 locations + +__attribute__((always_inline)) int foo(int x) { return x; } +int bar(int x) { return foo(x); } Index: lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp =================================================================== --- lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp +++ lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp @@ -183,6 +183,17 @@ if (!m_first_die) AddUnitDIE(m_die_array.front()); + + // With -fsplit-dwarf-inlining, clang will emit non-empty skeleton compile + // units. We are not able to access these DIE *and* the dwo file + // simultaneously. We also don't need to do that as the dwo file will + // contain a superset of information. So, we don't even attempt to parse + // any remaining DIEs. + if (m_dwo_symbol_file) { + m_die_array.front().SetHasChildren(false); + break; + } + } else { if (null_die) { if (prev_die_had_children) {