aboutsummaryrefslogtreecommitdiff
path: root/lldb/test/Shell/SymbolFile/DWARF/vla.cpp
blob: 47a4aa1836899ae2bbef8075ededca5ccec4b1d5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
// When linking with link.exe, -gdwarf still produces PDB instead.
// UNSUPPORTED: system-windows

// RUN: %clangxx_host -gdwarf -std=c++11 -o %t %s
// RUN: %lldb %t \
// RUN:   -o run \
// RUN:   -o "frame var --show-types f" \
// RUN:   -o "frame var vla0" \
// RUN:   -o "frame var fla0" \
// RUN:   -o "frame var fla1" \
// RUN:   -o "frame var vla01" \
// RUN:   -o "frame var vla10" \
// RUN:   -o "frame var vlaN" \
// RUN:   -o "frame var vlaNM" \
// RUN:   -o exit | FileCheck %s

struct Foo {
  static constexpr int n = 1;
  int m_vlaN[n];

  int m_vla0[0];
};

int main() {
  Foo f;
  f.m_vlaN[0] = 60;

  // CHECK:      (lldb) frame var --show-types f
  // CHECK-NEXT: (Foo) f = {
  // CHECK-NEXT:   (int[1]) m_vlaN = {
  // CHECK-NEXT:     (int) [0] = 60
  // CHECK-NEXT:   }
  // CHECK-NEXT:   (int[0]) m_vla0 = {}
  // CHECK-NEXT: }

  int vla0[0] = {};

  // CHECK:      (lldb) frame var vla0
  // CHECK-NEXT: (int[0]) vla0 = {}

  int fla0[] = {};

  // CHECK:      (lldb) frame var fla0
  // CHECK-NEXT: (int[0]) fla0 = {}

  int fla1[] = {42};

  // CHECK:      (lldb) frame var fla1
  // CHECK-NEXT: (int[1]) fla1 = ([0] = 42)

  int vla01[0][1];

  // CHECK:      (lldb) frame var vla01
  // CHECK-NEXT: (int[0][1]) vla01 = {}

  int vla10[1][0];

  // CHECK:      (lldb) frame var vla10
  // CHECK-NEXT: (int[1][0]) vla10 = ([0] = int[0]

  int n = 3;
  int vlaN[n];
  for (int i = 0; i < n; ++i)
    vlaN[i] = -i;

  // CHECK:      (lldb) frame var vlaN
  // CHECK-NEXT: (int[]) vlaN = ([0] = 0, [1] = -1, [2] = -2)

  int m = 2;
  int vlaNM[n][m];
  for (int i = 0; i < n; ++i)
    for (int j = 0; j < m; ++j)
      vlaNM[i][j] = i + j;

  // FIXME: multi-dimensional VLAs aren't well supported
  // CHECK:      (lldb) frame var vlaNM
  // CHECK-NEXT: (int[][]) vlaNM = {
  // CHECK-NEXT:   [0] = ([0] = 0, [1] = 1, [2] = 1)
  // CHECK-NEXT:   [1] = ([0] = 1, [1] = 1, [2] = 2)
  // CHECK-NEXT: }

  __builtin_debugtrap();
}