xref: /llvm-project/clang/test/SemaCXX/warn-unsafe-buffer-usage-multi-decl-fixits-test.cpp (revision fde4b80cb772897a8cf0b3d022f3041e10b6e816)
1171dfc54SRashmi Mudduluru // RUN: %clang_cc1 -std=c++20 -Wunsafe-buffer-usage -fdiagnostics-parseable-fixits -fsafe-buffer-usage-suggestions %s 2>&1 | FileCheck %s
2171dfc54SRashmi Mudduluru 
foo1a()3171dfc54SRashmi Mudduluru void foo1a() {
4171dfc54SRashmi Mudduluru   int *r = new int[7];
5700baeb7SZiqing Luo   // CHECK-NOT: fix-it:"{{.*}}":{[[@LINE-1]]:
6171dfc54SRashmi Mudduluru   int *p = new int[4];
7700baeb7SZiqing Luo   // CHECK-NOT: fix-it:"{{.*}}":{[[@LINE-1]]:
8171dfc54SRashmi Mudduluru   p = r;
9171dfc54SRashmi Mudduluru   int tmp = p[9];
10171dfc54SRashmi Mudduluru   int *q;
11700baeb7SZiqing Luo   // CHECK-NOT: fix-it:"{{.*}}":{[[@LINE-1]]:
12700baeb7SZiqing Luo   q = r;  // FIXME: we do not fix `q = r` here as the `.data()` fix-it is not generally correct
13171dfc54SRashmi Mudduluru }
14171dfc54SRashmi Mudduluru 
foo1b()15171dfc54SRashmi Mudduluru void foo1b() {
16171dfc54SRashmi Mudduluru   int *r = new int[7];
17*fde4b80cSjkorous-apple   // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:8}:"std::span<int> "
1887b8c85bSRashmi Mudduluru   // CHECK: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{"
1987b8c85bSRashmi Mudduluru   // CHECK: fix-it:"{{.*}}":{[[@LINE-3]]:22-[[@LINE-3]]:22}:", 7}"
20171dfc54SRashmi Mudduluru   int *p = new int[4];
21*fde4b80cSjkorous-apple   // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:8}:"std::span<int> "
2287b8c85bSRashmi Mudduluru   // CHECK: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{"
2387b8c85bSRashmi Mudduluru   // CHECK: fix-it:"{{.*}}":{[[@LINE-3]]:22-[[@LINE-3]]:22}:", 4}"
24171dfc54SRashmi Mudduluru   p = r;
25171dfc54SRashmi Mudduluru   int tmp = p[9];
26171dfc54SRashmi Mudduluru   int *q = new int[4];
27*fde4b80cSjkorous-apple   // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:8}:"std::span<int> "
2887b8c85bSRashmi Mudduluru   // CHECK: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{"
2987b8c85bSRashmi Mudduluru   // CHECK: fix-it:"{{.*}}":{[[@LINE-3]]:22-[[@LINE-3]]:22}:", 4}"
30171dfc54SRashmi Mudduluru   q = r;
31171dfc54SRashmi Mudduluru   tmp = q[9];
32171dfc54SRashmi Mudduluru }
33171dfc54SRashmi Mudduluru 
foo1c()34171dfc54SRashmi Mudduluru void foo1c() {
35171dfc54SRashmi Mudduluru   int *r = new int[7];
36700baeb7SZiqing Luo   // CHECK-NOT: fix-it:"{{.*}}":{[[@LINE-1]]:
37171dfc54SRashmi Mudduluru   int *p = new int[4];
38700baeb7SZiqing Luo   // CHECK-NOT: fix-it:"{{.*}}":{[[@LINE-1]]:
39700baeb7SZiqing Luo   p = r;  // FIXME: we do not fix `p = r` here as the `.data()` fix-it is not generally correct
40171dfc54SRashmi Mudduluru   int tmp = r[9];
41171dfc54SRashmi Mudduluru   int *q;
42700baeb7SZiqing Luo   // CHECK-NOT: fix-it:"{{.*}}":{[[@LINE-1]]:
43171dfc54SRashmi Mudduluru   q = r;
44171dfc54SRashmi Mudduluru   tmp = q[9];
45171dfc54SRashmi Mudduluru }
46171dfc54SRashmi Mudduluru 
foo2a()47171dfc54SRashmi Mudduluru void foo2a() {
48171dfc54SRashmi Mudduluru   int *r = new int[7];
49*fde4b80cSjkorous-apple   // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:8}:"std::span<int> "
5087b8c85bSRashmi Mudduluru   // CHECK: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{"
5187b8c85bSRashmi Mudduluru   // CHECK: fix-it:"{{.*}}":{[[@LINE-3]]:22-[[@LINE-3]]:22}:", 7}"
52171dfc54SRashmi Mudduluru   int *p = new int[5];
53*fde4b80cSjkorous-apple   // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:8}:"std::span<int> "
5487b8c85bSRashmi Mudduluru   // CHECK: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{"
5587b8c85bSRashmi Mudduluru   // CHECK: fix-it:"{{.*}}":{[[@LINE-3]]:22-[[@LINE-3]]:22}:", 5}"
56171dfc54SRashmi Mudduluru   int *q = new int[4];
57*fde4b80cSjkorous-apple   // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:8}:"std::span<int> "
5887b8c85bSRashmi Mudduluru   // CHECK: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{"
5987b8c85bSRashmi Mudduluru   // CHECK: fix-it:"{{.*}}":{[[@LINE-3]]:22-[[@LINE-3]]:22}:", 4}"
60171dfc54SRashmi Mudduluru   p = q;
61171dfc54SRashmi Mudduluru   int tmp = p[8];
62171dfc54SRashmi Mudduluru   q = r;
63171dfc54SRashmi Mudduluru }
64171dfc54SRashmi Mudduluru 
foo2b()65171dfc54SRashmi Mudduluru void foo2b() {
66171dfc54SRashmi Mudduluru   int *r = new int[7];
67700baeb7SZiqing Luo   // CHECK-NOT: fix-it:"{{.*}}":{[[@LINE-1]]:
68171dfc54SRashmi Mudduluru   int *p = new int[5];
69700baeb7SZiqing Luo   // CHECK-NOT: fix-it:"{{.*}}":{[[@LINE-1]]:
70171dfc54SRashmi Mudduluru   int *q = new int[4];
71700baeb7SZiqing Luo   // CHECK-NOT: fix-it:"{{.*}}":{[[@LINE-1]]:
72700baeb7SZiqing Luo   p = q;  // FIXME: we do not fix `p = q` here as the `.data()` fix-it is not generally correct
73171dfc54SRashmi Mudduluru   int tmp = q[8];
74171dfc54SRashmi Mudduluru   q = r;
75171dfc54SRashmi Mudduluru }
76171dfc54SRashmi Mudduluru 
foo2c()77171dfc54SRashmi Mudduluru void foo2c() {
78171dfc54SRashmi Mudduluru   int *r = new int[7];
79*fde4b80cSjkorous-apple   // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:8}:"std::span<int> "
8087b8c85bSRashmi Mudduluru   // CHECK: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{"
8187b8c85bSRashmi Mudduluru   // CHECK: fix-it:"{{.*}}":{[[@LINE-3]]:22-[[@LINE-3]]:22}:", 7}"
82171dfc54SRashmi Mudduluru   int *p = new int[5];
83*fde4b80cSjkorous-apple   // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:8}:"std::span<int> "
8487b8c85bSRashmi Mudduluru   // CHECK: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{"
8587b8c85bSRashmi Mudduluru   // CHECK: fix-it:"{{.*}}":{[[@LINE-3]]:22-[[@LINE-3]]:22}:", 5}"
86171dfc54SRashmi Mudduluru   int *q = new int[4];
87*fde4b80cSjkorous-apple   // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:8}:"std::span<int> "
8887b8c85bSRashmi Mudduluru   // CHECK: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{"
8987b8c85bSRashmi Mudduluru   // CHECK: fix-it:"{{.*}}":{[[@LINE-3]]:22-[[@LINE-3]]:22}:", 4}"
90171dfc54SRashmi Mudduluru   p = q;
91171dfc54SRashmi Mudduluru   int tmp = p[8];
92171dfc54SRashmi Mudduluru   q = r;
93171dfc54SRashmi Mudduluru   tmp = q[8];
94171dfc54SRashmi Mudduluru }
95171dfc54SRashmi Mudduluru 
foo3a()96171dfc54SRashmi Mudduluru void foo3a() {
97171dfc54SRashmi Mudduluru   int *r = new int[7];
98700baeb7SZiqing Luo   // CHECK-NOT: fix-it:"{{.*}}":{[[@LINE-1]]:
99171dfc54SRashmi Mudduluru   int *p = new int[5];
100700baeb7SZiqing Luo   // CHECK-NOT: fix-it:"{{.*}}":{[[@LINE-1]]:
101171dfc54SRashmi Mudduluru   int *q = new int[4];
102700baeb7SZiqing Luo   // CHECK-NOT: fix-it:"{{.*}}":{[[@LINE-1]]:
103700baeb7SZiqing Luo   q = p;  // FIXME: we do not fix `q = p` here as the `.data()` fix-it is not generally correct
104171dfc54SRashmi Mudduluru   int tmp = p[8];
105171dfc54SRashmi Mudduluru   q = r;
106171dfc54SRashmi Mudduluru }
107171dfc54SRashmi Mudduluru 
foo3b()108171dfc54SRashmi Mudduluru void foo3b() {
109171dfc54SRashmi Mudduluru   int *r = new int[10];
110*fde4b80cSjkorous-apple   // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:8}:"std::span<int> "
11187b8c85bSRashmi Mudduluru   // CHECK: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{"
11287b8c85bSRashmi Mudduluru   // CHECK: fix-it:"{{.*}}":{[[@LINE-3]]:23-[[@LINE-3]]:23}:", 10}"
113171dfc54SRashmi Mudduluru   int *p = new int[10];
114*fde4b80cSjkorous-apple   // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:8}:"std::span<int> "
11587b8c85bSRashmi Mudduluru   // CHECK: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{"
11687b8c85bSRashmi Mudduluru   // CHECK: fix-it:"{{.*}}":{[[@LINE-3]]:23-[[@LINE-3]]:23}:", 10}"
117171dfc54SRashmi Mudduluru   int *q = new int[10];
118*fde4b80cSjkorous-apple   // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:8}:"std::span<int> "
11987b8c85bSRashmi Mudduluru   // CHECK: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{"
12087b8c85bSRashmi Mudduluru   // CHECK: fix-it:"{{.*}}":{[[@LINE-3]]:23-[[@LINE-3]]:23}:", 10}"
121171dfc54SRashmi Mudduluru   q = p;
122171dfc54SRashmi Mudduluru   int tmp = q[8];
123171dfc54SRashmi Mudduluru   q = r;
124171dfc54SRashmi Mudduluru }
125