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