xref: /llvm-project/clang/test/SemaCXX/warn-unsafe-buffer-usage-fixits-array-assign-to-ptr.cpp (revision fde4b80cb772897a8cf0b3d022f3041e10b6e816)
16fce42f8Sjkorous-apple // RUN: %clang_cc1 -std=c++20 -Wunsafe-buffer-usage \
26fce42f8Sjkorous-apple // RUN:            -fsafe-buffer-usage-suggestions \
36fce42f8Sjkorous-apple // RUN:            -fdiagnostics-parseable-fixits %s 2>&1 | FileCheck %s
46fce42f8Sjkorous-apple 
safe_array_assigned_to_safe_ptr(unsigned idx)56fce42f8Sjkorous-apple void safe_array_assigned_to_safe_ptr(unsigned idx) {
66fce42f8Sjkorous-apple   int buffer[10];
76fce42f8Sjkorous-apple   // CHECK-NOT: fix-it:"{{.*}}":{[[@LINE-1]]:
86fce42f8Sjkorous-apple   int* ptr;
96fce42f8Sjkorous-apple   // CHECK-NOT: fix-it:"{{.*}}":{[[@LINE-1]]:
106fce42f8Sjkorous-apple   ptr = buffer;
116fce42f8Sjkorous-apple   // CHECK-NOT: fix-it:"{{.*}}":{[[@LINE-1]]:
126fce42f8Sjkorous-apple }
136fce42f8Sjkorous-apple 
safe_array_assigned_to_unsafe_ptr(unsigned idx)146fce42f8Sjkorous-apple void safe_array_assigned_to_unsafe_ptr(unsigned idx) {
156fce42f8Sjkorous-apple   int buffer[10];
166fce42f8Sjkorous-apple   // CHECK-NOT: fix-it:"{{.*}}":{[[@LINE-1]]:
176fce42f8Sjkorous-apple   int* ptr;
18*fde4b80cSjkorous-apple   // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:7}:"std::span<int>"
196fce42f8Sjkorous-apple   ptr = buffer;
206fce42f8Sjkorous-apple   // CHECK-NOT: fix-it:"{{.*}}":{[[@LINE-1]]:
216fce42f8Sjkorous-apple   ptr[idx] = 0;
226fce42f8Sjkorous-apple }
236fce42f8Sjkorous-apple 
unsafe_array_assigned_to_safe_ptr(unsigned idx)246fce42f8Sjkorous-apple void unsafe_array_assigned_to_safe_ptr(unsigned idx) {
256fce42f8Sjkorous-apple   int buffer[10];
266fce42f8Sjkorous-apple   // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:17}:"std::array<int, 10> buffer"
276fce42f8Sjkorous-apple   int* ptr;
286fce42f8Sjkorous-apple   // CHECK-NOT: fix-it:"{{.*}}":{[[@LINE-1]]:
296fce42f8Sjkorous-apple   ptr = buffer;
306fce42f8Sjkorous-apple   // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:15-[[@LINE-1]]:15}:".data()"
316fce42f8Sjkorous-apple   buffer[idx] = 0;
326fce42f8Sjkorous-apple }
336fce42f8Sjkorous-apple 
346fce42f8Sjkorous-apple // FIXME: Implement fixit/s for this case.
356fce42f8Sjkorous-apple // See comment in CArrayToPtrAssignmentGadget::getFixits to learn why this hasn't been implemented.
unsafe_array_assigned_to_unsafe_ptr(unsigned idx)366fce42f8Sjkorous-apple void unsafe_array_assigned_to_unsafe_ptr(unsigned idx) {
376fce42f8Sjkorous-apple   int buffer[10];
386fce42f8Sjkorous-apple   // CHECK-NOT: fix-it:"{{.*}}":{[[@LINE-1]]:{{.*}}
396fce42f8Sjkorous-apple   int* ptr;
406fce42f8Sjkorous-apple   // CHECK-NOT: fix-it:"{{.*}}":{[[@LINE-1]]:{{.*}}
416fce42f8Sjkorous-apple   ptr = buffer;
426fce42f8Sjkorous-apple   // CHECK-NOT: fix-it:"{{.*}}":{[[@LINE-1]]:{{.*}}
436fce42f8Sjkorous-apple   buffer[idx] = 0;
446fce42f8Sjkorous-apple   ptr[idx] = 0;
456fce42f8Sjkorous-apple }
46