1*89a1d03eSRichard // RUN: %check_clang_tidy %s modernize-avoid-c-arrays %t 2*89a1d03eSRichard 3*89a1d03eSRichard int a[] = {1, 2}; 4*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:1: warning: do not declare C-style arrays, use std::array<> instead 5*89a1d03eSRichard 6*89a1d03eSRichard int b[1]; 7*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:1: warning: do not declare C-style arrays, use std::array<> instead 8*89a1d03eSRichard 9*89a1d03eSRichard void foo() { 10*89a1d03eSRichard int c[b[0]]; 11*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: do not declare C VLA arrays, use std::vector<> instead 12*89a1d03eSRichard 13*89a1d03eSRichard using d = decltype(c); 14*89a1d03eSRichard d e; 15*89a1d03eSRichard // Semi-FIXME: we do not diagnose these last two lines separately, 16*89a1d03eSRichard // because we point at typeLoc.getBeginLoc(), which is the decl before that 17*89a1d03eSRichard // (int c[b[0]];), which is already diagnosed. 18*89a1d03eSRichard } 19*89a1d03eSRichard 20*89a1d03eSRichard template <typename T, int Size> 21*89a1d03eSRichard class array { 22*89a1d03eSRichard T d[Size]; 23*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: do not declare C-style arrays, use std::array<> instead 24*89a1d03eSRichard 25*89a1d03eSRichard int e[1]; 26*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: do not declare C-style arrays, use std::array<> instead 27*89a1d03eSRichard }; 28*89a1d03eSRichard 29*89a1d03eSRichard array<int[4], 2> d; 30*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: do not declare C-style arrays, use std::array<> instead 31*89a1d03eSRichard 32*89a1d03eSRichard using k = int[4]; 33*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:11: warning: do not declare C-style arrays, use std::array<> instead 34*89a1d03eSRichard 35*89a1d03eSRichard array<k, 2> dk; 36*89a1d03eSRichard 37*89a1d03eSRichard template <typename T> 38*89a1d03eSRichard class unique_ptr { 39*89a1d03eSRichard T *d; 40*89a1d03eSRichard 41*89a1d03eSRichard int e[1]; 42*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: do not declare C-style arrays, use std::array<> instead 43*89a1d03eSRichard }; 44*89a1d03eSRichard 45*89a1d03eSRichard unique_ptr<int[]> d2; 46*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: do not declare C-style arrays, use std::array<> instead 47*89a1d03eSRichard 48*89a1d03eSRichard using k2 = int[]; 49*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: do not declare C-style arrays, use std::array<> instead 50*89a1d03eSRichard 51*89a1d03eSRichard unique_ptr<k2> dk2; 52*89a1d03eSRichard 53*89a1d03eSRichard // Some header 54*89a1d03eSRichard extern "C" { 55*89a1d03eSRichard 56*89a1d03eSRichard int f[] = {1, 2}; 57*89a1d03eSRichard 58*89a1d03eSRichard int j[1]; 59*89a1d03eSRichard 60*89a1d03eSRichard inline void bar() { 61*89a1d03eSRichard { 62*89a1d03eSRichard int j[j[0]]; 63*89a1d03eSRichard } 64*89a1d03eSRichard } 65*89a1d03eSRichard 66*89a1d03eSRichard extern "C++" { 67*89a1d03eSRichard int f3[] = {1, 2}; 68*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:1: warning: do not declare C-style arrays, use std::array<> instead 69*89a1d03eSRichard 70*89a1d03eSRichard int j3[1]; 71*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:1: warning: do not declare C-style arrays, use std::array<> instead 72*89a1d03eSRichard 73*89a1d03eSRichard struct Foo { 74*89a1d03eSRichard int f3[3] = {1, 2}; 75*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: do not declare C-style arrays, use std::array<> instead 76*89a1d03eSRichard 77*89a1d03eSRichard int j3[1]; 78*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: do not declare C-style arrays, use std::array<> instead 79*89a1d03eSRichard }; 80*89a1d03eSRichard } 81*89a1d03eSRichard 82*89a1d03eSRichard struct Bar { 83*89a1d03eSRichard 84*89a1d03eSRichard int f[3] = {1, 2}; 85*89a1d03eSRichard 86*89a1d03eSRichard int j[1]; 87*89a1d03eSRichard }; 88*89a1d03eSRichard } 89