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