CJ-Johnson created this revision.
Herald added subscribers: carlosgalvezp, xazax.hun.
CJ-Johnson requested review of this revision.
Herald added a project: clang-tools-extra.
Herald added a subscriber: cfe-commits.
Previously, function(nullptr) would have been fixed with function({}). This
unfortunately can change overload resolution and even become ambiguous.
T(nullptr) was already being fixed with T(""), so this change just brings
function calls in line with that.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D117840
Files:
clang-tools-extra/clang-tidy/bugprone/StringviewNullptrCheck.cpp
clang-tools-extra/docs/clang-tidy/checks/bugprone-stringview-nullptr.rst
clang-tools-extra/test/clang-tidy/checkers/bugprone-stringview-nullptr.cpp
Index: clang-tools-extra/test/clang-tidy/checkers/bugprone-stringview-nullptr.cpp
===================================================================
--- clang-tools-extra/test/clang-tidy/checkers/bugprone-stringview-nullptr.cpp
+++ clang-tools-extra/test/clang-tidy/checkers/bugprone-stringview-nullptr.cpp
@@ -1039,24 +1039,24 @@
// Function Argument Initialization
{
function(nullptr) /* f1 */;
- // CHECK-MESSAGES: :[[@LINE-1]]:14: warning: constructing{{.*}}default
- // CHECK-FIXES: {{^}} function({}) /* f1 */;
+ // CHECK-MESSAGES: :[[@LINE-1]]:14: warning: passing null as basic_string_view is undefined; replace with the empty string
+ // CHECK-FIXES: {{^}} function("") /* f1 */;
function((nullptr)) /* f2 */;
- // CHECK-MESSAGES: :[[@LINE-1]]:14: warning: constructing{{.*}}default
- // CHECK-FIXES: {{^}} function({}) /* f2 */;
+ // CHECK-MESSAGES: :[[@LINE-1]]:14: warning: passing{{.*}}empty string
+ // CHECK-FIXES: {{^}} function("") /* f2 */;
function({nullptr}) /* f3 */;
- // CHECK-MESSAGES: :[[@LINE-1]]:14: warning: constructing{{.*}}default
- // CHECK-FIXES: {{^}} function({}) /* f3 */;
+ // CHECK-MESSAGES: :[[@LINE-1]]:14: warning: passing{{.*}}empty string
+ // CHECK-FIXES: {{^}} function("") /* f3 */;
function({(nullptr)}) /* f4 */;
- // CHECK-MESSAGES: :[[@LINE-1]]:14: warning: constructing{{.*}}default
- // CHECK-FIXES: {{^}} function({}) /* f4 */;
+ // CHECK-MESSAGES: :[[@LINE-1]]:14: warning: passing{{.*}}empty string
+ // CHECK-FIXES: {{^}} function("") /* f4 */;
function({{}}) /* f5 */; // Default `const CharT*`
- // CHECK-MESSAGES: :[[@LINE-1]]:14: warning: constructing{{.*}}default
- // CHECK-FIXES: {{^}} function({}) /* f5 */;
+ // CHECK-MESSAGES: :[[@LINE-1]]:14: warning: passing{{.*}}empty string
+ // CHECK-FIXES: {{^}} function("") /* f5 */;
}
// Function Argument Initialization With Temporary
@@ -1599,7 +1599,7 @@
struct AcceptsSV {
explicit AcceptsSV(std::string_view) {}
} r1(nullptr);
- // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: passing null as basic_string_view is undefined; replace with the empty string
+ // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: passing{{.*}}empty string
// CHECK-FIXES: {{^}} } r1("");
(void)(AcceptsSV{nullptr}) /* r2 */;
Index: clang-tools-extra/docs/clang-tidy/checks/bugprone-stringview-nullptr.rst
===================================================================
--- clang-tools-extra/docs/clang-tidy/checks/bugprone-stringview-nullptr.rst
+++ clang-tools-extra/docs/clang-tidy/checks/bugprone-stringview-nullptr.rst
@@ -43,9 +43,9 @@
bool is_empty = sv.empty();
bool isnt_empty = !sv.empty();
- accepts_sv({});
+ accepts_sv("");
- accepts_sv({}); // A
+ accepts_sv(""); // A
accepts_sv({nullptr, 0}); // B
Index: clang-tools-extra/clang-tidy/bugprone/StringviewNullptrCheck.cpp
===================================================================
--- clang-tools-extra/clang-tidy/bugprone/StringviewNullptrCheck.cpp
+++ clang-tools-extra/clang-tidy/bugprone/StringviewNullptrCheck.cpp
@@ -44,6 +44,9 @@
auto static_cast_warning =
cat("casting to basic_string_view from null is undefined; replace with "
"the empty string");
+ auto argument_construction_warning =
+ cat("passing null as basic_string_view is undefined; replace with the "
+ "empty string");
auto assignment_warning =
cat("assignment to basic_string_view from null is undefined; replace "
"with the default constructor");
@@ -53,9 +56,6 @@
auto equality_comparison_warning =
cat("comparing basic_string_view to null is undefined; replace with the "
"emptiness query");
- auto constructor_argument_warning =
- cat("passing null as basic_string_view is undefined; replace with the "
- "empty string");
// Matches declarations and expressions of type `basic_string_view`
auto HasBasicStringViewType = hasType(hasUnqualifiedDesugaredType(recordType(
@@ -211,11 +211,12 @@
remove(node("null_arg_expr")), construction_warning);
// `function(null_arg_expr)`
- auto HandleFunctionArgumentInitialization = makeRule(
- callExpr(hasAnyArgument(
- ignoringImpCasts(BasicStringViewConstructingFromNullExpr)),
- unless(cxxOperatorCallExpr())),
- changeTo(node("construct_expr"), cat("{}")), construction_warning);
+ auto HandleFunctionArgumentInitialization =
+ makeRule(callExpr(hasAnyArgument(ignoringImpCasts(
+ BasicStringViewConstructingFromNullExpr)),
+ unless(cxxOperatorCallExpr())),
+ changeTo(node("construct_expr"), cat("\"\"")),
+ argument_construction_warning);
// `sv = null_arg_expr`
auto HandleAssignment = makeRule(
@@ -268,7 +269,7 @@
BasicStringViewConstructingFromNullExpr)),
unless(HasBasicStringViewType)),
changeTo(node("construct_expr"), cat("\"\"")),
- constructor_argument_warning);
+ argument_construction_warning);
return applyFirst(
{HandleTemporaryCXXFunctionalCastExpr,
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits