xref: /llvm-project/clang/test/SemaCXX/warn-unsafe-buffer-usage-multi-decl-fixits-test.cpp (revision 171dfc5462a23b7e8ace31f4d9206b972b38ffbc)
1*171dfc54SRashmi Mudduluru // RUN: %clang_cc1 -std=c++20 -Wunsafe-buffer-usage -fdiagnostics-parseable-fixits -fsafe-buffer-usage-suggestions %s 2>&1 | FileCheck %s
2*171dfc54SRashmi Mudduluru 
3*171dfc54SRashmi Mudduluru void foo1a() {
4*171dfc54SRashmi Mudduluru   int *r = new int[7];
5*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:11}:"std::span<int> r"
6*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{"
7*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-3]]:22-[[@LINE-3]]:22}:", 7}"
8*171dfc54SRashmi Mudduluru   int *p = new int[4];
9*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:11}:"std::span<int> p"
10*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{"
11*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-3]]:22-[[@LINE-3]]:22}:", 4}"
12*171dfc54SRashmi Mudduluru   p = r;
13*171dfc54SRashmi Mudduluru   int tmp = p[9];
14*171dfc54SRashmi Mudduluru   int *q;
15*171dfc54SRashmi Mudduluru   // CHECK-NOT: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:11}:"std::span<int> q"
16*171dfc54SRashmi Mudduluru   q = r;
17*171dfc54SRashmi Mudduluru }
18*171dfc54SRashmi Mudduluru 
19*171dfc54SRashmi Mudduluru void foo1b() {
20*171dfc54SRashmi Mudduluru   int *r = new int[7];
21*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:11}:"std::span<int> r"
22*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{"
23*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-3]]:22-[[@LINE-3]]:22}:", 7}"
24*171dfc54SRashmi Mudduluru   int *p = new int[4];
25*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:11}:"std::span<int> p"
26*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{"
27*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-3]]:22-[[@LINE-3]]:22}:", 4}"
28*171dfc54SRashmi Mudduluru   p = r;
29*171dfc54SRashmi Mudduluru   int tmp = p[9];
30*171dfc54SRashmi Mudduluru   int *q = new int[4];
31*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:11}:"std::span<int> q"
32*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{"
33*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-3]]:22-[[@LINE-3]]:22}:", 4}"
34*171dfc54SRashmi Mudduluru   q = r;
35*171dfc54SRashmi Mudduluru   tmp = q[9];
36*171dfc54SRashmi Mudduluru }
37*171dfc54SRashmi Mudduluru 
38*171dfc54SRashmi Mudduluru void foo1c() {
39*171dfc54SRashmi Mudduluru   int *r = new int[7];
40*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:11}:"std::span<int> r"
41*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{"
42*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-3]]:22-[[@LINE-3]]:22}:", 7}"
43*171dfc54SRashmi Mudduluru   int *p = new int[4];
44*171dfc54SRashmi Mudduluru   // CHECK-NOT: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:11}:"std::span<int> p"
45*171dfc54SRashmi Mudduluru   p = r;
46*171dfc54SRashmi Mudduluru   int tmp = r[9];
47*171dfc54SRashmi Mudduluru   int *q;
48*171dfc54SRashmi Mudduluru   // CHECK-NOT: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:11}:"std::span<int> q"
49*171dfc54SRashmi Mudduluru   q = r;
50*171dfc54SRashmi Mudduluru   tmp = q[9];
51*171dfc54SRashmi Mudduluru }
52*171dfc54SRashmi Mudduluru 
53*171dfc54SRashmi Mudduluru void foo2a() {
54*171dfc54SRashmi Mudduluru   int *r = new int[7];
55*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:11}:"std::span<int> r"
56*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{"
57*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-3]]:22-[[@LINE-3]]:22}:", 7}"
58*171dfc54SRashmi Mudduluru   int *p = new int[5];
59*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:11}:"std::span<int> p"
60*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{"
61*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-3]]:22-[[@LINE-3]]:22}:", 5}"
62*171dfc54SRashmi Mudduluru   int *q = new int[4];
63*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:11}:"std::span<int> q"
64*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{"
65*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-3]]:22-[[@LINE-3]]:22}:", 4}"
66*171dfc54SRashmi Mudduluru   p = q;
67*171dfc54SRashmi Mudduluru   int tmp = p[8];
68*171dfc54SRashmi Mudduluru   q = r;
69*171dfc54SRashmi Mudduluru }
70*171dfc54SRashmi Mudduluru 
71*171dfc54SRashmi Mudduluru void foo2b() {
72*171dfc54SRashmi Mudduluru   int *r = new int[7];
73*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:11}:"std::span<int> r"
74*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{"
75*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-3]]:22-[[@LINE-3]]:22}:", 7}"
76*171dfc54SRashmi Mudduluru   int *p = new int[5];
77*171dfc54SRashmi Mudduluru   // CHECK-NOT: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:11}:"std::span<int> p"
78*171dfc54SRashmi Mudduluru   // CHECK-NOT: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{"
79*171dfc54SRashmi Mudduluru   // CHECK-NOT: fix-it:"{{.*}}":{[[@LINE-3]]:22-[[@LINE-3]]:22}:", 5}"
80*171dfc54SRashmi Mudduluru   int *q = new int[4];
81*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:11}:"std::span<int> q"
82*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{"
83*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-3]]:22-[[@LINE-3]]:22}:", 4}"
84*171dfc54SRashmi Mudduluru   p = q;
85*171dfc54SRashmi Mudduluru   int tmp = q[8];
86*171dfc54SRashmi Mudduluru   q = r;
87*171dfc54SRashmi Mudduluru }
88*171dfc54SRashmi Mudduluru 
89*171dfc54SRashmi Mudduluru void foo2c() {
90*171dfc54SRashmi Mudduluru   int *r = new int[7];
91*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:11}:"std::span<int> r"
92*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{"
93*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-3]]:22-[[@LINE-3]]:22}:", 7}"
94*171dfc54SRashmi Mudduluru   int *p = new int[5];
95*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:11}:"std::span<int> p"
96*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{"
97*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-3]]:22-[[@LINE-3]]:22}:", 5}"
98*171dfc54SRashmi Mudduluru   int *q = new int[4];
99*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:11}:"std::span<int> q"
100*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{"
101*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-3]]:22-[[@LINE-3]]:22}:", 4}"
102*171dfc54SRashmi Mudduluru   p = q;
103*171dfc54SRashmi Mudduluru   int tmp = p[8];
104*171dfc54SRashmi Mudduluru   q = r;
105*171dfc54SRashmi Mudduluru   tmp = q[8];
106*171dfc54SRashmi Mudduluru }
107*171dfc54SRashmi Mudduluru 
108*171dfc54SRashmi Mudduluru void foo3a() {
109*171dfc54SRashmi Mudduluru   int *r = new int[7];
110*171dfc54SRashmi Mudduluru   // CHECK-NOT: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:11}:"std::span<int> r"
111*171dfc54SRashmi Mudduluru   int *p = new int[5];
112*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:11}:"std::span<int> p"
113*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{"
114*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-3]]:22-[[@LINE-3]]:22}:", 5}"
115*171dfc54SRashmi Mudduluru   int *q = new int[4];
116*171dfc54SRashmi Mudduluru   // CHECK-NOT: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:11}:"std::span<int> q"
117*171dfc54SRashmi Mudduluru   q = p;
118*171dfc54SRashmi Mudduluru   int tmp = p[8];
119*171dfc54SRashmi Mudduluru   q = r;
120*171dfc54SRashmi Mudduluru }
121*171dfc54SRashmi Mudduluru 
122*171dfc54SRashmi Mudduluru void foo3b() {
123*171dfc54SRashmi Mudduluru   int *r = new int[10];
124*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:11}:"std::span<int> r"
125*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{"
126*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-3]]:23-[[@LINE-3]]:23}:", 10}"
127*171dfc54SRashmi Mudduluru   int *p = new int[10];
128*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:11}:"std::span<int> p"
129*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{"
130*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-3]]:23-[[@LINE-3]]:23}:", 10}"
131*171dfc54SRashmi Mudduluru   int *q = new int[10];
132*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:11}:"std::span<int> q"
133*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{"
134*171dfc54SRashmi Mudduluru   // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-3]]:23-[[@LINE-3]]:23}:", 10}"
135*171dfc54SRashmi Mudduluru   q = p;
136*171dfc54SRashmi Mudduluru   int tmp = q[8];
137*171dfc54SRashmi Mudduluru   q = r;
138*171dfc54SRashmi Mudduluru }
139