1785624b2SCongcong Cai // RUN: %check_clang_tidy -std=c++17 %s modernize-avoid-c-arrays %t 289a1d03eSRichard 389a1d03eSRichard int a[] = {1, 2}; 4*5fa742eeSCongcong Cai // CHECK-MESSAGES: :[[@LINE-1]]:1: warning: do not declare C-style arrays, use 'std::array' instead 589a1d03eSRichard 689a1d03eSRichard int b[1]; 7*5fa742eeSCongcong Cai // CHECK-MESSAGES: :[[@LINE-1]]:1: warning: do not declare C-style arrays, use 'std::array' instead 889a1d03eSRichard 989a1d03eSRichard void foo() { 1089a1d03eSRichard int c[b[0]]; 11*5fa742eeSCongcong Cai // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: do not declare C VLA arrays, use 'std::vector' instead 1289a1d03eSRichard 1389a1d03eSRichard using d = decltype(c); 1489a1d03eSRichard d e; 1589a1d03eSRichard // Semi-FIXME: we do not diagnose these last two lines separately, 1689a1d03eSRichard // because we point at typeLoc.getBeginLoc(), which is the decl before that 1789a1d03eSRichard // (int c[b[0]];), which is already diagnosed. 1889a1d03eSRichard } 1989a1d03eSRichard 2089a1d03eSRichard template <typename T, int Size> 2189a1d03eSRichard class array { 2289a1d03eSRichard T d[Size]; 23*5fa742eeSCongcong Cai // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: do not declare C-style arrays, use 'std::array' instead 2489a1d03eSRichard 2589a1d03eSRichard int e[1]; 26*5fa742eeSCongcong Cai // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: do not declare C-style arrays, use 'std::array' instead 2789a1d03eSRichard }; 2889a1d03eSRichard 2989a1d03eSRichard array<int[4], 2> d; 30*5fa742eeSCongcong Cai // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: do not declare C-style arrays, use 'std::array' instead 3189a1d03eSRichard 3289a1d03eSRichard using k = int[4]; 33*5fa742eeSCongcong Cai // CHECK-MESSAGES: :[[@LINE-1]]:11: warning: do not declare C-style arrays, use 'std::array' instead 3489a1d03eSRichard 3589a1d03eSRichard array<k, 2> dk; 3689a1d03eSRichard 3789a1d03eSRichard template <typename T> 3889a1d03eSRichard class unique_ptr { 3989a1d03eSRichard T *d; 4089a1d03eSRichard 4189a1d03eSRichard int e[1]; 42*5fa742eeSCongcong Cai // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: do not declare C-style arrays, use 'std::array' instead 4389a1d03eSRichard }; 4489a1d03eSRichard 4589a1d03eSRichard unique_ptr<int[]> d2; 46*5fa742eeSCongcong Cai // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: do not declare C-style arrays, use 'std::array' instead 4789a1d03eSRichard 4889a1d03eSRichard using k2 = int[]; 49*5fa742eeSCongcong Cai // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: do not declare C-style arrays, use 'std::array' instead 5089a1d03eSRichard 5189a1d03eSRichard unique_ptr<k2> dk2; 5289a1d03eSRichard 5389a1d03eSRichard // Some header 5489a1d03eSRichard extern "C" { 5589a1d03eSRichard 5689a1d03eSRichard int f[] = {1, 2}; 5789a1d03eSRichard 5889a1d03eSRichard int j[1]; 5989a1d03eSRichard 6089a1d03eSRichard inline void bar() { 6189a1d03eSRichard { 6289a1d03eSRichard int j[j[0]]; 6389a1d03eSRichard } 6489a1d03eSRichard } 6589a1d03eSRichard 6689a1d03eSRichard extern "C++" { 6789a1d03eSRichard int f3[] = {1, 2}; 68*5fa742eeSCongcong Cai // CHECK-MESSAGES: :[[@LINE-1]]:1: warning: do not declare C-style arrays, use 'std::array' instead 6989a1d03eSRichard 7089a1d03eSRichard int j3[1]; 71*5fa742eeSCongcong Cai // CHECK-MESSAGES: :[[@LINE-1]]:1: warning: do not declare C-style arrays, use 'std::array' instead 7289a1d03eSRichard 7389a1d03eSRichard struct Foo { 7489a1d03eSRichard int f3[3] = {1, 2}; 75*5fa742eeSCongcong Cai // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: do not declare C-style arrays, use 'std::array' instead 7689a1d03eSRichard 7789a1d03eSRichard int j3[1]; 78*5fa742eeSCongcong Cai // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: do not declare C-style arrays, use 'std::array' instead 7989a1d03eSRichard }; 8089a1d03eSRichard } 8189a1d03eSRichard 8289a1d03eSRichard struct Bar { 8389a1d03eSRichard 8489a1d03eSRichard int f[3] = {1, 2}; 8589a1d03eSRichard 8689a1d03eSRichard int j[1]; 8789a1d03eSRichard }; 8889a1d03eSRichard } 89b777bb78SPiotr Zegar 90b777bb78SPiotr Zegar const char name[] = "Some string"; 91*5fa742eeSCongcong Cai // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: do not declare C-style arrays, use 'std::array' instead [modernize-avoid-c-arrays] 92b777bb78SPiotr Zegar 93b777bb78SPiotr Zegar void takeCharArray(const char name[]); 94*5fa742eeSCongcong Cai // CHECK-MESSAGES: :[[@LINE-1]]:26: warning: do not declare C-style arrays, use 'std::array' or 'std::vector' instead [modernize-avoid-c-arrays] 95