[clang] Implement lifetime analysis for lifetime_capture_by(X) (#115921)
[llvm-project.git] / clang / test / SemaCXX / warn-unsafe-buffer-usage-fixits-local-var-span-cv-qualifiers.cpp
blob4c7b5df2cba5b000437ca055fc895aaef50cbc6c
1 // RUN: %clang_cc1 -std=c++20 -Wunsafe-buffer-usage \
2 // RUN: -fsafe-buffer-usage-suggestions \
3 // RUN: -fdiagnostics-parseable-fixits %s 2>&1 | FileCheck %s
5 int ptr(unsigned idx) {
6 int * ptr = new int[1];
7 // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:8}:"std::span<int>"
8 int a;
9 a = ptr[idx];
10 return a;
13 int ptr_to_const(unsigned idx) {
14 const int * ptr = new int[1];
15 // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:14}:"std::span<int const>"
16 int a;
17 a = ptr[idx];
18 return a;
21 int const_ptr(unsigned idx) {
22 int * const ptr = new int[1];
23 // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:8}:"std::span<int>"
24 int a;
25 a = ptr[idx];
26 return a;
29 int const_ptr_to_const(unsigned idx) {
30 const int * const ptr = new int[1];
31 // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:14}:"std::span<int const>"
32 int a;
33 a = ptr[idx];
34 return a;
37 int ptr_to_const_volatile(unsigned idx) {
38 const volatile int * ptr = new int[1];
39 // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:23}:"std::span<int const volatile>"
40 int a;
41 a = ptr[idx];
42 return a;
45 int const_volatile_ptr(unsigned idx) {
46 int * const volatile ptr = new int[1];
47 // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:8}:"std::span<int>"
48 int a;
49 a = ptr[idx];
50 return a;
53 int const_volatile_ptr_to_const_volatile(unsigned idx) {
54 const volatile int * const volatile ptr = new int[1];
55 // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:23}:"std::span<int const volatile>"
56 int a;
57 a = ptr[idx];
58 return a;
61 typedef const int * my_const_int_star;
62 int typedef_ptr_to_const(unsigned idx) {
63 my_const_int_star ptr = new int[1];
64 // CHECK-NOT: fix-it:"{{.*}}":{[[@LINE-1]]:
65 int a;
66 a = ptr[idx];
67 return a;
70 typedef int * const my_int_star_const;
71 int typedef_const_ptr(unsigned idx) {
72 my_int_star_const ptr = new int[1];
73 // CHECK-NOT: fix-it:"{{.*}}":{[[@LINE-1]]:
74 int a;
75 a = ptr[idx];
76 return a;
79 typedef const int * const my_const_int_star_const;
80 int typedef_const_ptr_to_const(unsigned idx) {
81 my_const_int_star_const ptr = new int[1];
82 // CHECK-NOT: fix-it:"{{.*}}":{[[@LINE-1]]:
83 int a;
84 a = ptr[idx];
85 return a;
88 int ptr_to_decltype(unsigned idx) {
89 int a;
90 decltype(a) * ptr = new int[1];
91 // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:16}:"std::span<decltype(a)>"
92 a = ptr[idx];
93 return a;
96 int decltype_ptr(unsigned idx) {
97 int * p;
98 decltype(p) ptr = new int[1];
99 // CHECK-NOT: fix-it:"{{.*}}":{[[@LINE-1]]:
100 int a;
101 a = ptr[idx];
102 return a;