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-applevoid 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-applevoid 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-applevoid 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-applevoid 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