xref: /llvm-project/clang/test/SemaCXX/warn-unsafe-buffer-usage-multi-decl-uuc-fixits.cpp (revision fde4b80cb772897a8cf0b3d022f3041e10b6e816)
1171dfc54SRashmi Mudduluru // RUN: %clang_cc1 -std=c++20 -Wunsafe-buffer-usage \
2171dfc54SRashmi Mudduluru // RUN:            -fsafe-buffer-usage-suggestions \
3171dfc54SRashmi Mudduluru // RUN:            -fdiagnostics-parseable-fixits %s 2>&1 | FileCheck %s
4171dfc54SRashmi Mudduluru 
bar(int * param)5171dfc54SRashmi Mudduluru void bar(int * param) {}
6171dfc54SRashmi Mudduluru 
foo1a()7171dfc54SRashmi Mudduluru void foo1a() {
8171dfc54SRashmi Mudduluru   int *r = new int[7];
9700baeb7SZiqing Luo   // CHECK-NOT: fix-it:"{{.*}}":{[[@LINE-1]]:
10171dfc54SRashmi Mudduluru   int *p = new int[4];
11700baeb7SZiqing Luo   // CHECK-NOT: fix-it:"{{.*}}":{[[@LINE-1]]:
12171dfc54SRashmi Mudduluru   p = r;
13171dfc54SRashmi Mudduluru   int tmp = p[9];
14171dfc54SRashmi Mudduluru   int *q;
15700baeb7SZiqing Luo   q = r; // FIXME: we do not fix `q = r` here as the `.data()` fix-it is not generally correct
16171dfc54SRashmi Mudduluru }
17171dfc54SRashmi Mudduluru 
uuc_if_body()18171dfc54SRashmi Mudduluru void uuc_if_body() {
19171dfc54SRashmi Mudduluru   int *r = new int[7];
20*fde4b80cSjkorous-apple   // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:8}:"std::span<int> "
2187b8c85bSRashmi Mudduluru   // CHECK: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{"
2287b8c85bSRashmi Mudduluru   // CHECK: fix-it:"{{.*}}":{[[@LINE-3]]:22-[[@LINE-3]]:22}:", 7}"
23171dfc54SRashmi Mudduluru   int *p = new int[4];
24*fde4b80cSjkorous-apple   // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:8}:"std::span<int> "
2587b8c85bSRashmi Mudduluru   // CHECK: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{"
2687b8c85bSRashmi Mudduluru   // CHECK: fix-it:"{{.*}}":{[[@LINE-3]]:22-[[@LINE-3]]:22}:", 4}"
27171dfc54SRashmi Mudduluru   if (true)
28171dfc54SRashmi Mudduluru     p = r;
29171dfc54SRashmi Mudduluru   p[5] = 4;
30171dfc54SRashmi Mudduluru }
31171dfc54SRashmi Mudduluru 
uuc_if_body1(bool flag)32171dfc54SRashmi Mudduluru void uuc_if_body1(bool flag) {
33171dfc54SRashmi Mudduluru   int *r = new int[7];
34*fde4b80cSjkorous-apple   // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:8}:"std::span<int> "
3587b8c85bSRashmi Mudduluru   // CHECK: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{"
3687b8c85bSRashmi Mudduluru   // CHECK: fix-it:"{{.*}}":{[[@LINE-3]]:22-[[@LINE-3]]:22}:", 7}"
37171dfc54SRashmi Mudduluru   int *p = new int[4];
38*fde4b80cSjkorous-apple   // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:8}:"std::span<int> "
3987b8c85bSRashmi Mudduluru   // CHECK: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{"
4087b8c85bSRashmi Mudduluru   // CHECK: fix-it:"{{.*}}":{[[@LINE-3]]:22-[[@LINE-3]]:22}:", 4}"
41171dfc54SRashmi Mudduluru   if (flag) {
42171dfc54SRashmi Mudduluru     p = r;
43171dfc54SRashmi Mudduluru   }
44171dfc54SRashmi Mudduluru   p[5] = 4;
45171dfc54SRashmi Mudduluru }
46171dfc54SRashmi Mudduluru 
uuc_if_body2_ptr_init(bool flag)47db3dcedbSRashmi Mudduluru void uuc_if_body2_ptr_init(bool flag) {
48db3dcedbSRashmi 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}"
52db3dcedbSRashmi Mudduluru   if (flag) {
53db3dcedbSRashmi Mudduluru   } else {
54db3dcedbSRashmi Mudduluru     int* p = r;
55*fde4b80cSjkorous-apple     // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:5-[[@LINE-1]]:9}:"std::span<int>"
5687b8c85bSRashmi Mudduluru     // CHECK: fix-it:"{{.*}}":{[[@LINE-2]]:14-[[@LINE-2]]:14}:"{"
5787b8c85bSRashmi Mudduluru     // CHECK: fix-it:"{{.*}}":{[[@LINE-3]]:15-[[@LINE-3]]:15}:", <# placeholder #>}"
58db3dcedbSRashmi Mudduluru     p[5] = 4;
59db3dcedbSRashmi Mudduluru   }
60db3dcedbSRashmi Mudduluru }
61db3dcedbSRashmi Mudduluru 
uuc_if_cond_no_unsafe_op()62171dfc54SRashmi Mudduluru void uuc_if_cond_no_unsafe_op() {
63171dfc54SRashmi Mudduluru   int *r = new int[7];
64171dfc54SRashmi Mudduluru   int *p = new int[4];
65171dfc54SRashmi Mudduluru   if ((p = r)) {
66171dfc54SRashmi Mudduluru     int x = 0;
67171dfc54SRashmi Mudduluru   }
68171dfc54SRashmi Mudduluru }
69171dfc54SRashmi Mudduluru 
uuc_if_cond_unsafe_op()70171dfc54SRashmi Mudduluru void uuc_if_cond_unsafe_op() {
71171dfc54SRashmi Mudduluru   int *r = new int[7];
72db3dcedbSRashmi Mudduluru   int *p = new int[4];
73171dfc54SRashmi Mudduluru   if ((p = r)) {
74db3dcedbSRashmi Mudduluru     p[3] = 2;
75171dfc54SRashmi Mudduluru   }
76171dfc54SRashmi Mudduluru }
77171dfc54SRashmi Mudduluru 
uuc_if_cond_unsafe_op1()78171dfc54SRashmi Mudduluru void uuc_if_cond_unsafe_op1() {
79db3dcedbSRashmi Mudduluru   int *r = new int[7];
80171dfc54SRashmi Mudduluru   int *p = new int[4];
81171dfc54SRashmi Mudduluru   if ((p = r)) {
82db3dcedbSRashmi Mudduluru     r[3] = 2;
83171dfc54SRashmi Mudduluru   }
84171dfc54SRashmi Mudduluru }
85171dfc54SRashmi Mudduluru 
uuc_if_cond_unsafe_op2()86171dfc54SRashmi Mudduluru void uuc_if_cond_unsafe_op2() {
87db3dcedbSRashmi Mudduluru   int *r = new int[7];
88db3dcedbSRashmi Mudduluru   int *p = new int[4];
89171dfc54SRashmi Mudduluru   if ((p = r)) {
90db3dcedbSRashmi Mudduluru     r[3] = 2;
91171dfc54SRashmi Mudduluru   }
92db3dcedbSRashmi Mudduluru   p[4] = 6;
93171dfc54SRashmi Mudduluru }
94171dfc54SRashmi Mudduluru 
uuc_call1()95171dfc54SRashmi Mudduluru void uuc_call1() {
96db3dcedbSRashmi Mudduluru   int *w = new int[4];
97171dfc54SRashmi Mudduluru   int *y = new int[4];
98171dfc54SRashmi Mudduluru   bar(w = y);
99db3dcedbSRashmi Mudduluru   w[5] = 0;
100171dfc54SRashmi Mudduluru }
101