xref: /llvm-project/lldb/test/Shell/SymbolFile/DWARF/vla.cpp (revision 229a16590a3cd65da77bb868498d3eed63bf6263)
1*229a1659SDavid Spickett // When linking with link.exe, -gdwarf still produces PDB instead.
2*229a1659SDavid Spickett // UNSUPPORTED: system-windows
3*229a1659SDavid Spickett 
4d72c8b02SMichael Buch // RUN: %clangxx_host -gdwarf -std=c++11 -o %t %s
5d72c8b02SMichael Buch // RUN: %lldb %t \
6d72c8b02SMichael Buch // RUN:   -o run \
7d72c8b02SMichael Buch // RUN:   -o "frame var --show-types f" \
8d72c8b02SMichael Buch // RUN:   -o "frame var vla0" \
9d72c8b02SMichael Buch // RUN:   -o "frame var fla0" \
10d72c8b02SMichael Buch // RUN:   -o "frame var fla1" \
11d72c8b02SMichael Buch // RUN:   -o "frame var vla01" \
12d72c8b02SMichael Buch // RUN:   -o "frame var vla10" \
13d72c8b02SMichael Buch // RUN:   -o "frame var vlaN" \
14d72c8b02SMichael Buch // RUN:   -o "frame var vlaNM" \
15d72c8b02SMichael Buch // RUN:   -o exit | FileCheck %s
16d72c8b02SMichael Buch 
17d72c8b02SMichael Buch struct Foo {
18d72c8b02SMichael Buch   static constexpr int n = 1;
19d72c8b02SMichael Buch   int m_vlaN[n];
20d72c8b02SMichael Buch 
21d72c8b02SMichael Buch   int m_vla0[0];
22d72c8b02SMichael Buch };
23d72c8b02SMichael Buch 
24d72c8b02SMichael Buch int main() {
25d72c8b02SMichael Buch   Foo f;
26d72c8b02SMichael Buch   f.m_vlaN[0] = 60;
27d72c8b02SMichael Buch 
28d72c8b02SMichael Buch   // CHECK:      (lldb) frame var --show-types f
29d72c8b02SMichael Buch   // CHECK-NEXT: (Foo) f = {
30d72c8b02SMichael Buch   // CHECK-NEXT:   (int[1]) m_vlaN = {
31d72c8b02SMichael Buch   // CHECK-NEXT:     (int) [0] = 60
32d72c8b02SMichael Buch   // CHECK-NEXT:   }
33d72c8b02SMichael Buch   // CHECK-NEXT:   (int[0]) m_vla0 = {}
34d72c8b02SMichael Buch   // CHECK-NEXT: }
35d72c8b02SMichael Buch 
36d72c8b02SMichael Buch   int vla0[0] = {};
37d72c8b02SMichael Buch 
38d72c8b02SMichael Buch   // CHECK:      (lldb) frame var vla0
39d72c8b02SMichael Buch   // CHECK-NEXT: (int[0]) vla0 = {}
40d72c8b02SMichael Buch 
41d72c8b02SMichael Buch   int fla0[] = {};
42d72c8b02SMichael Buch 
43d72c8b02SMichael Buch   // CHECK:      (lldb) frame var fla0
44d72c8b02SMichael Buch   // CHECK-NEXT: (int[0]) fla0 = {}
45d72c8b02SMichael Buch 
46d72c8b02SMichael Buch   int fla1[] = {42};
47d72c8b02SMichael Buch 
48d72c8b02SMichael Buch   // CHECK:      (lldb) frame var fla1
49d72c8b02SMichael Buch   // CHECK-NEXT: (int[1]) fla1 = ([0] = 42)
50d72c8b02SMichael Buch 
51d72c8b02SMichael Buch   int vla01[0][1];
52d72c8b02SMichael Buch 
53d72c8b02SMichael Buch   // CHECK:      (lldb) frame var vla01
54d72c8b02SMichael Buch   // CHECK-NEXT: (int[0][1]) vla01 = {}
55d72c8b02SMichael Buch 
56d72c8b02SMichael Buch   int vla10[1][0];
57d72c8b02SMichael Buch 
58d72c8b02SMichael Buch   // CHECK:      (lldb) frame var vla10
59d72c8b02SMichael Buch   // CHECK-NEXT: (int[1][0]) vla10 = ([0] = int[0]
60d72c8b02SMichael Buch 
61d72c8b02SMichael Buch   int n = 3;
62d72c8b02SMichael Buch   int vlaN[n];
63d72c8b02SMichael Buch   for (int i = 0; i < n; ++i)
64d72c8b02SMichael Buch     vlaN[i] = -i;
65d72c8b02SMichael Buch 
66d72c8b02SMichael Buch   // CHECK:      (lldb) frame var vlaN
67d72c8b02SMichael Buch   // CHECK-NEXT: (int[]) vlaN = ([0] = 0, [1] = -1, [2] = -2)
68d72c8b02SMichael Buch 
69d72c8b02SMichael Buch   int m = 2;
70d72c8b02SMichael Buch   int vlaNM[n][m];
71d72c8b02SMichael Buch   for (int i = 0; i < n; ++i)
72d72c8b02SMichael Buch     for (int j = 0; j < m; ++j)
73d72c8b02SMichael Buch       vlaNM[i][j] = i + j;
74d72c8b02SMichael Buch 
75d72c8b02SMichael Buch   // FIXME: multi-dimensional VLAs aren't well supported
76d72c8b02SMichael Buch   // CHECK:      (lldb) frame var vlaNM
77d72c8b02SMichael Buch   // CHECK-NEXT: (int[][]) vlaNM = {
78d72c8b02SMichael Buch   // CHECK-NEXT:   [0] = ([0] = 0, [1] = 1, [2] = 1)
79d72c8b02SMichael Buch   // CHECK-NEXT:   [1] = ([0] = 1, [1] = 1, [2] = 2)
80d72c8b02SMichael Buch   // CHECK-NEXT: }
81d72c8b02SMichael Buch 
82d72c8b02SMichael Buch   __builtin_debugtrap();
83d72c8b02SMichael Buch }
84