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