| # 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: } |