xref: /llvm-project/clang-tools-extra/test/clang-tidy/checkers/bugprone/stringview-nullptr.cpp (revision 89a1d03e2b379e325daa5249411e414bbd995b5e)
1*89a1d03eSRichard // RUN: %check_clang_tidy %s bugprone-stringview-nullptr -std=c++17 %t
2*89a1d03eSRichard 
3*89a1d03eSRichard namespace std {
4*89a1d03eSRichard 
5*89a1d03eSRichard using size_t = long long;
6*89a1d03eSRichard using nullptr_t = decltype(nullptr);
7*89a1d03eSRichard 
8*89a1d03eSRichard template <typename T>
9*89a1d03eSRichard T &&declval();
10*89a1d03eSRichard 
11*89a1d03eSRichard template <typename T>
12*89a1d03eSRichard struct type_identity { using type = T; };
13*89a1d03eSRichard template <typename T>
14*89a1d03eSRichard using type_identity_t = typename type_identity<T>::type;
15*89a1d03eSRichard 
16*89a1d03eSRichard template <typename CharT>
17*89a1d03eSRichard class basic_string_view {
18*89a1d03eSRichard public:
basic_string_view()19*89a1d03eSRichard   constexpr basic_string_view() {}
20*89a1d03eSRichard 
basic_string_view(const CharT *)21*89a1d03eSRichard   constexpr basic_string_view(const CharT *) {}
22*89a1d03eSRichard 
23*89a1d03eSRichard   // Not present in C++17 and C++20:
24*89a1d03eSRichard   // constexpr basic_string_view(std::nullptr_t) {}
25*89a1d03eSRichard 
basic_string_view(const CharT *,size_t)26*89a1d03eSRichard   constexpr basic_string_view(const CharT *, size_t) {}
27*89a1d03eSRichard 
basic_string_view(const basic_string_view &)28*89a1d03eSRichard   constexpr basic_string_view(const basic_string_view &) {}
29*89a1d03eSRichard 
operator =(const basic_string_view &)30*89a1d03eSRichard   constexpr basic_string_view &operator=(const basic_string_view &) {}
31*89a1d03eSRichard };
32*89a1d03eSRichard 
33*89a1d03eSRichard template <typename CharT>
operator <(basic_string_view<CharT>,basic_string_view<CharT>)34*89a1d03eSRichard constexpr bool operator<(basic_string_view<CharT>, basic_string_view<CharT>) {
35*89a1d03eSRichard   return {};
36*89a1d03eSRichard }
37*89a1d03eSRichard template <typename CharT>
operator <(type_identity_t<basic_string_view<CharT>>,basic_string_view<CharT>)38*89a1d03eSRichard constexpr bool operator<(type_identity_t<basic_string_view<CharT>>,
39*89a1d03eSRichard                          basic_string_view<CharT>) {
40*89a1d03eSRichard   return {};
41*89a1d03eSRichard }
42*89a1d03eSRichard template <typename CharT>
operator <(basic_string_view<CharT>,type_identity_t<basic_string_view<CharT>>)43*89a1d03eSRichard constexpr bool operator<(basic_string_view<CharT>,
44*89a1d03eSRichard                          type_identity_t<basic_string_view<CharT>>) {
45*89a1d03eSRichard   return {};
46*89a1d03eSRichard }
47*89a1d03eSRichard 
48*89a1d03eSRichard template <typename CharT>
operator <=(basic_string_view<CharT>,basic_string_view<CharT>)49*89a1d03eSRichard constexpr bool operator<=(basic_string_view<CharT>, basic_string_view<CharT>) {
50*89a1d03eSRichard   return {};
51*89a1d03eSRichard }
52*89a1d03eSRichard template <typename CharT>
operator <=(type_identity_t<basic_string_view<CharT>>,basic_string_view<CharT>)53*89a1d03eSRichard constexpr bool operator<=(type_identity_t<basic_string_view<CharT>>,
54*89a1d03eSRichard                           basic_string_view<CharT>) {
55*89a1d03eSRichard   return {};
56*89a1d03eSRichard }
57*89a1d03eSRichard template <typename CharT>
operator <=(basic_string_view<CharT>,type_identity_t<basic_string_view<CharT>>)58*89a1d03eSRichard constexpr bool operator<=(basic_string_view<CharT>,
59*89a1d03eSRichard                           type_identity_t<basic_string_view<CharT>>) {
60*89a1d03eSRichard   return {};
61*89a1d03eSRichard }
62*89a1d03eSRichard 
63*89a1d03eSRichard template <typename CharT>
operator >(basic_string_view<CharT>,basic_string_view<CharT>)64*89a1d03eSRichard constexpr bool operator>(basic_string_view<CharT>, basic_string_view<CharT>) {
65*89a1d03eSRichard   return {};
66*89a1d03eSRichard }
67*89a1d03eSRichard template <typename CharT>
operator >(type_identity_t<basic_string_view<CharT>>,basic_string_view<CharT>)68*89a1d03eSRichard constexpr bool operator>(type_identity_t<basic_string_view<CharT>>,
69*89a1d03eSRichard                          basic_string_view<CharT>) {
70*89a1d03eSRichard   return {};
71*89a1d03eSRichard }
72*89a1d03eSRichard template <typename CharT>
operator >(basic_string_view<CharT>,type_identity_t<basic_string_view<CharT>>)73*89a1d03eSRichard constexpr bool operator>(basic_string_view<CharT>,
74*89a1d03eSRichard                          type_identity_t<basic_string_view<CharT>>) {
75*89a1d03eSRichard   return {};
76*89a1d03eSRichard }
77*89a1d03eSRichard 
78*89a1d03eSRichard template <typename CharT>
operator >=(basic_string_view<CharT>,basic_string_view<CharT>)79*89a1d03eSRichard constexpr bool operator>=(basic_string_view<CharT>, basic_string_view<CharT>) {
80*89a1d03eSRichard   return {};
81*89a1d03eSRichard }
82*89a1d03eSRichard template <typename CharT>
operator >=(type_identity_t<basic_string_view<CharT>>,basic_string_view<CharT>)83*89a1d03eSRichard constexpr bool operator>=(type_identity_t<basic_string_view<CharT>>,
84*89a1d03eSRichard                           basic_string_view<CharT>) {
85*89a1d03eSRichard   return {};
86*89a1d03eSRichard }
87*89a1d03eSRichard template <typename CharT>
operator >=(basic_string_view<CharT>,type_identity_t<basic_string_view<CharT>>)88*89a1d03eSRichard constexpr bool operator>=(basic_string_view<CharT>,
89*89a1d03eSRichard                           type_identity_t<basic_string_view<CharT>>) {
90*89a1d03eSRichard   return {};
91*89a1d03eSRichard }
92*89a1d03eSRichard 
93*89a1d03eSRichard template <typename CharT>
operator ==(basic_string_view<CharT>,basic_string_view<CharT>)94*89a1d03eSRichard constexpr bool operator==(basic_string_view<CharT>, basic_string_view<CharT>) {
95*89a1d03eSRichard   return {};
96*89a1d03eSRichard }
97*89a1d03eSRichard template <typename CharT>
operator ==(type_identity_t<basic_string_view<CharT>>,basic_string_view<CharT>)98*89a1d03eSRichard constexpr bool operator==(type_identity_t<basic_string_view<CharT>>,
99*89a1d03eSRichard                           basic_string_view<CharT>) {
100*89a1d03eSRichard   return {};
101*89a1d03eSRichard }
102*89a1d03eSRichard template <typename CharT>
operator ==(basic_string_view<CharT>,type_identity_t<basic_string_view<CharT>>)103*89a1d03eSRichard constexpr bool operator==(basic_string_view<CharT>,
104*89a1d03eSRichard                           type_identity_t<basic_string_view<CharT>>) {
105*89a1d03eSRichard   return {};
106*89a1d03eSRichard }
107*89a1d03eSRichard 
108*89a1d03eSRichard template <typename CharT>
operator !=(basic_string_view<CharT>,basic_string_view<CharT>)109*89a1d03eSRichard constexpr bool operator!=(basic_string_view<CharT>, basic_string_view<CharT>) {
110*89a1d03eSRichard   return {};
111*89a1d03eSRichard }
112*89a1d03eSRichard template <typename CharT>
operator !=(type_identity_t<basic_string_view<CharT>>,basic_string_view<CharT>)113*89a1d03eSRichard constexpr bool operator!=(type_identity_t<basic_string_view<CharT>>,
114*89a1d03eSRichard                           basic_string_view<CharT>) {
115*89a1d03eSRichard   return {};
116*89a1d03eSRichard }
117*89a1d03eSRichard template <typename CharT>
operator !=(basic_string_view<CharT>,type_identity_t<basic_string_view<CharT>>)118*89a1d03eSRichard constexpr bool operator!=(basic_string_view<CharT>,
119*89a1d03eSRichard                           type_identity_t<basic_string_view<CharT>>) {
120*89a1d03eSRichard   return {};
121*89a1d03eSRichard }
122*89a1d03eSRichard 
123*89a1d03eSRichard using string_view = basic_string_view<char>;
124*89a1d03eSRichard 
125*89a1d03eSRichard } // namespace std
126*89a1d03eSRichard 
127*89a1d03eSRichard using SV = std::string_view; // Used in some places for shorter line length
128*89a1d03eSRichard 
129*89a1d03eSRichard void function(std::string_view);
130*89a1d03eSRichard void function(std::string_view, std::string_view);
131*89a1d03eSRichard 
temporary_construction()132*89a1d03eSRichard void temporary_construction() /* a */ {
133*89a1d03eSRichard   // Functional Cast
134*89a1d03eSRichard   {
135*89a1d03eSRichard     (void)(std::string_view(nullptr)) /* a1 */;
136*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:29: warning: constructing basic_string_view from null is undefined; replace with the default constructor
137*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(std::string_view()) /* a1 */;
138*89a1d03eSRichard 
139*89a1d03eSRichard     (void)(std::string_view((nullptr))) /* a2 */;
140*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:29: warning: constructing{{.*}}default
141*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(std::string_view()) /* a2 */;
142*89a1d03eSRichard 
143*89a1d03eSRichard     (void)(std::string_view({nullptr})) /* a3 */;
144*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:29: warning: constructing{{.*}}default
145*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(std::string_view()) /* a3 */;
146*89a1d03eSRichard 
147*89a1d03eSRichard     (void)(std::string_view({(nullptr)})) /* a4 */;
148*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:29: warning: constructing{{.*}}default
149*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(std::string_view()) /* a4 */;
150*89a1d03eSRichard 
151*89a1d03eSRichard     (void)(std::string_view({})) /* a5 */; // Default `const CharT*`
152*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:29: warning: constructing{{.*}}default
153*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(std::string_view()) /* a5 */;
154*89a1d03eSRichard   }
155*89a1d03eSRichard 
156*89a1d03eSRichard   // Temporary Object
157*89a1d03eSRichard   {
158*89a1d03eSRichard     (void)(std::string_view{nullptr}) /* a6 */;
159*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:29: warning: constructing{{.*}}default
160*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(std::string_view{}) /* a6 */;
161*89a1d03eSRichard 
162*89a1d03eSRichard     (void)(std::string_view{(nullptr)}) /* a7 */;
163*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:29: warning: constructing{{.*}}default
164*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(std::string_view{}) /* a7 */;
165*89a1d03eSRichard 
166*89a1d03eSRichard     (void)(std::string_view{{nullptr}}) /* a8 */;
167*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:29: warning: constructing{{.*}}default
168*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(std::string_view{}) /* a8 */;
169*89a1d03eSRichard 
170*89a1d03eSRichard     (void)(std::string_view{{(nullptr)}}) /* a9 */;
171*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:29: warning: constructing{{.*}}default
172*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(std::string_view{}) /* a9 */;
173*89a1d03eSRichard 
174*89a1d03eSRichard     (void)(std::string_view{{}}) /* a10 */; // Default `const CharT*`
175*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:29: warning: constructing{{.*}}default
176*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(std::string_view{}) /* a10 */;
177*89a1d03eSRichard   }
178*89a1d03eSRichard 
179*89a1d03eSRichard   // C-Style Cast && Compound Literal
180*89a1d03eSRichard   {
181*89a1d03eSRichard     (void)((std::string_view) nullptr) /* a11 */;
182*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:31: warning: constructing{{.*}}default
183*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)((std::string_view) {}) /* a11 */;
184*89a1d03eSRichard 
185*89a1d03eSRichard     (void)((std::string_view)(nullptr)) /* a12 */;
186*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:30: warning: constructing{{.*}}default
187*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)((std::string_view){}) /* a12 */;
188*89a1d03eSRichard 
189*89a1d03eSRichard     (void)((std::string_view){nullptr}) /* a13 */;
190*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:31: warning: constructing{{.*}}default
191*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)((std::string_view){}) /* a13 */;
192*89a1d03eSRichard 
193*89a1d03eSRichard     (void)((std::string_view){(nullptr)}) /* a14 */;
194*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:31: warning: constructing{{.*}}default
195*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)((std::string_view){}) /* a14 */;
196*89a1d03eSRichard 
197*89a1d03eSRichard     (void)((std::string_view){{nullptr}}) /* a15 */;
198*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:31: warning: constructing{{.*}}default
199*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)((std::string_view){}) /* a15 */;
200*89a1d03eSRichard 
201*89a1d03eSRichard     (void)((std::string_view){{(nullptr)}}) /* a16 */;
202*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:31: warning: constructing{{.*}}default
203*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)((std::string_view){}) /* a16 */;
204*89a1d03eSRichard 
205*89a1d03eSRichard     (void)((std::string_view){{}}) /* a17 */; // Default `const CharT*`
206*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:31: warning: constructing{{.*}}default
207*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)((std::string_view){}) /* a17 */;
208*89a1d03eSRichard 
209*89a1d03eSRichard     (void)((const std::string_view) nullptr) /* a18 */;
210*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:37: warning: constructing{{.*}}default
211*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)((const std::string_view) {}) /* a18 */;
212*89a1d03eSRichard 
213*89a1d03eSRichard     (void)((const std::string_view)(nullptr)) /* a19 */;
214*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:36: warning: constructing{{.*}}default
215*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)((const std::string_view){}) /* a19 */;
216*89a1d03eSRichard 
217*89a1d03eSRichard     (void)((const std::string_view){nullptr}) /* a20 */;
218*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:37: warning: constructing{{.*}}default
219*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)((const std::string_view){}) /* a20 */;
220*89a1d03eSRichard 
221*89a1d03eSRichard     (void)((const std::string_view){(nullptr)}) /* a21 */;
222*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:37: warning: constructing{{.*}}default
223*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)((const std::string_view){}) /* a21 */;
224*89a1d03eSRichard 
225*89a1d03eSRichard     (void)((const std::string_view){{nullptr}}) /* a22 */;
226*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:37: warning: constructing{{.*}}default
227*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)((const std::string_view){}) /* a22 */;
228*89a1d03eSRichard 
229*89a1d03eSRichard     (void)((const std::string_view){{(nullptr)}}) /* a23 */;
230*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:37: warning: constructing{{.*}}default
231*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)((const std::string_view){}) /* a23 */;
232*89a1d03eSRichard 
233*89a1d03eSRichard     (void)((const std::string_view){{}}) /* a24 */; // Default `const CharT*`
234*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:37: warning: constructing{{.*}}default
235*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)((const std::string_view){}) /* a24 */;
236*89a1d03eSRichard   }
237*89a1d03eSRichard 
238*89a1d03eSRichard   // Static Cast
239*89a1d03eSRichard   {
240*89a1d03eSRichard     (void)(static_cast<std::string_view>(nullptr)) /* a25 */;
241*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:42: warning: casting to basic_string_view from null is undefined; replace with the empty string
242*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(static_cast<std::string_view>("")) /* a25 */;
243*89a1d03eSRichard 
244*89a1d03eSRichard     (void)(static_cast<std::string_view>((nullptr))) /* a26 */;
245*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:42: warning: casting{{.*}}empty string
246*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(static_cast<std::string_view>("")) /* a26 */;
247*89a1d03eSRichard 
248*89a1d03eSRichard     (void)(static_cast<const std::string_view>(nullptr)) /* a27 */;
249*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:48: warning: casting{{.*}}empty string
250*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(static_cast<const std::string_view>("")) /* a27 */;
251*89a1d03eSRichard 
252*89a1d03eSRichard     (void)(static_cast<const std::string_view>((nullptr))) /* a28 */;
253*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:48: warning: casting{{.*}}empty string
254*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(static_cast<const std::string_view>("")) /* a28 */;
255*89a1d03eSRichard   }
256*89a1d03eSRichard }
257*89a1d03eSRichard 
stack_construction()258*89a1d03eSRichard void stack_construction() /* b */ {
259*89a1d03eSRichard   // Copy Initialization
260*89a1d03eSRichard   {
261*89a1d03eSRichard     std::string_view b1 = nullptr;
262*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:27: warning: constructing{{.*}}default
263*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view b1 = {};
264*89a1d03eSRichard 
265*89a1d03eSRichard     std::string_view b2 = (nullptr);
266*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:27: warning: constructing{{.*}}default
267*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view b2 = {};
268*89a1d03eSRichard 
269*89a1d03eSRichard     const std::string_view b3 = nullptr;
270*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:33: warning: constructing{{.*}}default
271*89a1d03eSRichard     // CHECK-FIXES: {{^}}    const std::string_view b3 = {};
272*89a1d03eSRichard 
273*89a1d03eSRichard     const std::string_view b4 = (nullptr);
274*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:33: warning: constructing{{.*}}default
275*89a1d03eSRichard     // CHECK-FIXES: {{^}}    const std::string_view b4 = {};
276*89a1d03eSRichard   }
277*89a1d03eSRichard 
278*89a1d03eSRichard   // Copy Initialization With Temporary
279*89a1d03eSRichard   {
280*89a1d03eSRichard     std::string_view b5 = std::string_view(nullptr);
281*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:44: warning: constructing{{.*}}default
282*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view b5 = std::string_view();
283*89a1d03eSRichard 
284*89a1d03eSRichard     std::string_view b6 = std::string_view{nullptr};
285*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:44: warning: constructing{{.*}}default
286*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view b6 = std::string_view{};
287*89a1d03eSRichard 
288*89a1d03eSRichard     std::string_view b7 = (std::string_view) nullptr;
289*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:46: warning: constructing{{.*}}default
290*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view b7 = (std::string_view) {};
291*89a1d03eSRichard 
292*89a1d03eSRichard     std::string_view b8 = (std::string_view){nullptr};
293*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:46: warning: constructing{{.*}}default
294*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view b8 = (std::string_view){};
295*89a1d03eSRichard 
296*89a1d03eSRichard     std::string_view b9 = static_cast<SV>(nullptr);
297*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:43: warning: casting{{.*}}empty string
298*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view b9 = static_cast<SV>("");
299*89a1d03eSRichard   }
300*89a1d03eSRichard 
301*89a1d03eSRichard   // Copy List Initialization
302*89a1d03eSRichard   {
303*89a1d03eSRichard     std::string_view b10 = {nullptr};
304*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:29: warning: constructing{{.*}}default
305*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view b10 = {};
306*89a1d03eSRichard 
307*89a1d03eSRichard     std::string_view b11 = {(nullptr)};
308*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:29: warning: constructing{{.*}}default
309*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view b11 = {};
310*89a1d03eSRichard 
311*89a1d03eSRichard     std::string_view b12 = {{nullptr}};
312*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:29: warning: constructing{{.*}}default
313*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view b12 = {};
314*89a1d03eSRichard 
315*89a1d03eSRichard     std::string_view b13 = {{(nullptr)}};
316*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:29: warning: constructing{{.*}}default
317*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view b13 = {};
318*89a1d03eSRichard 
319*89a1d03eSRichard     std::string_view b14 = {{}}; // Default `const CharT*`
320*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:29: warning: constructing{{.*}}default
321*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view b14 = {};
322*89a1d03eSRichard 
323*89a1d03eSRichard     const std::string_view b15 = {nullptr};
324*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:35: warning: constructing{{.*}}default
325*89a1d03eSRichard     // CHECK-FIXES: {{^}}    const std::string_view b15 = {};
326*89a1d03eSRichard 
327*89a1d03eSRichard     const std::string_view b16 = {(nullptr)};
328*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:35: warning: constructing{{.*}}default
329*89a1d03eSRichard     // CHECK-FIXES: {{^}}    const std::string_view b16 = {};
330*89a1d03eSRichard 
331*89a1d03eSRichard     const std::string_view b17 = {{nullptr}};
332*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:35: warning: constructing{{.*}}default
333*89a1d03eSRichard     // CHECK-FIXES: {{^}}    const std::string_view b17 = {};
334*89a1d03eSRichard 
335*89a1d03eSRichard     const std::string_view b18 = {{(nullptr)}};
336*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:35: warning: constructing{{.*}}default
337*89a1d03eSRichard     // CHECK-FIXES: {{^}}    const std::string_view b18 = {};
338*89a1d03eSRichard 
339*89a1d03eSRichard     const std::string_view b19 = {{}}; // Default `const CharT*`
340*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:35: warning: constructing{{.*}}default
341*89a1d03eSRichard     // CHECK-FIXES: {{^}}    const std::string_view b19 = {};
342*89a1d03eSRichard   }
343*89a1d03eSRichard 
344*89a1d03eSRichard   // Copy List Initialization With Temporary
345*89a1d03eSRichard   {
346*89a1d03eSRichard     std::string_view b20 = {std::string_view(nullptr)};
347*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:46: warning: constructing{{.*}}default
348*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view b20 = {std::string_view()};
349*89a1d03eSRichard 
350*89a1d03eSRichard     std::string_view b21 = {std::string_view{nullptr}};
351*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:46: warning: constructing{{.*}}default
352*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view b21 = {std::string_view{}};
353*89a1d03eSRichard 
354*89a1d03eSRichard     std::string_view b22 = {(std::string_view) nullptr};
355*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:48: warning: constructing{{.*}}default
356*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view b22 = {(std::string_view) {}};
357*89a1d03eSRichard 
358*89a1d03eSRichard     std::string_view b23 = {(std::string_view){nullptr}};
359*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:48: warning: constructing{{.*}}default
360*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view b23 = {(std::string_view){}};
361*89a1d03eSRichard 
362*89a1d03eSRichard     std::string_view b24 = {static_cast<SV>(nullptr)};
363*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:45: warning: casting{{.*}}empty string
364*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view b24 = {static_cast<SV>("")};
365*89a1d03eSRichard   }
366*89a1d03eSRichard 
367*89a1d03eSRichard   // Direct Initialization
368*89a1d03eSRichard   {
369*89a1d03eSRichard     std::string_view b25(nullptr);
370*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:22: warning: constructing{{.*}}default
371*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view b25;
372*89a1d03eSRichard 
373*89a1d03eSRichard     std::string_view b26((nullptr));
374*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:22: warning: constructing{{.*}}default
375*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view b26;
376*89a1d03eSRichard 
377*89a1d03eSRichard     std::string_view b27({nullptr});
378*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:22: warning: constructing{{.*}}default
379*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view b27;
380*89a1d03eSRichard 
381*89a1d03eSRichard     std::string_view b28({(nullptr)});
382*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:22: warning: constructing{{.*}}default
383*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view b28;
384*89a1d03eSRichard 
385*89a1d03eSRichard     std::string_view b29({}); // Default `const CharT*`
386*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:22: warning: constructing{{.*}}default
387*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view b29;
388*89a1d03eSRichard 
389*89a1d03eSRichard     const std::string_view b30(nullptr);
390*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:28: warning: constructing{{.*}}default
391*89a1d03eSRichard     // CHECK-FIXES: {{^}}    const std::string_view b30;
392*89a1d03eSRichard 
393*89a1d03eSRichard     const std::string_view b31((nullptr));
394*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:28: warning: constructing{{.*}}default
395*89a1d03eSRichard     // CHECK-FIXES: {{^}}    const std::string_view b31;
396*89a1d03eSRichard 
397*89a1d03eSRichard     const std::string_view b32({nullptr});
398*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:28: warning: constructing{{.*}}default
399*89a1d03eSRichard     // CHECK-FIXES: {{^}}    const std::string_view b32;
400*89a1d03eSRichard 
401*89a1d03eSRichard     const std::string_view b33({(nullptr)});
402*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:28: warning: constructing{{.*}}default
403*89a1d03eSRichard     // CHECK-FIXES: {{^}}    const std::string_view b33;
404*89a1d03eSRichard 
405*89a1d03eSRichard     const std::string_view b34({}); // Default `const CharT*`
406*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:28: warning: constructing{{.*}}default
407*89a1d03eSRichard     // CHECK-FIXES: {{^}}    const std::string_view b34;
408*89a1d03eSRichard   }
409*89a1d03eSRichard 
410*89a1d03eSRichard   // Direct Initialization With Temporary
411*89a1d03eSRichard   {
412*89a1d03eSRichard     std::string_view b35(std::string_view(nullptr));
413*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:43: warning: constructing{{.*}}default
414*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view b35(std::string_view());
415*89a1d03eSRichard 
416*89a1d03eSRichard     std::string_view b36(std::string_view{nullptr});
417*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:43: warning: constructing{{.*}}default
418*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view b36(std::string_view{});
419*89a1d03eSRichard 
420*89a1d03eSRichard     std::string_view b37((std::string_view) nullptr);
421*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:45: warning: constructing{{.*}}default
422*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view b37((std::string_view) {});
423*89a1d03eSRichard 
424*89a1d03eSRichard     std::string_view b38((std::string_view){nullptr});
425*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:45: warning: constructing{{.*}}default
426*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view b38((std::string_view){});
427*89a1d03eSRichard 
428*89a1d03eSRichard     std::string_view b39(static_cast<SV>(nullptr));
429*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:42: warning: casting{{.*}}empty string
430*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view b39(static_cast<SV>(""));
431*89a1d03eSRichard   }
432*89a1d03eSRichard 
433*89a1d03eSRichard   // Direct List Initialization
434*89a1d03eSRichard   {
435*89a1d03eSRichard     std::string_view b40{nullptr};
436*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:26: warning: constructing{{.*}}default
437*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view b40{};
438*89a1d03eSRichard 
439*89a1d03eSRichard     std::string_view b41{(nullptr)};
440*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:26: warning: constructing{{.*}}default
441*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view b41{};
442*89a1d03eSRichard 
443*89a1d03eSRichard     std::string_view b42{{nullptr}};
444*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:26: warning: constructing{{.*}}default
445*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view b42{};
446*89a1d03eSRichard 
447*89a1d03eSRichard     std::string_view b43{{(nullptr)}};
448*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:26: warning: constructing{{.*}}default
449*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view b43{};
450*89a1d03eSRichard 
451*89a1d03eSRichard     std::string_view b44{{}}; // Default `const CharT*`
452*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:26: warning: constructing{{.*}}default
453*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view b44{};
454*89a1d03eSRichard 
455*89a1d03eSRichard     const std::string_view b45{nullptr};
456*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:32: warning: constructing{{.*}}default
457*89a1d03eSRichard     // CHECK-FIXES: {{^}}    const std::string_view b45{};
458*89a1d03eSRichard 
459*89a1d03eSRichard     const std::string_view b46{(nullptr)};
460*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:32: warning: constructing{{.*}}default
461*89a1d03eSRichard     // CHECK-FIXES: {{^}}    const std::string_view b46{};
462*89a1d03eSRichard 
463*89a1d03eSRichard     const std::string_view b47{{nullptr}};
464*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:32: warning: constructing{{.*}}default
465*89a1d03eSRichard     // CHECK-FIXES: {{^}}    const std::string_view b47{};
466*89a1d03eSRichard 
467*89a1d03eSRichard     const std::string_view b48{{(nullptr)}};
468*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:32: warning: constructing{{.*}}default
469*89a1d03eSRichard     // CHECK-FIXES: {{^}}    const std::string_view b48{};
470*89a1d03eSRichard 
471*89a1d03eSRichard     const std::string_view b49{{}}; // Default `const CharT*`
472*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:32: warning: constructing{{.*}}default
473*89a1d03eSRichard     // CHECK-FIXES: {{^}}    const std::string_view b49{};
474*89a1d03eSRichard   }
475*89a1d03eSRichard 
476*89a1d03eSRichard   // Direct List Initialization With Temporary
477*89a1d03eSRichard   {
478*89a1d03eSRichard     std::string_view b50{std::string_view(nullptr)};
479*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:43: warning: constructing{{.*}}default
480*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view b50{std::string_view()};
481*89a1d03eSRichard 
482*89a1d03eSRichard     std::string_view b51{std::string_view{nullptr}};
483*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:43: warning: constructing{{.*}}default
484*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view b51{std::string_view{}};
485*89a1d03eSRichard 
486*89a1d03eSRichard     std::string_view b52{(std::string_view) nullptr};
487*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:45: warning: constructing{{.*}}default
488*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view b52{(std::string_view) {}};
489*89a1d03eSRichard 
490*89a1d03eSRichard     std::string_view b53{(std::string_view){nullptr}};
491*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:45: warning: constructing{{.*}}default
492*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view b53{(std::string_view){}};
493*89a1d03eSRichard 
494*89a1d03eSRichard     std::string_view b54{static_cast<SV>(nullptr)};
495*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:42: warning: casting{{.*}}empty string
496*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view b54{static_cast<SV>("")};
497*89a1d03eSRichard   }
498*89a1d03eSRichard }
499*89a1d03eSRichard 
field_construction()500*89a1d03eSRichard void field_construction() /* c */ {
501*89a1d03eSRichard   // Default Member Initializaers
502*89a1d03eSRichard 
503*89a1d03eSRichard   struct DMICopyInitialization {
504*89a1d03eSRichard     std::string_view c1 = nullptr;
505*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:27: warning: constructing{{.*}}default
506*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view c1 = {};
507*89a1d03eSRichard 
508*89a1d03eSRichard     std::string_view c2 = (nullptr);
509*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:27: warning: constructing{{.*}}default
510*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view c2 = {};
511*89a1d03eSRichard 
512*89a1d03eSRichard     const std::string_view c3 = nullptr;
513*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:33: warning: constructing{{.*}}default
514*89a1d03eSRichard     // CHECK-FIXES: {{^}}    const std::string_view c3 = {};
515*89a1d03eSRichard 
516*89a1d03eSRichard     const std::string_view c4 = (nullptr);
517*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:33: warning: constructing{{.*}}default
518*89a1d03eSRichard     // CHECK-FIXES: {{^}}    const std::string_view c4 = {};
519*89a1d03eSRichard   };
520*89a1d03eSRichard 
521*89a1d03eSRichard   struct DMICopyInitializationWithTemporary {
522*89a1d03eSRichard     std::string_view c5 = std::string_view(nullptr);
523*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:44: warning: constructing{{.*}}default
524*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view c5 = std::string_view();
525*89a1d03eSRichard 
526*89a1d03eSRichard     std::string_view c6 = std::string_view{nullptr};
527*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:44: warning: constructing{{.*}}default
528*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view c6 = std::string_view{};
529*89a1d03eSRichard 
530*89a1d03eSRichard     std::string_view c7 = (std::string_view) nullptr;
531*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:46: warning: constructing{{.*}}default
532*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view c7 = (std::string_view) {};
533*89a1d03eSRichard 
534*89a1d03eSRichard     std::string_view c8 = (std::string_view){nullptr};
535*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:46: warning: constructing{{.*}}default
536*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view c8 = (std::string_view){};
537*89a1d03eSRichard 
538*89a1d03eSRichard     std::string_view c9 = static_cast<SV>(nullptr);
539*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:43: warning: casting{{.*}}empty string
540*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view c9 = static_cast<SV>("");
541*89a1d03eSRichard   };
542*89a1d03eSRichard 
543*89a1d03eSRichard   struct DMICopyListInitialization {
544*89a1d03eSRichard     std::string_view c10 = {nullptr};
545*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:29: warning: constructing{{.*}}default
546*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view c10 = {};
547*89a1d03eSRichard 
548*89a1d03eSRichard     std::string_view c11 = {(nullptr)};
549*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:29: warning: constructing{{.*}}default
550*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view c11 = {};
551*89a1d03eSRichard 
552*89a1d03eSRichard     std::string_view c12 = {{nullptr}};
553*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:29: warning: constructing{{.*}}default
554*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view c12 = {};
555*89a1d03eSRichard 
556*89a1d03eSRichard     std::string_view c13 = {{(nullptr)}};
557*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:29: warning: constructing{{.*}}default
558*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view c13 = {};
559*89a1d03eSRichard 
560*89a1d03eSRichard     std::string_view c14 = {{}}; // Default `const CharT*`
561*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:29: warning: constructing{{.*}}default
562*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view c14 = {};
563*89a1d03eSRichard 
564*89a1d03eSRichard     const std::string_view c15 = {nullptr};
565*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:35: warning: constructing{{.*}}default
566*89a1d03eSRichard     // CHECK-FIXES: {{^}}    const std::string_view c15 = {};
567*89a1d03eSRichard 
568*89a1d03eSRichard     const std::string_view c16 = {(nullptr)};
569*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:35: warning: constructing{{.*}}default
570*89a1d03eSRichard     // CHECK-FIXES: {{^}}    const std::string_view c16 = {};
571*89a1d03eSRichard 
572*89a1d03eSRichard     const std::string_view c17 = {{nullptr}};
573*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:35: warning: constructing{{.*}}default
574*89a1d03eSRichard     // CHECK-FIXES: {{^}}    const std::string_view c17 = {};
575*89a1d03eSRichard 
576*89a1d03eSRichard     const std::string_view c18 = {{(nullptr)}};
577*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:35: warning: constructing{{.*}}default
578*89a1d03eSRichard     // CHECK-FIXES: {{^}}    const std::string_view c18 = {};
579*89a1d03eSRichard 
580*89a1d03eSRichard     const std::string_view c19 = {{}}; // Default `const CharT*`
581*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:35: warning: constructing{{.*}}default
582*89a1d03eSRichard     // CHECK-FIXES: {{^}}    const std::string_view c19 = {};
583*89a1d03eSRichard   };
584*89a1d03eSRichard 
585*89a1d03eSRichard   struct DMICopyListInitializationWithTemporary {
586*89a1d03eSRichard     std::string_view c20 = {std::string_view(nullptr)};
587*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:46: warning: constructing{{.*}}default
588*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view c20 = {std::string_view()};
589*89a1d03eSRichard 
590*89a1d03eSRichard     std::string_view c21 = {std::string_view{nullptr}};
591*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:46: warning: constructing{{.*}}default
592*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view c21 = {std::string_view{}};
593*89a1d03eSRichard 
594*89a1d03eSRichard     std::string_view c22 = {(std::string_view) nullptr};
595*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:48: warning: constructing{{.*}}default
596*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view c22 = {(std::string_view) {}};
597*89a1d03eSRichard 
598*89a1d03eSRichard     std::string_view c23 = {(std::string_view){nullptr}};
599*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:48: warning: constructing{{.*}}default
600*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view c23 = {(std::string_view){}};
601*89a1d03eSRichard 
602*89a1d03eSRichard     std::string_view c24 = {static_cast<SV>(nullptr)};
603*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:45: warning: casting{{.*}}empty string
604*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view c24 = {static_cast<SV>("")};
605*89a1d03eSRichard   };
606*89a1d03eSRichard 
607*89a1d03eSRichard   struct DMIDirectListInitialization {
608*89a1d03eSRichard     std::string_view c25{nullptr};
609*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:26: warning: constructing{{.*}}default
610*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view c25{};
611*89a1d03eSRichard 
612*89a1d03eSRichard     std::string_view c26{(nullptr)};
613*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:26: warning: constructing{{.*}}default
614*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view c26{};
615*89a1d03eSRichard 
616*89a1d03eSRichard     std::string_view c27{{nullptr}};
617*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:26: warning: constructing{{.*}}default
618*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view c27{};
619*89a1d03eSRichard 
620*89a1d03eSRichard     std::string_view c28{{(nullptr)}};
621*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:26: warning: constructing{{.*}}default
622*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view c28{};
623*89a1d03eSRichard 
624*89a1d03eSRichard     std::string_view c29{{}}; // Default `const CharT*`
625*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:26: warning: constructing{{.*}}default
626*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view c29{};
627*89a1d03eSRichard 
628*89a1d03eSRichard     const std::string_view c30{nullptr};
629*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:32: warning: constructing{{.*}}default
630*89a1d03eSRichard     // CHECK-FIXES: {{^}}    const std::string_view c30{};
631*89a1d03eSRichard 
632*89a1d03eSRichard     const std::string_view c31{(nullptr)};
633*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:32: warning: constructing{{.*}}default
634*89a1d03eSRichard     // CHECK-FIXES: {{^}}    const std::string_view c31{};
635*89a1d03eSRichard 
636*89a1d03eSRichard     const std::string_view c32{{nullptr}};
637*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:32: warning: constructing{{.*}}default
638*89a1d03eSRichard     // CHECK-FIXES: {{^}}    const std::string_view c32{};
639*89a1d03eSRichard 
640*89a1d03eSRichard     const std::string_view c33{{(nullptr)}};
641*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:32: warning: constructing{{.*}}default
642*89a1d03eSRichard     // CHECK-FIXES: {{^}}    const std::string_view c33{};
643*89a1d03eSRichard 
644*89a1d03eSRichard     const std::string_view c34{{}}; // Default `const CharT*`
645*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:32: warning: constructing{{.*}}default
646*89a1d03eSRichard     // CHECK-FIXES: {{^}}    const std::string_view c34{};
647*89a1d03eSRichard   };
648*89a1d03eSRichard 
649*89a1d03eSRichard   struct DMIDirectListInitializationWithTemporary {
650*89a1d03eSRichard     std::string_view c35{std::string_view(nullptr)};
651*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:43: warning: constructing{{.*}}default
652*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view c35{std::string_view()};
653*89a1d03eSRichard 
654*89a1d03eSRichard     std::string_view c36{std::string_view{nullptr}};
655*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:43: warning: constructing{{.*}}default
656*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view c36{std::string_view{}};
657*89a1d03eSRichard 
658*89a1d03eSRichard     std::string_view c37{(std::string_view) nullptr};
659*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:45: warning: constructing{{.*}}default
660*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view c37{(std::string_view) {}};
661*89a1d03eSRichard 
662*89a1d03eSRichard     std::string_view c38{(std::string_view){nullptr}};
663*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:45: warning: constructing{{.*}}default
664*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view c38{(std::string_view){}};
665*89a1d03eSRichard 
666*89a1d03eSRichard     std::string_view c39{static_cast<SV>(nullptr)};
667*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:42: warning: casting{{.*}}empty string
668*89a1d03eSRichard     // CHECK-FIXES: {{^}}    std::string_view c39{static_cast<SV>("")};
669*89a1d03eSRichard   };
670*89a1d03eSRichard 
671*89a1d03eSRichard   // Constructor Initializers
672*89a1d03eSRichard 
673*89a1d03eSRichard   class CIDirectInitialization {
674*89a1d03eSRichard     std::string_view c40;
675*89a1d03eSRichard     std::string_view c41;
676*89a1d03eSRichard     std::string_view c42;
677*89a1d03eSRichard     std::string_view c43;
678*89a1d03eSRichard     std::string_view c44;
679*89a1d03eSRichard 
680*89a1d03eSRichard     CIDirectInitialization()
681*89a1d03eSRichard         : c40(nullptr),
682*89a1d03eSRichard           // CHECK-MESSAGES: :[[@LINE-1]]:15: warning: constructing{{.*}}default
683*89a1d03eSRichard           // CHECK-FIXES: {{^}}        : c40(),
684*89a1d03eSRichard 
685*89a1d03eSRichard           c41((nullptr)),
686*89a1d03eSRichard           // CHECK-MESSAGES: :[[@LINE-1]]:15: warning: constructing{{.*}}default
687*89a1d03eSRichard           // CHECK-FIXES: {{^}}          c41(),
688*89a1d03eSRichard 
689*89a1d03eSRichard           c42({nullptr}),
690*89a1d03eSRichard           // CHECK-MESSAGES: :[[@LINE-1]]:15: warning: constructing{{.*}}default
691*89a1d03eSRichard           // CHECK-FIXES: {{^}}          c42(),
692*89a1d03eSRichard 
693*89a1d03eSRichard           c43({(nullptr)}),
694*89a1d03eSRichard           // CHECK-MESSAGES: :[[@LINE-1]]:15: warning: constructing{{.*}}default
695*89a1d03eSRichard           // CHECK-FIXES: {{^}}          c43(),
696*89a1d03eSRichard 
697*89a1d03eSRichard           c44({}) { // Default `const CharT*`
698*89a1d03eSRichard       // CHECK-MESSAGES: :[[@LINE-1]]:15: warning: constructing{{.*}}default
699*89a1d03eSRichard       // CHECK-FIXES: {{^}}          c44() {
700*89a1d03eSRichard     }
701*89a1d03eSRichard   };
702*89a1d03eSRichard 
703*89a1d03eSRichard   class CIDirectInitializationWithTemporary {
704*89a1d03eSRichard     std::string_view c45;
705*89a1d03eSRichard     std::string_view c46;
706*89a1d03eSRichard     std::string_view c47;
707*89a1d03eSRichard     std::string_view c48;
708*89a1d03eSRichard     std::string_view c49;
709*89a1d03eSRichard 
710*89a1d03eSRichard     CIDirectInitializationWithTemporary()
711*89a1d03eSRichard         : c45(std::string_view(nullptr)),
712*89a1d03eSRichard           // CHECK-MESSAGES: :[[@LINE-1]]:32: warning: constructing{{.*}}default
713*89a1d03eSRichard           // CHECK-FIXES: {{^}}        : c45(std::string_view()),
714*89a1d03eSRichard 
715*89a1d03eSRichard           c46(std::string_view{nullptr}),
716*89a1d03eSRichard           // CHECK-MESSAGES: :[[@LINE-1]]:32: warning: constructing{{.*}}default
717*89a1d03eSRichard           // CHECK-FIXES: {{^}}          c46(std::string_view{}),
718*89a1d03eSRichard 
719*89a1d03eSRichard           c47((std::string_view) nullptr),
720*89a1d03eSRichard           // CHECK-MESSAGES: :[[@LINE-1]]:34: warning: constructing{{.*}}default
721*89a1d03eSRichard           // CHECK-FIXES: {{^}}          c47((std::string_view) {}),
722*89a1d03eSRichard 
723*89a1d03eSRichard           c48((std::string_view){nullptr}),
724*89a1d03eSRichard           // CHECK-MESSAGES: :[[@LINE-1]]:34: warning: constructing{{.*}}default
725*89a1d03eSRichard           // CHECK-FIXES: {{^}}          c48((std::string_view){}),
726*89a1d03eSRichard 
727*89a1d03eSRichard           c49(static_cast<SV>(nullptr)) {
728*89a1d03eSRichard       // CHECK-MESSAGES: :[[@LINE-1]]:31: warning: casting{{.*}}empty string
729*89a1d03eSRichard       // CHECK-FIXES: {{^}}          c49(static_cast<SV>("")) {
730*89a1d03eSRichard     }
731*89a1d03eSRichard   };
732*89a1d03eSRichard 
733*89a1d03eSRichard   class CIDirectListInitialization {
734*89a1d03eSRichard     std::string_view c50;
735*89a1d03eSRichard     std::string_view c51;
736*89a1d03eSRichard     std::string_view c52;
737*89a1d03eSRichard     std::string_view c53;
738*89a1d03eSRichard     std::string_view c54;
739*89a1d03eSRichard 
740*89a1d03eSRichard     CIDirectListInitialization()
741*89a1d03eSRichard         : c50{nullptr},
742*89a1d03eSRichard           // CHECK-MESSAGES: :[[@LINE-1]]:15: warning: constructing{{.*}}default
743*89a1d03eSRichard           // CHECK-FIXES: {{^}}        : c50{},
744*89a1d03eSRichard 
745*89a1d03eSRichard           c51{(nullptr)},
746*89a1d03eSRichard           // CHECK-MESSAGES: :[[@LINE-1]]:15: warning: constructing{{.*}}default
747*89a1d03eSRichard           // CHECK-FIXES: {{^}}          c51{},
748*89a1d03eSRichard 
749*89a1d03eSRichard           c52{{nullptr}},
750*89a1d03eSRichard           // CHECK-MESSAGES: :[[@LINE-1]]:15: warning: constructing{{.*}}default
751*89a1d03eSRichard           // CHECK-FIXES: {{^}}          c52{},
752*89a1d03eSRichard 
753*89a1d03eSRichard           c53{{(nullptr)}},
754*89a1d03eSRichard           // CHECK-MESSAGES: :[[@LINE-1]]:15: warning: constructing{{.*}}default
755*89a1d03eSRichard           // CHECK-FIXES: {{^}}          c53{},
756*89a1d03eSRichard 
757*89a1d03eSRichard           c54{{}} { // Default `const CharT*`
758*89a1d03eSRichard       // CHECK-MESSAGES: :[[@LINE-1]]:15: warning: constructing{{.*}}default
759*89a1d03eSRichard       // CHECK-FIXES: {{^}}          c54{} {
760*89a1d03eSRichard     }
761*89a1d03eSRichard   };
762*89a1d03eSRichard 
763*89a1d03eSRichard   class CIDirectListInitializationWithTemporary {
764*89a1d03eSRichard     std::string_view c55;
765*89a1d03eSRichard     std::string_view c56;
766*89a1d03eSRichard     std::string_view c57;
767*89a1d03eSRichard     std::string_view c58;
768*89a1d03eSRichard     std::string_view c59;
769*89a1d03eSRichard 
770*89a1d03eSRichard     CIDirectListInitializationWithTemporary()
771*89a1d03eSRichard         : c55{std::string_view(nullptr)},
772*89a1d03eSRichard           // CHECK-MESSAGES: :[[@LINE-1]]:32: warning: constructing{{.*}}default
773*89a1d03eSRichard           // CHECK-FIXES: {{^}}        : c55{std::string_view()},
774*89a1d03eSRichard 
775*89a1d03eSRichard           c56{std::string_view{nullptr}},
776*89a1d03eSRichard           // CHECK-MESSAGES: :[[@LINE-1]]:32: warning: constructing{{.*}}default
777*89a1d03eSRichard           // CHECK-FIXES: {{^}}          c56{std::string_view{}},
778*89a1d03eSRichard 
779*89a1d03eSRichard           c57{(std::string_view) nullptr},
780*89a1d03eSRichard           // CHECK-MESSAGES: :[[@LINE-1]]:34: warning: constructing{{.*}}default
781*89a1d03eSRichard           // CHECK-FIXES: {{^}}          c57{(std::string_view) {}},
782*89a1d03eSRichard 
783*89a1d03eSRichard           c58{(std::string_view){nullptr}},
784*89a1d03eSRichard           // CHECK-MESSAGES: :[[@LINE-1]]:34: warning: constructing{{.*}}default
785*89a1d03eSRichard           // CHECK-FIXES: {{^}}          c58{(std::string_view){}},
786*89a1d03eSRichard 
787*89a1d03eSRichard           c59{static_cast<SV>(nullptr)} {
788*89a1d03eSRichard       // CHECK-MESSAGES: :[[@LINE-1]]:31: warning: casting{{.*}}empty string
789*89a1d03eSRichard       // CHECK-FIXES: {{^}}          c59{static_cast<SV>("")} {
790*89a1d03eSRichard     }
791*89a1d03eSRichard   };
792*89a1d03eSRichard }
793*89a1d03eSRichard 
default_argument_construction()794*89a1d03eSRichard void default_argument_construction() /* d */ {
795*89a1d03eSRichard   // Copy Initialization
796*89a1d03eSRichard   {
797*89a1d03eSRichard     void d1(std::string_view sv = nullptr);
798*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:35: warning: constructing{{.*}}default
799*89a1d03eSRichard     // CHECK-FIXES: {{^}}    void d1(std::string_view sv = {});
800*89a1d03eSRichard 
801*89a1d03eSRichard     void d2(std::string_view sv = (nullptr));
802*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:35: warning: constructing{{.*}}default
803*89a1d03eSRichard     // CHECK-FIXES: {{^}}    void d2(std::string_view sv = {});
804*89a1d03eSRichard 
805*89a1d03eSRichard     void d3(const std::string_view sv = nullptr);
806*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:41: warning: constructing{{.*}}default
807*89a1d03eSRichard     // CHECK-FIXES: {{^}}    void d3(const std::string_view sv = {});
808*89a1d03eSRichard 
809*89a1d03eSRichard     void d4(const std::string_view sv = (nullptr));
810*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:41: warning: constructing{{.*}}default
811*89a1d03eSRichard     // CHECK-FIXES: {{^}}    void d4(const std::string_view sv = {});
812*89a1d03eSRichard   }
813*89a1d03eSRichard 
814*89a1d03eSRichard   // Copy Initialization With Temporary
815*89a1d03eSRichard   {
816*89a1d03eSRichard     void d5(std::string_view sv = std::string_view(nullptr));
817*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:52: warning: constructing{{.*}}default
818*89a1d03eSRichard     // CHECK-FIXES: {{^}}    void d5(std::string_view sv = std::string_view());
819*89a1d03eSRichard 
820*89a1d03eSRichard     void d6(std::string_view sv = std::string_view{nullptr});
821*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:52: warning: constructing{{.*}}default
822*89a1d03eSRichard     // CHECK-FIXES: {{^}}    void d6(std::string_view sv = std::string_view{});
823*89a1d03eSRichard 
824*89a1d03eSRichard     void d7(std::string_view sv = (std::string_view) nullptr);
825*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:54: warning: constructing{{.*}}default
826*89a1d03eSRichard     // CHECK-FIXES: {{^}}    void d7(std::string_view sv = (std::string_view) {});
827*89a1d03eSRichard 
828*89a1d03eSRichard     void d8(std::string_view sv = (std::string_view){nullptr});
829*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:54: warning: constructing{{.*}}default
830*89a1d03eSRichard     // CHECK-FIXES: {{^}}    void d8(std::string_view sv = (std::string_view){});
831*89a1d03eSRichard 
832*89a1d03eSRichard     void d9(std::string_view sv = static_cast<SV>(nullptr));
833*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:51: warning: casting{{.*}}empty string
834*89a1d03eSRichard     // CHECK-FIXES: {{^}}    void d9(std::string_view sv = static_cast<SV>(""));
835*89a1d03eSRichard   }
836*89a1d03eSRichard 
837*89a1d03eSRichard   // Copy List Initialization
838*89a1d03eSRichard   {
839*89a1d03eSRichard     void d10(std::string_view sv = {nullptr});
840*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:37: warning: constructing{{.*}}default
841*89a1d03eSRichard     // CHECK-FIXES: {{^}}    void d10(std::string_view sv = {});
842*89a1d03eSRichard 
843*89a1d03eSRichard     void d11(std::string_view sv = {(nullptr)});
844*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:37: warning: constructing{{.*}}default
845*89a1d03eSRichard     // CHECK-FIXES: {{^}}    void d11(std::string_view sv = {});
846*89a1d03eSRichard 
847*89a1d03eSRichard     void d12(std::string_view sv = {{nullptr}});
848*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:37: warning: constructing{{.*}}default
849*89a1d03eSRichard     // CHECK-FIXES: {{^}}    void d12(std::string_view sv = {});
850*89a1d03eSRichard 
851*89a1d03eSRichard     void d13(std::string_view sv = {{(nullptr)}});
852*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:37: warning: constructing{{.*}}default
853*89a1d03eSRichard     // CHECK-FIXES: {{^}}    void d13(std::string_view sv = {});
854*89a1d03eSRichard 
855*89a1d03eSRichard     void d14(std::string_view sv = {{}}); // Default `const CharT*`
856*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:37: warning: constructing{{.*}}default
857*89a1d03eSRichard     // CHECK-FIXES: {{^}}    void d14(std::string_view sv = {});
858*89a1d03eSRichard 
859*89a1d03eSRichard     void d15(const std::string_view sv = {nullptr});
860*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:43: warning: constructing{{.*}}default
861*89a1d03eSRichard     // CHECK-FIXES: {{^}}    void d15(const std::string_view sv = {});
862*89a1d03eSRichard 
863*89a1d03eSRichard     void d16(const std::string_view sv = {(nullptr)});
864*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:43: warning: constructing{{.*}}default
865*89a1d03eSRichard     // CHECK-FIXES: {{^}}    void d16(const std::string_view sv = {});
866*89a1d03eSRichard 
867*89a1d03eSRichard     void d17(const std::string_view sv = {{nullptr}});
868*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:43: warning: constructing{{.*}}default
869*89a1d03eSRichard     // CHECK-FIXES: {{^}}    void d17(const std::string_view sv = {});
870*89a1d03eSRichard 
871*89a1d03eSRichard     void d18(const std::string_view sv = {{(nullptr)}});
872*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:43: warning: constructing{{.*}}default
873*89a1d03eSRichard     // CHECK-FIXES: {{^}}    void d18(const std::string_view sv = {});
874*89a1d03eSRichard 
875*89a1d03eSRichard     void d19(const std::string_view sv = {{}}); // Default `const CharT*`
876*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:43: warning: constructing{{.*}}default
877*89a1d03eSRichard     // CHECK-FIXES: {{^}}    void d19(const std::string_view sv = {});
878*89a1d03eSRichard   }
879*89a1d03eSRichard 
880*89a1d03eSRichard   // Copy List Initialization With Temporary
881*89a1d03eSRichard   {
882*89a1d03eSRichard     void d20(std::string_view sv = {std::string_view(nullptr)});
883*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:54: warning: constructing{{.*}}default
884*89a1d03eSRichard     // CHECK-FIXES: {{^}}    void d20(std::string_view sv = {std::string_view()});
885*89a1d03eSRichard 
886*89a1d03eSRichard     void d21(std::string_view sv = {std::string_view{nullptr}});
887*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:54: warning: constructing{{.*}}default
888*89a1d03eSRichard     // CHECK-FIXES: {{^}}    void d21(std::string_view sv = {std::string_view{}});
889*89a1d03eSRichard 
890*89a1d03eSRichard     void d22(std::string_view sv = {(std::string_view) nullptr});
891*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:56: warning: constructing{{.*}}default
892*89a1d03eSRichard     // CHECK-FIXES: {{^}}    void d22(std::string_view sv = {(std::string_view) {}});
893*89a1d03eSRichard 
894*89a1d03eSRichard     void d23(std::string_view sv = {(std::string_view){nullptr}});
895*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:56: warning: constructing{{.*}}default
896*89a1d03eSRichard     // CHECK-FIXES: {{^}}    void d23(std::string_view sv = {(std::string_view){}});
897*89a1d03eSRichard 
898*89a1d03eSRichard     void d24(std::string_view sv = {static_cast<SV>(nullptr)});
899*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:53: warning: casting{{.*}}empty string
900*89a1d03eSRichard     // CHECK-FIXES: {{^}}    void d24(std::string_view sv = {static_cast<SV>("")});
901*89a1d03eSRichard   }
902*89a1d03eSRichard }
903*89a1d03eSRichard 
heap_construction()904*89a1d03eSRichard void heap_construction() /* e */ {
905*89a1d03eSRichard   // Direct Initialization
906*89a1d03eSRichard   {
907*89a1d03eSRichard     (void)(new std::string_view(nullptr)) /* e1 */;
908*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:33: warning: constructing{{.*}}default
909*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(new std::string_view()) /* e1 */;
910*89a1d03eSRichard 
911*89a1d03eSRichard     (void)(new std::string_view((nullptr))) /* e2 */;
912*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:33: warning: constructing{{.*}}default
913*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(new std::string_view()) /* e2 */;
914*89a1d03eSRichard 
915*89a1d03eSRichard     (void)(new std::string_view({nullptr})) /* e3 */;
916*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:33: warning: constructing{{.*}}default
917*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(new std::string_view()) /* e3 */;
918*89a1d03eSRichard 
919*89a1d03eSRichard     (void)(new std::string_view({(nullptr)})) /* e4 */;
920*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:33: warning: constructing{{.*}}default
921*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(new std::string_view()) /* e4 */;
922*89a1d03eSRichard 
923*89a1d03eSRichard     (void)(new std::string_view({})) /* e5 */; // Default `const CharT*`
924*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:33: warning: constructing{{.*}}default
925*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(new std::string_view()) /* e5 */;
926*89a1d03eSRichard 
927*89a1d03eSRichard     (void)(new const std::string_view(nullptr)) /* e6 */;
928*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:39: warning: constructing{{.*}}default
929*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(new const std::string_view()) /* e6 */;
930*89a1d03eSRichard 
931*89a1d03eSRichard     (void)(new const std::string_view((nullptr))) /* e7 */;
932*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:39: warning: constructing{{.*}}default
933*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(new const std::string_view()) /* e7 */;
934*89a1d03eSRichard 
935*89a1d03eSRichard     (void)(new const std::string_view({nullptr})) /* e8 */;
936*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:39: warning: constructing{{.*}}default
937*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(new const std::string_view()) /* e8 */;
938*89a1d03eSRichard 
939*89a1d03eSRichard     (void)(new const std::string_view({(nullptr)})) /* e9 */;
940*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:39: warning: constructing{{.*}}default
941*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(new const std::string_view()) /* e9 */;
942*89a1d03eSRichard 
943*89a1d03eSRichard     (void)(new const std::string_view({})) /* e10 */; // Default `const CharT*`
944*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:39: warning: constructing{{.*}}default
945*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(new const std::string_view()) /* e10 */;
946*89a1d03eSRichard   }
947*89a1d03eSRichard 
948*89a1d03eSRichard   // Direct Initialization With Temporary
949*89a1d03eSRichard   {
950*89a1d03eSRichard     (void)(new std::string_view(std::string_view(nullptr))) /* e11 */;
951*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:50: warning: constructing{{.*}}default
952*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(new std::string_view(std::string_view())) /* e11 */;
953*89a1d03eSRichard 
954*89a1d03eSRichard     (void)(new std::string_view(std::string_view{nullptr})) /* e12 */;
955*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:50: warning: constructing{{.*}}default
956*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(new std::string_view(std::string_view{})) /* e12 */;
957*89a1d03eSRichard 
958*89a1d03eSRichard     (void)(new std::string_view((std::string_view) nullptr)) /* e13 */;
959*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:52: warning: constructing{{.*}}default
960*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(new std::string_view((std::string_view) {})) /* e13 */;
961*89a1d03eSRichard 
962*89a1d03eSRichard     (void)(new std::string_view((std::string_view){nullptr})) /* e14 */;
963*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:52: warning: constructing{{.*}}default
964*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(new std::string_view((std::string_view){})) /* e14 */;
965*89a1d03eSRichard 
966*89a1d03eSRichard     (void)(new std::string_view(static_cast<SV>(nullptr))) /* e15 */;
967*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:49: warning: casting{{.*}}empty string
968*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(new std::string_view(static_cast<SV>(""))) /* e15 */;
969*89a1d03eSRichard   }
970*89a1d03eSRichard 
971*89a1d03eSRichard   // Direct List Initialization
972*89a1d03eSRichard   {
973*89a1d03eSRichard     (void)(new std::string_view{nullptr}) /* e16 */;
974*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:33: warning: constructing{{.*}}default
975*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(new std::string_view{}) /* e16 */;
976*89a1d03eSRichard 
977*89a1d03eSRichard     (void)(new std::string_view{(nullptr)}) /* e17 */;
978*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:33: warning: constructing{{.*}}default
979*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(new std::string_view{}) /* e17 */;
980*89a1d03eSRichard 
981*89a1d03eSRichard     (void)(new std::string_view{{nullptr}}) /* e18 */;
982*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:33: warning: constructing{{.*}}default
983*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(new std::string_view{}) /* e18 */;
984*89a1d03eSRichard 
985*89a1d03eSRichard     (void)(new std::string_view{{(nullptr)}}) /* e19 */;
986*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:33: warning: constructing{{.*}}default
987*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(new std::string_view{}) /* e19 */;
988*89a1d03eSRichard 
989*89a1d03eSRichard     (void)(new std::string_view{{}}) /* e20 */; // Default `const CharT*`
990*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:33: warning: constructing{{.*}}default
991*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(new std::string_view{}) /* e20 */;
992*89a1d03eSRichard 
993*89a1d03eSRichard     (void)(new const std::string_view{nullptr}) /* e21 */;
994*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:39: warning: constructing{{.*}}default
995*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(new const std::string_view{}) /* e21 */;
996*89a1d03eSRichard 
997*89a1d03eSRichard     (void)(new const std::string_view{(nullptr)}) /* e22 */;
998*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:39: warning: constructing{{.*}}default
999*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(new const std::string_view{}) /* e22 */;
1000*89a1d03eSRichard 
1001*89a1d03eSRichard     (void)(new const std::string_view{{nullptr}}) /* e23 */;
1002*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:39: warning: constructing{{.*}}default
1003*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(new const std::string_view{}) /* e23 */;
1004*89a1d03eSRichard 
1005*89a1d03eSRichard     (void)(new const std::string_view{{(nullptr)}}) /* e24 */;
1006*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:39: warning: constructing{{.*}}default
1007*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(new const std::string_view{}) /* e24 */;
1008*89a1d03eSRichard 
1009*89a1d03eSRichard     (void)(new const std::string_view{{}}) /* e25 */; // Default `const CharT*`
1010*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:39: warning: constructing{{.*}}default
1011*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(new const std::string_view{}) /* e25 */;
1012*89a1d03eSRichard   }
1013*89a1d03eSRichard 
1014*89a1d03eSRichard   // Direct List Initialization With Temporary
1015*89a1d03eSRichard   {
1016*89a1d03eSRichard     (void)(new std::string_view{std::string_view(nullptr)}) /* e26 */;
1017*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:50: warning: constructing{{.*}}default
1018*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(new std::string_view{std::string_view()}) /* e26 */;
1019*89a1d03eSRichard 
1020*89a1d03eSRichard     (void)(new std::string_view{std::string_view{nullptr}}) /* e27 */;
1021*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:50: warning: constructing{{.*}}default
1022*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(new std::string_view{std::string_view{}}) /* e27 */;
1023*89a1d03eSRichard 
1024*89a1d03eSRichard     (void)(new std::string_view{(std::string_view) nullptr}) /* e28 */;
1025*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:52: warning: constructing{{.*}}default
1026*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(new std::string_view{(std::string_view) {}}) /* e28 */;
1027*89a1d03eSRichard 
1028*89a1d03eSRichard     (void)(new std::string_view{(std::string_view){nullptr}}) /* e29 */;
1029*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:52: warning: constructing{{.*}}default
1030*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(new std::string_view{(std::string_view){}}) /* e29 */;
1031*89a1d03eSRichard 
1032*89a1d03eSRichard     (void)(new std::string_view{static_cast<SV>(nullptr)}) /* e30 */;
1033*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:49: warning: casting{{.*}}empty string
1034*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(new std::string_view{static_cast<SV>("")}) /* e30 */;
1035*89a1d03eSRichard   }
1036*89a1d03eSRichard }
1037*89a1d03eSRichard 
function_argument_initialization()1038*89a1d03eSRichard void function_argument_initialization() /* f */ {
1039*89a1d03eSRichard   // Function Argument Initialization
1040*89a1d03eSRichard   {
1041*89a1d03eSRichard     function(nullptr) /* f1 */;
1042*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:14: warning: passing null as basic_string_view is undefined; replace with the empty string
1043*89a1d03eSRichard     // CHECK-FIXES: {{^}}    function("") /* f1 */;
1044*89a1d03eSRichard 
1045*89a1d03eSRichard     function((nullptr)) /* f2 */;
1046*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:14: warning: passing{{.*}}empty string
1047*89a1d03eSRichard     // CHECK-FIXES: {{^}}    function("") /* f2 */;
1048*89a1d03eSRichard 
1049*89a1d03eSRichard     function({nullptr}) /* f3 */;
1050*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:14: warning: passing{{.*}}empty string
1051*89a1d03eSRichard     // CHECK-FIXES: {{^}}    function("") /* f3 */;
1052*89a1d03eSRichard 
1053*89a1d03eSRichard     function({(nullptr)}) /* f4 */;
1054*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:14: warning: passing{{.*}}empty string
1055*89a1d03eSRichard     // CHECK-FIXES: {{^}}    function("") /* f4 */;
1056*89a1d03eSRichard 
1057*89a1d03eSRichard     function({{}}) /* f5 */; // Default `const CharT*`
1058*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:14: warning: passing{{.*}}empty string
1059*89a1d03eSRichard     // CHECK-FIXES: {{^}}    function("") /* f5 */;
1060*89a1d03eSRichard   }
1061*89a1d03eSRichard 
1062*89a1d03eSRichard   // Function Argument Initialization With Temporary
1063*89a1d03eSRichard   {
1064*89a1d03eSRichard     function(std::string_view(nullptr)) /* f6 */;
1065*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:31: warning: constructing{{.*}}default
1066*89a1d03eSRichard     // CHECK-FIXES: {{^}}    function(std::string_view()) /* f6 */;
1067*89a1d03eSRichard 
1068*89a1d03eSRichard     function(std::string_view{nullptr}) /* f7 */;
1069*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:31: warning: constructing{{.*}}default
1070*89a1d03eSRichard     // CHECK-FIXES: {{^}}    function(std::string_view{}) /* f7 */;
1071*89a1d03eSRichard 
1072*89a1d03eSRichard     function((std::string_view) nullptr) /* f8 */;
1073*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:33: warning: constructing{{.*}}default
1074*89a1d03eSRichard     // CHECK-FIXES: {{^}}    function((std::string_view) {}) /* f8 */;
1075*89a1d03eSRichard 
1076*89a1d03eSRichard     function((std::string_view){nullptr}) /* f9 */;
1077*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:33: warning: constructing{{.*}}default
1078*89a1d03eSRichard     // CHECK-FIXES: {{^}}    function((std::string_view){}) /* f9 */;
1079*89a1d03eSRichard 
1080*89a1d03eSRichard     function(static_cast<SV>(nullptr)) /* f10 */;
1081*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:30: warning: casting{{.*}}empty string
1082*89a1d03eSRichard     // CHECK-FIXES: {{^}}    function(static_cast<SV>("")) /* f10 */;
1083*89a1d03eSRichard   }
1084*89a1d03eSRichard }
1085*89a1d03eSRichard 
assignment(std::string_view sv)1086*89a1d03eSRichard void assignment(std::string_view sv) /* g */ {
1087*89a1d03eSRichard   // Assignment
1088*89a1d03eSRichard   {
1089*89a1d03eSRichard     sv = nullptr /* g1 */;
1090*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: assignment to basic_string_view from null is undefined; replace with the default constructor
1091*89a1d03eSRichard     // CHECK-FIXES: {{^}}    sv = {} /* g1 */;
1092*89a1d03eSRichard 
1093*89a1d03eSRichard     sv = (nullptr) /* g2 */;
1094*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: assignment{{.*}}default
1095*89a1d03eSRichard     // CHECK-FIXES: {{^}}    sv = {} /* g2 */;
1096*89a1d03eSRichard 
1097*89a1d03eSRichard     sv = {nullptr} /* g3 */;
1098*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: assignment{{.*}}default
1099*89a1d03eSRichard     // CHECK-FIXES: {{^}}    sv = {} /* g3 */;
1100*89a1d03eSRichard 
1101*89a1d03eSRichard     sv = {(nullptr)} /* g4 */;
1102*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: assignment{{.*}}default
1103*89a1d03eSRichard     // CHECK-FIXES: {{^}}    sv = {} /* g4 */;
1104*89a1d03eSRichard 
1105*89a1d03eSRichard     sv = {{}} /* g5 */; // Default `const CharT*`
1106*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: assignment{{.*}}default
1107*89a1d03eSRichard     // CHECK-FIXES: {{^}}    sv = {} /* g5 */;
1108*89a1d03eSRichard   }
1109*89a1d03eSRichard 
1110*89a1d03eSRichard   // Assignment With Temporary
1111*89a1d03eSRichard   {
1112*89a1d03eSRichard     sv = std::string_view(nullptr) /* g6 */;
1113*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:27: warning: constructing{{.*}}default
1114*89a1d03eSRichard     // CHECK-FIXES: {{^}}    sv = std::string_view() /* g6 */;
1115*89a1d03eSRichard 
1116*89a1d03eSRichard     sv = std::string_view{nullptr} /* g7 */;
1117*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:27: warning: constructing{{.*}}default
1118*89a1d03eSRichard     // CHECK-FIXES: {{^}}    sv = std::string_view{} /* g7 */;
1119*89a1d03eSRichard 
1120*89a1d03eSRichard     sv = (std::string_view) nullptr /* g8 */;
1121*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:29: warning: constructing{{.*}}default
1122*89a1d03eSRichard     // CHECK-FIXES: {{^}}    sv = (std::string_view) {} /* g8 */;
1123*89a1d03eSRichard 
1124*89a1d03eSRichard     sv = (std::string_view){nullptr} /* g9 */;
1125*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:29: warning: constructing{{.*}}default
1126*89a1d03eSRichard     // CHECK-FIXES: {{^}}    sv = (std::string_view){} /* g9 */;
1127*89a1d03eSRichard 
1128*89a1d03eSRichard     sv = static_cast<SV>(nullptr) /* g10 */;
1129*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:26: warning: casting{{.*}}empty string
1130*89a1d03eSRichard     // CHECK-FIXES: {{^}}    sv = static_cast<SV>("") /* g10 */;
1131*89a1d03eSRichard   }
1132*89a1d03eSRichard }
1133*89a1d03eSRichard 
pointer_assignment(std::string_view * sv_ptr)1134*89a1d03eSRichard void pointer_assignment(std::string_view *sv_ptr) /* h */ {
1135*89a1d03eSRichard   // Assignment
1136*89a1d03eSRichard   {
1137*89a1d03eSRichard     *sv_ptr = nullptr /* h1 */;
1138*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:15: warning: assignment{{.*}}default
1139*89a1d03eSRichard     // CHECK-FIXES: {{^}}    *sv_ptr = {} /* h1 */;
1140*89a1d03eSRichard 
1141*89a1d03eSRichard     *sv_ptr = (nullptr) /* h2 */;
1142*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:15: warning: assignment{{.*}}default
1143*89a1d03eSRichard     // CHECK-FIXES: {{^}}    *sv_ptr = {} /* h2 */;
1144*89a1d03eSRichard 
1145*89a1d03eSRichard     *sv_ptr = {nullptr} /* h3 */;
1146*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:15: warning: assignment{{.*}}default
1147*89a1d03eSRichard     // CHECK-FIXES: {{^}}    *sv_ptr = {} /* h3 */;
1148*89a1d03eSRichard 
1149*89a1d03eSRichard     *sv_ptr = {(nullptr)} /* h4 */;
1150*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:15: warning: assignment{{.*}}default
1151*89a1d03eSRichard     // CHECK-FIXES: {{^}}    *sv_ptr = {} /* h4 */;
1152*89a1d03eSRichard 
1153*89a1d03eSRichard     *sv_ptr = {{}} /* h5 */; // Default `const CharT*`
1154*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:15: warning: assignment{{.*}}default
1155*89a1d03eSRichard     // CHECK-FIXES: {{^}}    *sv_ptr = {} /* h5 */;
1156*89a1d03eSRichard   }
1157*89a1d03eSRichard 
1158*89a1d03eSRichard   // Assignment With Temporary
1159*89a1d03eSRichard   {
1160*89a1d03eSRichard     *sv_ptr = std::string_view(nullptr) /* h6 */;
1161*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:32: warning: constructing{{.*}}default
1162*89a1d03eSRichard     // CHECK-FIXES: {{^}}    *sv_ptr = std::string_view() /* h6 */;
1163*89a1d03eSRichard 
1164*89a1d03eSRichard     *sv_ptr = std::string_view{nullptr} /* h7 */;
1165*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:32: warning: constructing{{.*}}default
1166*89a1d03eSRichard     // CHECK-FIXES: {{^}}    *sv_ptr = std::string_view{} /* h7 */;
1167*89a1d03eSRichard 
1168*89a1d03eSRichard     *sv_ptr = (std::string_view) nullptr /* h8 */;
1169*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:34: warning: constructing{{.*}}default
1170*89a1d03eSRichard     // CHECK-FIXES: {{^}}    *sv_ptr = (std::string_view) {} /* h8 */;
1171*89a1d03eSRichard 
1172*89a1d03eSRichard     *sv_ptr = (std::string_view){nullptr} /* h9 */;
1173*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:34: warning: constructing{{.*}}default
1174*89a1d03eSRichard     // CHECK-FIXES: {{^}}    *sv_ptr = (std::string_view){} /* h9 */;
1175*89a1d03eSRichard 
1176*89a1d03eSRichard     *sv_ptr = static_cast<SV>(nullptr) /* h10 */;
1177*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:31: warning: casting{{.*}}empty string
1178*89a1d03eSRichard     // CHECK-FIXES: {{^}}    *sv_ptr = static_cast<SV>("") /* h10 */;
1179*89a1d03eSRichard   }
1180*89a1d03eSRichard }
1181*89a1d03eSRichard 
lesser_comparison(std::string_view sv)1182*89a1d03eSRichard void lesser_comparison(std::string_view sv) /* i */ {
1183*89a1d03eSRichard   // Without Equality
1184*89a1d03eSRichard   {
1185*89a1d03eSRichard     (void)(sv < nullptr) /* i1 */;
1186*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:17: warning: comparing basic_string_view to null is undefined; replace with the empty string
1187*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(sv < "") /* i1 */;
1188*89a1d03eSRichard 
1189*89a1d03eSRichard     (void)(sv < (nullptr)) /* i2 */;
1190*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:17: warning: comparing{{.*}}empty string
1191*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(sv < "") /* i2 */;
1192*89a1d03eSRichard 
1193*89a1d03eSRichard     (void)(nullptr < sv) /* i3 */;
1194*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}empty string
1195*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)("" < sv) /* i3 */;
1196*89a1d03eSRichard 
1197*89a1d03eSRichard     (void)((nullptr) < sv) /* i4 */;
1198*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}empty string
1199*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)("" < sv) /* i4 */;
1200*89a1d03eSRichard   }
1201*89a1d03eSRichard 
1202*89a1d03eSRichard   // With Equality
1203*89a1d03eSRichard   {
1204*89a1d03eSRichard     (void)(sv <= nullptr) /* i5 */;
1205*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:18: warning: comparing{{.*}}empty string
1206*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(sv <= "") /* i5 */;
1207*89a1d03eSRichard 
1208*89a1d03eSRichard     (void)(sv <= (nullptr)) /* i6 */;
1209*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:18: warning: comparing{{.*}}empty string
1210*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(sv <= "") /* i6 */;
1211*89a1d03eSRichard 
1212*89a1d03eSRichard     (void)(nullptr <= sv) /* i7 */;
1213*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}empty string
1214*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)("" <= sv) /* i7 */;
1215*89a1d03eSRichard 
1216*89a1d03eSRichard     (void)((nullptr) <= sv) /* i8 */;
1217*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}empty string
1218*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)("" <= sv) /* i8 */;
1219*89a1d03eSRichard   }
1220*89a1d03eSRichard }
1221*89a1d03eSRichard 
pointer_lesser_comparison(std::string_view * sv_ptr)1222*89a1d03eSRichard void pointer_lesser_comparison(std::string_view *sv_ptr) /* j */ {
1223*89a1d03eSRichard   // Without Equality
1224*89a1d03eSRichard   {
1225*89a1d03eSRichard     (void)(*sv_ptr < nullptr) /* j1 */;
1226*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:22: warning: comparing{{.*}}empty string
1227*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(*sv_ptr < "") /* j1 */;
1228*89a1d03eSRichard 
1229*89a1d03eSRichard     (void)(*sv_ptr < (nullptr)) /* j2 */;
1230*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:22: warning: comparing{{.*}}empty string
1231*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(*sv_ptr < "") /* j2 */;
1232*89a1d03eSRichard 
1233*89a1d03eSRichard     (void)(nullptr < *sv_ptr) /* j3 */;
1234*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}empty string
1235*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)("" < *sv_ptr) /* j3 */;
1236*89a1d03eSRichard 
1237*89a1d03eSRichard     (void)((nullptr) < *sv_ptr) /* j4 */;
1238*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}empty string
1239*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)("" < *sv_ptr) /* j4 */;
1240*89a1d03eSRichard   }
1241*89a1d03eSRichard 
1242*89a1d03eSRichard   // With Equality
1243*89a1d03eSRichard   {
1244*89a1d03eSRichard     (void)(*sv_ptr <= nullptr) /* j5 */;
1245*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:23: warning: comparing{{.*}}empty string
1246*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(*sv_ptr <= "") /* j5 */;
1247*89a1d03eSRichard 
1248*89a1d03eSRichard     (void)(*sv_ptr <= (nullptr)) /* j6 */;
1249*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:23: warning: comparing{{.*}}empty string
1250*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(*sv_ptr <= "") /* j6 */;
1251*89a1d03eSRichard 
1252*89a1d03eSRichard     (void)(nullptr <= *sv_ptr) /* j7 */;
1253*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}empty string
1254*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)("" <= *sv_ptr) /* j7 */;
1255*89a1d03eSRichard 
1256*89a1d03eSRichard     (void)((nullptr) <= *sv_ptr) /* j8 */;
1257*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}empty string
1258*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)("" <= *sv_ptr) /* j8 */;
1259*89a1d03eSRichard   }
1260*89a1d03eSRichard }
1261*89a1d03eSRichard 
greater_comparison(std::string_view sv)1262*89a1d03eSRichard void greater_comparison(std::string_view sv) /* k */ {
1263*89a1d03eSRichard   // Without Equality
1264*89a1d03eSRichard   {
1265*89a1d03eSRichard     (void)(sv > nullptr) /* k1 */;
1266*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:17: warning: comparing{{.*}}empty string
1267*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(sv > "") /* k1 */;
1268*89a1d03eSRichard 
1269*89a1d03eSRichard     (void)(sv > (nullptr)) /* k2 */;
1270*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:17: warning: comparing{{.*}}empty string
1271*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(sv > "") /* k2 */;
1272*89a1d03eSRichard 
1273*89a1d03eSRichard     (void)(nullptr > sv) /* k3 */;
1274*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}empty string
1275*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)("" > sv) /* k3 */;
1276*89a1d03eSRichard 
1277*89a1d03eSRichard     (void)((nullptr) > sv) /* k4 */;
1278*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}empty string
1279*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)("" > sv) /* k4 */;
1280*89a1d03eSRichard   }
1281*89a1d03eSRichard 
1282*89a1d03eSRichard   // With Equality
1283*89a1d03eSRichard   {
1284*89a1d03eSRichard     (void)(sv >= nullptr) /* k5 */;
1285*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:18: warning: comparing{{.*}}empty string
1286*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(sv >= "") /* k5 */;
1287*89a1d03eSRichard 
1288*89a1d03eSRichard     (void)(sv >= (nullptr)) /* k6 */;
1289*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:18: warning: comparing{{.*}}empty string
1290*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(sv >= "") /* k6 */;
1291*89a1d03eSRichard 
1292*89a1d03eSRichard     (void)(nullptr >= sv) /* k7 */;
1293*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}empty string
1294*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)("" >= sv) /* k7 */;
1295*89a1d03eSRichard 
1296*89a1d03eSRichard     (void)((nullptr) >= sv) /* k8 */;
1297*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}empty string
1298*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)("" >= sv) /* k8 */;
1299*89a1d03eSRichard   }
1300*89a1d03eSRichard }
1301*89a1d03eSRichard 
pointer_greater_comparison(std::string_view * sv_ptr)1302*89a1d03eSRichard void pointer_greater_comparison(std::string_view *sv_ptr) /* l */ {
1303*89a1d03eSRichard   // Without Equality
1304*89a1d03eSRichard   {
1305*89a1d03eSRichard     (void)(*sv_ptr > nullptr) /* l1 */;
1306*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:22: warning: comparing{{.*}}empty string
1307*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(*sv_ptr > "") /* l1 */;
1308*89a1d03eSRichard 
1309*89a1d03eSRichard     (void)(*sv_ptr > (nullptr)) /* l2 */;
1310*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:22: warning: comparing{{.*}}empty string
1311*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(*sv_ptr > "") /* l2 */;
1312*89a1d03eSRichard 
1313*89a1d03eSRichard     (void)(nullptr > *sv_ptr) /* l3 */;
1314*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}empty string
1315*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)("" > *sv_ptr) /* l3 */;
1316*89a1d03eSRichard 
1317*89a1d03eSRichard     (void)((nullptr) > *sv_ptr) /* l4 */;
1318*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}empty string
1319*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)("" > *sv_ptr) /* l4 */;
1320*89a1d03eSRichard   }
1321*89a1d03eSRichard 
1322*89a1d03eSRichard   // With Equality
1323*89a1d03eSRichard   {
1324*89a1d03eSRichard     (void)(*sv_ptr >= nullptr) /* l5 */;
1325*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:23: warning: comparing{{.*}}empty string
1326*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(*sv_ptr >= "") /* l5 */;
1327*89a1d03eSRichard 
1328*89a1d03eSRichard     (void)(*sv_ptr >= (nullptr)) /* l6 */;
1329*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:23: warning: comparing{{.*}}empty string
1330*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(*sv_ptr >= "") /* l6 */;
1331*89a1d03eSRichard 
1332*89a1d03eSRichard     (void)(nullptr >= *sv_ptr) /* l7 */;
1333*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}empty string
1334*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)("" >= *sv_ptr) /* l7 */;
1335*89a1d03eSRichard 
1336*89a1d03eSRichard     (void)((nullptr) >= *sv_ptr) /* l8 */;
1337*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}empty string
1338*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)("" >= *sv_ptr) /* l8 */;
1339*89a1d03eSRichard   }
1340*89a1d03eSRichard }
1341*89a1d03eSRichard 
relative_comparison_with_temporary(std::string_view sv)1342*89a1d03eSRichard void relative_comparison_with_temporary(std::string_view sv) /* m */ {
1343*89a1d03eSRichard   (void)(sv < std::string_view(nullptr)) /* m1 */;
1344*89a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:32: warning: constructing{{.*}}default
1345*89a1d03eSRichard   // CHECK-FIXES: {{^}}  (void)(sv < std::string_view()) /* m1 */;
1346*89a1d03eSRichard 
1347*89a1d03eSRichard   (void)(sv < std::string_view{nullptr}) /* m2 */;
1348*89a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:32: warning: constructing{{.*}}default
1349*89a1d03eSRichard   // CHECK-FIXES: {{^}}  (void)(sv < std::string_view{}) /* m2 */;
1350*89a1d03eSRichard 
1351*89a1d03eSRichard   (void)(sv < (std::string_view) nullptr) /* m3 */;
1352*89a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:34: warning: constructing{{.*}}default
1353*89a1d03eSRichard   // CHECK-FIXES: {{^}}  (void)(sv < (std::string_view) {}) /* m3 */;
1354*89a1d03eSRichard 
1355*89a1d03eSRichard   (void)(sv < (std::string_view){nullptr}) /* m4 */;
1356*89a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:34: warning: constructing{{.*}}default
1357*89a1d03eSRichard   // CHECK-FIXES: {{^}}  (void)(sv < (std::string_view){}) /* m4 */;
1358*89a1d03eSRichard 
1359*89a1d03eSRichard   (void)(sv < static_cast<SV>(nullptr)) /* m5 */;
1360*89a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:31: warning: casting{{.*}}empty string
1361*89a1d03eSRichard   // CHECK-FIXES: {{^}}  (void)(sv < static_cast<SV>("")) /* m5 */;
1362*89a1d03eSRichard }
1363*89a1d03eSRichard 
equality_comparison(std::string_view sv)1364*89a1d03eSRichard void equality_comparison(std::string_view sv) /* n */ {
1365*89a1d03eSRichard   // Empty Without Parens
1366*89a1d03eSRichard   {
1367*89a1d03eSRichard     (void)(sv == nullptr) /* n1 */;
1368*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing basic_string_view to null is undefined; replace with the emptiness query
1369*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(sv.empty()) /* n1 */;
1370*89a1d03eSRichard 
1371*89a1d03eSRichard     (void)(sv == (nullptr)) /* n2 */;
1372*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}emptiness query
1373*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(sv.empty()) /* n2 */;
1374*89a1d03eSRichard 
1375*89a1d03eSRichard     (void)(nullptr == sv) /* n3 */;
1376*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}emptiness query
1377*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(sv.empty()) /* n3 */;
1378*89a1d03eSRichard 
1379*89a1d03eSRichard     (void)((nullptr) == sv) /* n4 */;
1380*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}emptiness query
1381*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(sv.empty()) /* n4 */;
1382*89a1d03eSRichard   }
1383*89a1d03eSRichard 
1384*89a1d03eSRichard   // Empty With Parens
1385*89a1d03eSRichard   {
1386*89a1d03eSRichard     (void)((sv) == nullptr) /* n5 */;
1387*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing basic_string_view to null is undefined; replace with the emptiness query
1388*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(sv.empty()) /* n5 */;
1389*89a1d03eSRichard 
1390*89a1d03eSRichard     (void)((sv) == (nullptr)) /* n6 */;
1391*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}emptiness query
1392*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(sv.empty()) /* n6 */;
1393*89a1d03eSRichard 
1394*89a1d03eSRichard     (void)(nullptr == (sv)) /* n7 */;
1395*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}emptiness query
1396*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(sv.empty()) /* n7 */;
1397*89a1d03eSRichard 
1398*89a1d03eSRichard     (void)((nullptr) == (sv)) /* n8 */;
1399*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}emptiness query
1400*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(sv.empty()) /* n8 */;
1401*89a1d03eSRichard   }
1402*89a1d03eSRichard 
1403*89a1d03eSRichard   // Non-Empty Without Parens
1404*89a1d03eSRichard   {
1405*89a1d03eSRichard     (void)((sv) != nullptr) /* n9 */;
1406*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}emptiness query
1407*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(!sv.empty()) /* n9 */;
1408*89a1d03eSRichard 
1409*89a1d03eSRichard     (void)((sv) != (nullptr)) /* n10 */;
1410*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}emptiness query
1411*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(!sv.empty()) /* n10 */;
1412*89a1d03eSRichard 
1413*89a1d03eSRichard     (void)(nullptr != (sv)) /* n11 */;
1414*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}emptiness query
1415*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(!sv.empty()) /* n11 */;
1416*89a1d03eSRichard 
1417*89a1d03eSRichard     (void)((nullptr) != (sv)) /* n12 */;
1418*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}emptiness query
1419*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(!sv.empty()) /* n12 */;
1420*89a1d03eSRichard   }
1421*89a1d03eSRichard 
1422*89a1d03eSRichard   // Non-Empty With Parens
1423*89a1d03eSRichard   {
1424*89a1d03eSRichard     (void)((sv) != nullptr) /* n13 */;
1425*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}emptiness query
1426*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(!sv.empty()) /* n13 */;
1427*89a1d03eSRichard 
1428*89a1d03eSRichard     (void)((sv) != (nullptr)) /* n14 */;
1429*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}emptiness query
1430*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(!sv.empty()) /* n14 */;
1431*89a1d03eSRichard 
1432*89a1d03eSRichard     (void)(nullptr != (sv)) /* n15 */;
1433*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}emptiness query
1434*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(!sv.empty()) /* n15 */;
1435*89a1d03eSRichard 
1436*89a1d03eSRichard     (void)((nullptr) != (sv)) /* n16 */;
1437*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}emptiness query
1438*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(!sv.empty()) /* n16 */;
1439*89a1d03eSRichard   }
1440*89a1d03eSRichard }
1441*89a1d03eSRichard 
pointer_equality_comparison(std::string_view * sv_ptr)1442*89a1d03eSRichard void pointer_equality_comparison(std::string_view *sv_ptr) /* o */ {
1443*89a1d03eSRichard   // Empty Without Parens
1444*89a1d03eSRichard   {
1445*89a1d03eSRichard     (void)(*sv_ptr == nullptr) /* o1 */;
1446*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}emptiness query
1447*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(sv_ptr->empty()) /* o1 */;
1448*89a1d03eSRichard 
1449*89a1d03eSRichard     (void)(*sv_ptr == (nullptr)) /* o2 */;
1450*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}emptiness query
1451*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(sv_ptr->empty()) /* o2 */;
1452*89a1d03eSRichard 
1453*89a1d03eSRichard     (void)(nullptr == *sv_ptr) /* o3 */;
1454*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}emptiness query
1455*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(sv_ptr->empty()) /* o3 */;
1456*89a1d03eSRichard 
1457*89a1d03eSRichard     (void)((nullptr) == *sv_ptr) /* o4 */;
1458*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}emptiness query
1459*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(sv_ptr->empty()) /* o4 */;
1460*89a1d03eSRichard   }
1461*89a1d03eSRichard 
1462*89a1d03eSRichard   // Empty With Parens
1463*89a1d03eSRichard   {
1464*89a1d03eSRichard     (void)((*sv_ptr) == nullptr) /* o5 */;
1465*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}emptiness query
1466*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(sv_ptr->empty()) /* o5 */;
1467*89a1d03eSRichard 
1468*89a1d03eSRichard     (void)((*sv_ptr) == (nullptr)) /* o6 */;
1469*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}emptiness query
1470*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(sv_ptr->empty()) /* o6 */;
1471*89a1d03eSRichard 
1472*89a1d03eSRichard     (void)(nullptr == (*sv_ptr)) /* o7 */;
1473*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}emptiness query
1474*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(sv_ptr->empty()) /* o7 */;
1475*89a1d03eSRichard 
1476*89a1d03eSRichard     (void)((nullptr) == (*sv_ptr)) /* o8 */;
1477*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}emptiness query
1478*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(sv_ptr->empty()) /* o8 */;
1479*89a1d03eSRichard   }
1480*89a1d03eSRichard 
1481*89a1d03eSRichard   // Non-Empty With Parens
1482*89a1d03eSRichard   {
1483*89a1d03eSRichard     (void)((*sv_ptr) != nullptr) /* o9 */;
1484*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}emptiness query
1485*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(!sv_ptr->empty()) /* o9 */;
1486*89a1d03eSRichard 
1487*89a1d03eSRichard     (void)((*sv_ptr) != (nullptr)) /* o10 */;
1488*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}emptiness query
1489*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(!sv_ptr->empty()) /* o10 */;
1490*89a1d03eSRichard 
1491*89a1d03eSRichard     (void)(nullptr != (*sv_ptr)) /* o11 */;
1492*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}emptiness query
1493*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(!sv_ptr->empty()) /* o11 */;
1494*89a1d03eSRichard 
1495*89a1d03eSRichard     (void)((nullptr) != (*sv_ptr)) /* o12 */;
1496*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}emptiness query
1497*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(!sv_ptr->empty()) /* o12 */;
1498*89a1d03eSRichard   }
1499*89a1d03eSRichard 
1500*89a1d03eSRichard   // Non-Empty Without Parens
1501*89a1d03eSRichard   {
1502*89a1d03eSRichard     (void)((*sv_ptr) != nullptr) /* o13 */;
1503*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}emptiness query
1504*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(!sv_ptr->empty()) /* o13 */;
1505*89a1d03eSRichard 
1506*89a1d03eSRichard     (void)((*sv_ptr) != (nullptr)) /* o14 */;
1507*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}emptiness query
1508*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(!sv_ptr->empty()) /* o14 */;
1509*89a1d03eSRichard 
1510*89a1d03eSRichard     (void)(nullptr != (*sv_ptr)) /* o15 */;
1511*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}emptiness query
1512*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(!sv_ptr->empty()) /* o15 */;
1513*89a1d03eSRichard 
1514*89a1d03eSRichard     (void)((nullptr) != (*sv_ptr)) /* o16 */;
1515*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}emptiness query
1516*89a1d03eSRichard     // CHECK-FIXES: {{^}}    (void)(!sv_ptr->empty()) /* o16 */;
1517*89a1d03eSRichard   }
1518*89a1d03eSRichard }
1519*89a1d03eSRichard 
equality_comparison_with_temporary(std::string_view sv)1520*89a1d03eSRichard void equality_comparison_with_temporary(std::string_view sv) /* p */ {
1521*89a1d03eSRichard   (void)(sv == std::string_view(nullptr)) /* p1 */;
1522*89a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:33: warning: constructing{{.*}}default
1523*89a1d03eSRichard   // CHECK-FIXES: {{^}}  (void)(sv == std::string_view()) /* p1 */;
1524*89a1d03eSRichard 
1525*89a1d03eSRichard   (void)(sv == std::string_view{nullptr}) /* p2 */;
1526*89a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:33: warning: constructing{{.*}}default
1527*89a1d03eSRichard   // CHECK-FIXES: {{^}}  (void)(sv == std::string_view{}) /* p2 */;
1528*89a1d03eSRichard 
1529*89a1d03eSRichard   (void)(sv == (std::string_view) nullptr) /* p3 */;
1530*89a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:35: warning: constructing{{.*}}default
1531*89a1d03eSRichard   // CHECK-FIXES: {{^}}  (void)(sv == (std::string_view) {}) /* p3 */;
1532*89a1d03eSRichard 
1533*89a1d03eSRichard   (void)(sv == (std::string_view){nullptr}) /* p4 */;
1534*89a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:35: warning: constructing{{.*}}default
1535*89a1d03eSRichard   // CHECK-FIXES: {{^}}  (void)(sv == (std::string_view){}) /* p4 */;
1536*89a1d03eSRichard 
1537*89a1d03eSRichard   (void)(sv == static_cast<SV>(nullptr)) /* p5 */;
1538*89a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:32: warning: casting{{.*}}empty string
1539*89a1d03eSRichard   // CHECK-FIXES: {{^}}  (void)(sv == static_cast<SV>("")) /* p5 */;
1540*89a1d03eSRichard }
1541*89a1d03eSRichard 
return_statement()1542*89a1d03eSRichard void return_statement() /* q */ {
1543*89a1d03eSRichard   // Return Statement
1544*89a1d03eSRichard   {
1545*89a1d03eSRichard     []() -> SV { return nullptr; } /* q1 */;
1546*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:25: warning: constructing{{.*}}default
1547*89a1d03eSRichard     // CHECK-FIXES: {{^}}    []() -> SV { return {}; } /* q1 */;
1548*89a1d03eSRichard 
1549*89a1d03eSRichard     []() -> SV { return (nullptr); } /* q2 */;
1550*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:25: warning: constructing{{.*}}default
1551*89a1d03eSRichard     // CHECK-FIXES: {{^}}    []() -> SV { return {}; } /* q2 */;
1552*89a1d03eSRichard 
1553*89a1d03eSRichard     []() -> SV { return {nullptr}; } /* q3 */;
1554*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:25: warning: constructing{{.*}}default
1555*89a1d03eSRichard     // CHECK-FIXES: {{^}}    []() -> SV { return {}; } /* q3 */;
1556*89a1d03eSRichard 
1557*89a1d03eSRichard     []() -> SV { return {(nullptr)}; } /* q4 */;
1558*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:25: warning: constructing{{.*}}default
1559*89a1d03eSRichard     // CHECK-FIXES: {{^}}    []() -> SV { return {}; } /* q4 */;
1560*89a1d03eSRichard 
1561*89a1d03eSRichard     []() -> SV { return {{nullptr}}; } /* q5 */;
1562*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:25: warning: constructing{{.*}}default
1563*89a1d03eSRichard     // CHECK-FIXES: {{^}}    []() -> SV { return {}; } /* q5 */;
1564*89a1d03eSRichard 
1565*89a1d03eSRichard     []() -> SV { return {{(nullptr)}}; } /* q6 */;
1566*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:25: warning: constructing{{.*}}default
1567*89a1d03eSRichard     // CHECK-FIXES: {{^}}    []() -> SV { return {}; } /* q6 */;
1568*89a1d03eSRichard 
1569*89a1d03eSRichard     []() -> SV { return {{}}; } /* q7 */; // Default `const CharT*`
1570*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:25: warning: constructing{{.*}}default
1571*89a1d03eSRichard     // CHECK-FIXES: {{^}}    []() -> SV { return {}; } /* q7 */;
1572*89a1d03eSRichard   }
1573*89a1d03eSRichard 
1574*89a1d03eSRichard   // Return Statement With Temporary
1575*89a1d03eSRichard   {
1576*89a1d03eSRichard     []() -> SV { return SV(nullptr); } /* q8 */;
1577*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:28: warning: constructing{{.*}}default
1578*89a1d03eSRichard     // CHECK-FIXES: {{^}}    []() -> SV { return SV(); } /* q8 */;
1579*89a1d03eSRichard 
1580*89a1d03eSRichard     []() -> SV { return SV{nullptr}; } /* q9 */;
1581*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:28: warning: constructing{{.*}}default
1582*89a1d03eSRichard     // CHECK-FIXES: {{^}}    []() -> SV { return SV{}; } /* q9 */;
1583*89a1d03eSRichard 
1584*89a1d03eSRichard     []() -> SV { return (SV) nullptr; } /* q10 */;
1585*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:30: warning: constructing{{.*}}default
1586*89a1d03eSRichard     // CHECK-FIXES: {{^}}    []() -> SV { return (SV) {}; } /* q10 */;
1587*89a1d03eSRichard 
1588*89a1d03eSRichard     []() -> SV { return (SV){nullptr}; } /* q11 */;
1589*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:30: warning: constructing{{.*}}default
1590*89a1d03eSRichard     // CHECK-FIXES: {{^}}    []() -> SV { return (SV){}; } /* q11 */;
1591*89a1d03eSRichard 
1592*89a1d03eSRichard     []() -> SV { return static_cast<SV>(nullptr); } /* q12 */;
1593*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:41: warning: casting{{.*}}empty string
1594*89a1d03eSRichard     // CHECK-FIXES: {{^}}    []() -> SV { return static_cast<SV>(""); } /* q12 */;
1595*89a1d03eSRichard   }
1596*89a1d03eSRichard }
1597*89a1d03eSRichard 
constructor_invocation()1598*89a1d03eSRichard void constructor_invocation() /* r */ {
1599*89a1d03eSRichard   struct AcceptsSV {
1600*89a1d03eSRichard     explicit AcceptsSV(std::string_view) {}
1601*89a1d03eSRichard   } r1(nullptr);
1602*89a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: passing{{.*}}empty string
1603*89a1d03eSRichard   // CHECK-FIXES: {{^}}  } r1("");
1604*89a1d03eSRichard 
1605*89a1d03eSRichard   (void)(AcceptsSV{nullptr}) /* r2 */;
1606*89a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:20: warning: passing{{.*}}empty string
1607*89a1d03eSRichard   // CHECK-FIXES: {{^}}  (void)(AcceptsSV{""}) /* r2 */;
1608*89a1d03eSRichard 
1609*89a1d03eSRichard   AcceptsSV r3{nullptr};
1610*89a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: passing{{.*}}empty string
1611*89a1d03eSRichard   // CHECK-FIXES: {{^}}  AcceptsSV r3{""};
1612*89a1d03eSRichard }
1613