| # REQUIRES: lld, msvc, target-windows | |
| # Test that LLDB can show variables introduced in C++ 17 structured bindings | |
| # when compiled with MSVC. | |
| # RUN: split-file %s %t | |
| # RUN: %build --compiler=msvc --arch=64 --std=c++17 --nodefaultlib -o %t.exe -- %t/main.cpp | |
| # RUN: lldb-test symbols %t.exe | FileCheck %s --check-prefix=SYMBOLS | |
| # RUN: %lldb -f %t.exe -s %t/commands.input | FileCheck %s --check-prefix=LLDB | |
| #--- main.cpp | |
| struct Foo { int a; int b; }; | |
| int main() { | |
| Foo f{1, 2}; | |
| auto&[a, b] = f; | |
| return a + b; // break here | |
| } | |
| #--- commands.input | |
| br set -p "break here" | |
| r | |
| v f | |
| v a | |
| v b | |
| q | |
| # SYMBOLS: Function{{.*}}, demangled = main, type = | |
| # SYMBOLS-NEXT: Block{{.*}}, ranges = | |
| # SYMBOLS-NEXT: Variable{{.*}}, name = "f", type = {{.*}} (Foo), scope = local, location = | |
| # SYMBOLS-NEXT: Variable{{.*}}, name = "b", type = {{.*}} (int), scope = local, location = DW_OP_breg{{.*}}, DW_OP_deref, DW_OP_consts {{[+-][0-9]+}}, DW_OP_plus | |
| # SYMBOLS-NEXT: Variable{{.*}}, name = "a", type = {{.*}} (int), scope = local, location = DW_OP_breg{{.*}}, DW_OP_deref, DW_OP_consts +0, DW_OP_plus | |
| # LLDB: (lldb) v f | |
| # LLDB-NEXT: (Foo) f = (a = 1, b = 2) | |
| # LLDB-NEXT: (lldb) v a | |
| # LLDB-NEXT: (int) a = 1 | |
| # LLDB-NEXT: (lldb) v b | |
| # LLDB-NEXT: (int) b = 2 |