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
foo()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
bar()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