# 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_plus_uconst 0x{{[0-9]+}} # SYMBOLS-NEXT: Variable{{.*}}, name = "a", type = {{.*}} (int), scope = local, location = DW_OP_breg{{.*}}, DW_OP_deref, DW_OP_plus_uconst 0x0 # 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