1*171dfc54SRashmi Mudduluru // RUN: %clang_cc1 -std=c++20 -Wunsafe-buffer-usage -fdiagnostics-parseable-fixits -fsafe-buffer-usage-suggestions %s 2>&1 | FileCheck %s 2*171dfc54SRashmi Mudduluru 3*171dfc54SRashmi Mudduluru void foo1a() { 4*171dfc54SRashmi Mudduluru int *r = new int[7]; 5*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:11}:"std::span<int> r" 6*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{" 7*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-3]]:22-[[@LINE-3]]:22}:", 7}" 8*171dfc54SRashmi Mudduluru int *p = new int[4]; 9*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:11}:"std::span<int> p" 10*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{" 11*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-3]]:22-[[@LINE-3]]:22}:", 4}" 12*171dfc54SRashmi Mudduluru p = r; 13*171dfc54SRashmi Mudduluru int tmp = p[9]; 14*171dfc54SRashmi Mudduluru int *q; 15*171dfc54SRashmi Mudduluru // CHECK-NOT: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:11}:"std::span<int> q" 16*171dfc54SRashmi Mudduluru q = r; 17*171dfc54SRashmi Mudduluru } 18*171dfc54SRashmi Mudduluru 19*171dfc54SRashmi Mudduluru void foo1b() { 20*171dfc54SRashmi Mudduluru int *r = new int[7]; 21*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:11}:"std::span<int> r" 22*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{" 23*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-3]]:22-[[@LINE-3]]:22}:", 7}" 24*171dfc54SRashmi Mudduluru int *p = new int[4]; 25*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:11}:"std::span<int> p" 26*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{" 27*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-3]]:22-[[@LINE-3]]:22}:", 4}" 28*171dfc54SRashmi Mudduluru p = r; 29*171dfc54SRashmi Mudduluru int tmp = p[9]; 30*171dfc54SRashmi Mudduluru int *q = new int[4]; 31*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:11}:"std::span<int> q" 32*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{" 33*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-3]]:22-[[@LINE-3]]:22}:", 4}" 34*171dfc54SRashmi Mudduluru q = r; 35*171dfc54SRashmi Mudduluru tmp = q[9]; 36*171dfc54SRashmi Mudduluru } 37*171dfc54SRashmi Mudduluru 38*171dfc54SRashmi Mudduluru void foo1c() { 39*171dfc54SRashmi Mudduluru int *r = new int[7]; 40*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:11}:"std::span<int> r" 41*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{" 42*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-3]]:22-[[@LINE-3]]:22}:", 7}" 43*171dfc54SRashmi Mudduluru int *p = new int[4]; 44*171dfc54SRashmi Mudduluru // CHECK-NOT: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:11}:"std::span<int> p" 45*171dfc54SRashmi Mudduluru p = r; 46*171dfc54SRashmi Mudduluru int tmp = r[9]; 47*171dfc54SRashmi Mudduluru int *q; 48*171dfc54SRashmi Mudduluru // CHECK-NOT: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:11}:"std::span<int> q" 49*171dfc54SRashmi Mudduluru q = r; 50*171dfc54SRashmi Mudduluru tmp = q[9]; 51*171dfc54SRashmi Mudduluru } 52*171dfc54SRashmi Mudduluru 53*171dfc54SRashmi Mudduluru void foo2a() { 54*171dfc54SRashmi Mudduluru int *r = new int[7]; 55*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:11}:"std::span<int> r" 56*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{" 57*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-3]]:22-[[@LINE-3]]:22}:", 7}" 58*171dfc54SRashmi Mudduluru int *p = new int[5]; 59*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:11}:"std::span<int> p" 60*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{" 61*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-3]]:22-[[@LINE-3]]:22}:", 5}" 62*171dfc54SRashmi Mudduluru int *q = new int[4]; 63*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:11}:"std::span<int> q" 64*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{" 65*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-3]]:22-[[@LINE-3]]:22}:", 4}" 66*171dfc54SRashmi Mudduluru p = q; 67*171dfc54SRashmi Mudduluru int tmp = p[8]; 68*171dfc54SRashmi Mudduluru q = r; 69*171dfc54SRashmi Mudduluru } 70*171dfc54SRashmi Mudduluru 71*171dfc54SRashmi Mudduluru void foo2b() { 72*171dfc54SRashmi Mudduluru int *r = new int[7]; 73*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:11}:"std::span<int> r" 74*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{" 75*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-3]]:22-[[@LINE-3]]:22}:", 7}" 76*171dfc54SRashmi Mudduluru int *p = new int[5]; 77*171dfc54SRashmi Mudduluru // CHECK-NOT: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:11}:"std::span<int> p" 78*171dfc54SRashmi Mudduluru // CHECK-NOT: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{" 79*171dfc54SRashmi Mudduluru // CHECK-NOT: fix-it:"{{.*}}":{[[@LINE-3]]:22-[[@LINE-3]]:22}:", 5}" 80*171dfc54SRashmi Mudduluru int *q = new int[4]; 81*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:11}:"std::span<int> q" 82*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{" 83*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-3]]:22-[[@LINE-3]]:22}:", 4}" 84*171dfc54SRashmi Mudduluru p = q; 85*171dfc54SRashmi Mudduluru int tmp = q[8]; 86*171dfc54SRashmi Mudduluru q = r; 87*171dfc54SRashmi Mudduluru } 88*171dfc54SRashmi Mudduluru 89*171dfc54SRashmi Mudduluru void foo2c() { 90*171dfc54SRashmi Mudduluru int *r = new int[7]; 91*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:11}:"std::span<int> r" 92*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{" 93*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-3]]:22-[[@LINE-3]]:22}:", 7}" 94*171dfc54SRashmi Mudduluru int *p = new int[5]; 95*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:11}:"std::span<int> p" 96*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{" 97*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-3]]:22-[[@LINE-3]]:22}:", 5}" 98*171dfc54SRashmi Mudduluru int *q = new int[4]; 99*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:11}:"std::span<int> q" 100*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{" 101*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-3]]:22-[[@LINE-3]]:22}:", 4}" 102*171dfc54SRashmi Mudduluru p = q; 103*171dfc54SRashmi Mudduluru int tmp = p[8]; 104*171dfc54SRashmi Mudduluru q = r; 105*171dfc54SRashmi Mudduluru tmp = q[8]; 106*171dfc54SRashmi Mudduluru } 107*171dfc54SRashmi Mudduluru 108*171dfc54SRashmi Mudduluru void foo3a() { 109*171dfc54SRashmi Mudduluru int *r = new int[7]; 110*171dfc54SRashmi Mudduluru // CHECK-NOT: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:11}:"std::span<int> r" 111*171dfc54SRashmi Mudduluru int *p = new int[5]; 112*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:11}:"std::span<int> p" 113*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{" 114*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-3]]:22-[[@LINE-3]]:22}:", 5}" 115*171dfc54SRashmi Mudduluru int *q = new int[4]; 116*171dfc54SRashmi Mudduluru // CHECK-NOT: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:11}:"std::span<int> q" 117*171dfc54SRashmi Mudduluru q = p; 118*171dfc54SRashmi Mudduluru int tmp = p[8]; 119*171dfc54SRashmi Mudduluru q = r; 120*171dfc54SRashmi Mudduluru } 121*171dfc54SRashmi Mudduluru 122*171dfc54SRashmi Mudduluru void foo3b() { 123*171dfc54SRashmi Mudduluru int *r = new int[10]; 124*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:11}:"std::span<int> r" 125*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{" 126*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-3]]:23-[[@LINE-3]]:23}:", 10}" 127*171dfc54SRashmi Mudduluru int *p = new int[10]; 128*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:11}:"std::span<int> p" 129*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{" 130*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-3]]:23-[[@LINE-3]]:23}:", 10}" 131*171dfc54SRashmi Mudduluru int *q = new int[10]; 132*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:11}:"std::span<int> q" 133*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{" 134*171dfc54SRashmi Mudduluru // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-3]]:23-[[@LINE-3]]:23}:", 10}" 135*171dfc54SRashmi Mudduluru q = p; 136*171dfc54SRashmi Mudduluru int tmp = q[8]; 137*171dfc54SRashmi Mudduluru q = r; 138*171dfc54SRashmi Mudduluru } 139