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 Mudduluruvoid bar(int * param) {} 6171dfc54SRashmi Mudduluru foo1a()7171dfc54SRashmi Mudduluruvoid 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 Mudduluruvoid 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 Mudduluruvoid 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 Mudduluruvoid 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 Mudduluruvoid 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 Mudduluruvoid 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 Mudduluruvoid 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 Mudduluruvoid 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 Mudduluruvoid 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