[clang-tools-extra] [clang-tidy] Speed up/rewrite `bugprone-stringview-nullptr` (PR #192889)
Victor Chernyakin via cfe-commits
cfe-commits at lists.llvm.org
Sun Apr 19 21:33:07 PDT 2026
================
@@ -1328,295 +1328,217 @@ void pointer_greater_comparison(std::string_view *sv_ptr) /* l */ {
// Without Equality
{
(void)(*sv_ptr > nullptr) /* l1 */;
- // CHECK-MESSAGES: :[[@LINE-1]]:22: warning: comparing{{.*}}empty string
+ // CHECK-MESSAGES: :[[@LINE-1]]:22: warning: constructing
// CHECK-FIXES: (void)(*sv_ptr > "") /* l1 */;
(void)(*sv_ptr > (nullptr)) /* l2 */;
- // CHECK-MESSAGES: :[[@LINE-1]]:22: warning: comparing{{.*}}empty string
+ // CHECK-MESSAGES: :[[@LINE-1]]:22: warning: constructing
// CHECK-FIXES: (void)(*sv_ptr > "") /* l2 */;
(void)(nullptr > *sv_ptr) /* l3 */;
- // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}empty string
+ // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: constructing
// CHECK-FIXES: (void)("" > *sv_ptr) /* l3 */;
(void)((nullptr) > *sv_ptr) /* l4 */;
- // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}empty string
+ // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: constructing
// CHECK-FIXES: (void)("" > *sv_ptr) /* l4 */;
}
// With Equality
{
(void)(*sv_ptr >= nullptr) /* l5 */;
- // CHECK-MESSAGES: :[[@LINE-1]]:23: warning: comparing{{.*}}empty string
+ // CHECK-MESSAGES: :[[@LINE-1]]:23: warning: constructing
// CHECK-FIXES: (void)(*sv_ptr >= "") /* l5 */;
(void)(*sv_ptr >= (nullptr)) /* l6 */;
- // CHECK-MESSAGES: :[[@LINE-1]]:23: warning: comparing{{.*}}empty string
+ // CHECK-MESSAGES: :[[@LINE-1]]:23: warning: constructing
// CHECK-FIXES: (void)(*sv_ptr >= "") /* l6 */;
(void)(nullptr >= *sv_ptr) /* l7 */;
- // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}empty string
+ // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: constructing
// CHECK-FIXES: (void)("" >= *sv_ptr) /* l7 */;
(void)((nullptr) >= *sv_ptr) /* l8 */;
- // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}empty string
+ // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: constructing
// CHECK-FIXES: (void)("" >= *sv_ptr) /* l8 */;
}
}
void relative_comparison_with_temporary(std::string_view sv) /* m */ {
(void)(sv < std::string_view(nullptr)) /* m1 */;
- // CHECK-MESSAGES: :[[@LINE-1]]:32: warning: constructing{{.*}}default
+ // CHECK-MESSAGES: :[[@LINE-1]]:32: warning: constructing
// CHECK-FIXES: (void)(sv < std::string_view()) /* m1 */;
(void)(sv < std::string_view{nullptr}) /* m2 */;
- // CHECK-MESSAGES: :[[@LINE-1]]:32: warning: constructing{{.*}}default
+ // CHECK-MESSAGES: :[[@LINE-1]]:32: warning: constructing
// CHECK-FIXES: (void)(sv < std::string_view{}) /* m2 */;
(void)(sv < (std::string_view) nullptr) /* m3 */;
- // CHECK-MESSAGES: :[[@LINE-1]]:34: warning: constructing{{.*}}default
+ // CHECK-MESSAGES: :[[@LINE-1]]:34: warning: constructing
// CHECK-FIXES: (void)(sv < (std::string_view) {}) /* m3 */;
(void)(sv < (std::string_view){nullptr}) /* m4 */;
- // CHECK-MESSAGES: :[[@LINE-1]]:34: warning: constructing{{.*}}default
+ // CHECK-MESSAGES: :[[@LINE-1]]:34: warning: constructing
// CHECK-FIXES: (void)(sv < (std::string_view){}) /* m4 */;
(void)(sv < static_cast<SV>(nullptr)) /* m5 */;
- // CHECK-MESSAGES: :[[@LINE-1]]:31: warning: casting{{.*}}empty string
+ // CHECK-MESSAGES: :[[@LINE-1]]:31: warning: constructing
// CHECK-FIXES: (void)(sv < static_cast<SV>("")) /* m5 */;
}
void equality_comparison(std::string_view sv) /* n */ {
// Empty Without Parens
{
(void)(sv == nullptr) /* n1 */;
- // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing basic_string_view to null is undefined; replace with the emptiness query
- // CHECK-FIXES: (void)(sv.empty()) /* n1 */;
+ // CHECK-MESSAGES: :[[@LINE-1]]:18: warning: constructing
+ // CHECK-FIXES: (void)(sv == "") /* n1 */;
(void)(sv == (nullptr)) /* n2 */;
- // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}emptiness query
- // CHECK-FIXES: (void)(sv.empty()) /* n2 */;
+ // CHECK-MESSAGES: :[[@LINE-1]]:18: warning: constructing
+ // CHECK-FIXES: (void)(sv == "") /* n2 */;
(void)(nullptr == sv) /* n3 */;
- // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}emptiness query
- // CHECK-FIXES: (void)(sv.empty()) /* n3 */;
+ // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: constructing
+ // CHECK-FIXES: (void)("" == sv) /* n3 */;
(void)((nullptr) == sv) /* n4 */;
- // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}emptiness query
- // CHECK-FIXES: (void)(sv.empty()) /* n4 */;
+ // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: constructing
+ // CHECK-FIXES: (void)("" == sv) /* n4 */;
}
// Empty With Parens
{
(void)((sv) == nullptr) /* n5 */;
- // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing basic_string_view to null is undefined; replace with the emptiness query
- // CHECK-FIXES: (void)(sv.empty()) /* n5 */;
+ // CHECK-MESSAGES: :[[@LINE-1]]:20: warning: constructing
+ // CHECK-FIXES: (void)((sv) == "") /* n5 */;
(void)((sv) == (nullptr)) /* n6 */;
- // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}emptiness query
- // CHECK-FIXES: (void)(sv.empty()) /* n6 */;
+ // CHECK-MESSAGES: :[[@LINE-1]]:20: warning: constructing
+ // CHECK-FIXES: (void)((sv) == "") /* n6 */;
(void)(nullptr == (sv)) /* n7 */;
- // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}emptiness query
- // CHECK-FIXES: (void)(sv.empty()) /* n7 */;
+ // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: constructing
+ // CHECK-FIXES: (void)("" == (sv)) /* n7 */;
(void)((nullptr) == (sv)) /* n8 */;
- // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}emptiness query
- // CHECK-FIXES: (void)(sv.empty()) /* n8 */;
+ // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: constructing
+ // CHECK-FIXES: (void)("" == (sv)) /* n8 */;
}
// Non-Empty Without Parens
{
(void)((sv) != nullptr) /* n9 */;
- // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}emptiness query
- // CHECK-FIXES: (void)(!sv.empty()) /* n9 */;
+ // CHECK-MESSAGES: :[[@LINE-1]]:20: warning: constructing
+ // CHECK-FIXES: (void)((sv) != "") /* n9 */;
(void)((sv) != (nullptr)) /* n10 */;
- // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}emptiness query
- // CHECK-FIXES: (void)(!sv.empty()) /* n10 */;
+ // CHECK-MESSAGES: :[[@LINE-1]]:20: warning: constructing
+ // CHECK-FIXES: (void)((sv) != "") /* n10 */;
(void)(nullptr != (sv)) /* n11 */;
- // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}emptiness query
- // CHECK-FIXES: (void)(!sv.empty()) /* n11 */;
+ // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: constructing
+ // CHECK-FIXES: (void)("" != (sv)) /* n11 */;
(void)((nullptr) != (sv)) /* n12 */;
- // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}emptiness query
- // CHECK-FIXES: (void)(!sv.empty()) /* n12 */;
+ // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: constructing
+ // CHECK-FIXES: (void)("" != (sv)) /* n12 */;
}
// Non-Empty With Parens
{
(void)((sv) != nullptr) /* n13 */;
- // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}emptiness query
- // CHECK-FIXES: (void)(!sv.empty()) /* n13 */;
+ // CHECK-MESSAGES: :[[@LINE-1]]:20: warning: constructing
+ // CHECK-FIXES: (void)((sv) != "") /* n13 */;
(void)((sv) != (nullptr)) /* n14 */;
- // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}emptiness query
- // CHECK-FIXES: (void)(!sv.empty()) /* n14 */;
+ // CHECK-MESSAGES: :[[@LINE-1]]:20: warning: constructing
+ // CHECK-FIXES: (void)((sv) != "") /* n14 */;
(void)(nullptr != (sv)) /* n15 */;
- // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}emptiness query
- // CHECK-FIXES: (void)(!sv.empty()) /* n15 */;
+ // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: constructing
+ // CHECK-FIXES: (void)("" != (sv)) /* n15 */;
(void)((nullptr) != (sv)) /* n16 */;
- // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}emptiness query
- // CHECK-FIXES: (void)(!sv.empty()) /* n16 */;
- }
-}
-
-void pointer_equality_comparison(std::string_view *sv_ptr) /* o */ {
- // Empty Without Parens
- {
- (void)(*sv_ptr == nullptr) /* o1 */;
- // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: comparing{{.*}}emptiness query
- // CHECK-FIXES: (void)(sv_ptr->empty()) /* o1 */;
----------------
localspook wrote:
I've removed this test case because, with the new code, `*sv_ptr == nullptr` exercises the same code paths as `sv == nullptr`.
https://github.com/llvm/llvm-project/pull/192889
More information about the cfe-commits
mailing list