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