# Test that LLDB displays indirect virtual bases correctly # REQUIRES: lld, x86, system-windows # RUN: split-file %s %t # RUN: %clang_cl_host -Z7 -c /GS- /Fo%t.cv.obj -- %t/main.cpp # RUN: %clang_cl_host -Z7 -gdwarf -c /GS- /Fo%t.dwarf.obj -- %t/main.cpp # RUN: lld-link -debug -nodefaultlib -entry:main %t.cv.obj -out:%t.cv.exe # RUN: lld-link -debug -nodefaultlib -entry:main %t.dwarf.obj -out:%t.dwarf.exe # RUN: %lldb -f %t.cv.exe -s %t/commands.input 2>&1 | FileCheck %s # RUN: %lldb -f %t.dwarf.exe -s %t/commands.input 2>&1 | FileCheck %s #--- main.cpp struct VBase1 { short member = 1; }; struct VBase2 { short member = 2; }; struct Base1 { short member = 3; }; struct Base2 { short member = 4; }; struct User : public virtual VBase1, public virtual VBase2 { short member = 5; }; struct UserUser : public Base1, public User, public Base2 { short member = 6; }; int main() { UserUser useruser; return 0; // break here } #--- commands.input br set -p "break here" r v useruser exit # CHECK: (lldb) v useruser # CHECK-NEXT: (UserUser) useruser = { # CHECK-NEXT: Base1 = (member = 3) # CHECK-NEXT: User = { # CHECK-NEXT: VBase1 = (member = 1) # CHECK-NEXT: VBase2 = (member = 2) # CHECK-NEXT: member = 5 # CHECK-NEXT: } # CHECK-NEXT: Base2 = (member = 4) # CHECK-NEXT: member = 6 # CHECK-NEXT: }