[clang-tools-extra] [clang-tidy] Fix invalid fixit from modernize-use-ranges for nullptr used with std::unique_ptr (PR #127162)
via cfe-commits
cfe-commits at lists.llvm.org
Thu Feb 13 20:33:16 PST 2025
https://github.com/Andrewyuan34 updated https://github.com/llvm/llvm-project/pull/127162
>From 05c61b85937025bf936ca2a64b38d66e18f4fcbc Mon Sep 17 00:00:00 2001
From: Andrewyuan34 <yiboy at uvic.ca>
Date: Thu, 13 Feb 2025 22:35:36 -0500
Subject: [PATCH 1/2] [clang-tidy] Fix invalid fixit from modernize-use-ranges
for nullptr used with std::unique_ptr
---
.../clang-tidy/modernize/UseRangesCheck.cpp | 1 +
.../checkers/modernize/use-ranges.cpp | 25 ++++++++++++++++---
2 files changed, 23 insertions(+), 3 deletions(-)
diff --git a/clang-tools-extra/clang-tidy/modernize/UseRangesCheck.cpp b/clang-tools-extra/clang-tidy/modernize/UseRangesCheck.cpp
index 604204e762c78..03b4321ceae99 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseRangesCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/UseRangesCheck.cpp
@@ -165,6 +165,7 @@ utils::UseRangesCheck::ReplacerMap UseRangesCheck::getReplacerMap() const {
Buff.assign({"::std::", Name});
Result.try_emplace(Buff, Replacer);
}
+ // auto Diag = diag("1111");
}
if (getLangOpts().CPlusPlus23)
Result.try_emplace(
diff --git a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-ranges.cpp b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-ranges.cpp
index b022efebfdf4d..57ca038f64511 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-ranges.cpp
+++ b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-ranges.cpp
@@ -1,14 +1,24 @@
-// RUN: %check_clang_tidy -std=c++20 %s modernize-use-ranges %t -- -- -I %S/Inputs/use-ranges/
-// RUN: %check_clang_tidy -std=c++23 %s modernize-use-ranges %t -check-suffixes=,CPP23 -- -I %S/Inputs/use-ranges/
+// RUN: %check_clang_tidy -std=c++20 %s modernize-use-ranges %t -- -- -I %S/Inputs/
+// RUN: %check_clang_tidy -std=c++23 %s modernize-use-ranges %t -check-suffixes=,CPP23 -- -I %S/Inputs/
+// Example: ./check_clang_tidy.py -std=c++20 checkers/modernize/use-ranges.cpp modernize-use-ranges temp.txt -- -- -I ~/llvm-project/clang-tools-extra/test/clang-tidy/checkers/modernize/Inputs/
// CHECK-FIXES: #include <algorithm>
// CHECK-FIXES-CPP23: #include <numeric>
// CHECK-FIXES: #include <ranges>
-#include "fake_std.h"
+#include "use-ranges/fake_std.h"
+#include "smart-ptr/unique_ptr.h"
void Positives() {
std::vector<int> I, J;
+
+ // Expect to have no check messages
+ std::find(I.begin(), I.end(), nullptr);
+
+ std::find(I.begin(), I.end(), std::unique_ptr<int>());
+ // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use a ranges version of this algorithm
+ // CHECK-FIXES: std::ranges::find(I, std::unique_ptr<int>());
+
std::find(I.begin(), I.end(), 0);
// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use a ranges version of this algorithm
// CHECK-FIXES: std::ranges::find(I, 0);
@@ -76,6 +86,14 @@ void Positives() {
void Reverse(){
std::vector<int> I, J;
+
+ // Expect to have no check messages
+ std::find(I.rbegin(), I.rend(), nullptr);
+
+ std::find(I.rbegin(), I.rend(), std::unique_ptr<int>());
+ // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use a ranges version of this algorithm
+ // CHECK-FIXES: std::ranges::find(std::ranges::reverse_view(I), std::unique_ptr<int>());
+
std::find(I.rbegin(), I.rend(), 0);
// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use a ranges version of this algorithm
// CHECK-FIXES: std::ranges::find(std::ranges::reverse_view(I), 0);
@@ -112,3 +130,4 @@ void Negatives() {
// Pathological, but probably shouldn't diagnose this
std::rotate(I.begin(), I.end(), I.end() + 0);
}
+
>From a1dfd7d82118d9e809544e73addd4887760cf066 Mon Sep 17 00:00:00 2001
From: Andrewyuan34 <yiboy at uvic.ca>
Date: Thu, 13 Feb 2025 23:28:49 -0500
Subject: [PATCH 2/2] asdas
---
.../clang-tidy/modernize/UseRangesCheck.cpp | 1 -
clang-tools-extra/clang-tidy/utils/UseRangesCheck.cpp | 10 ++++++++++
2 files changed, 10 insertions(+), 1 deletion(-)
diff --git a/clang-tools-extra/clang-tidy/modernize/UseRangesCheck.cpp b/clang-tools-extra/clang-tidy/modernize/UseRangesCheck.cpp
index 03b4321ceae99..604204e762c78 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseRangesCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/UseRangesCheck.cpp
@@ -165,7 +165,6 @@ utils::UseRangesCheck::ReplacerMap UseRangesCheck::getReplacerMap() const {
Buff.assign({"::std::", Name});
Result.try_emplace(Buff, Replacer);
}
- // auto Diag = diag("1111");
}
if (getLangOpts().CPlusPlus23)
Result.try_emplace(
diff --git a/clang-tools-extra/clang-tidy/utils/UseRangesCheck.cpp b/clang-tools-extra/clang-tidy/utils/UseRangesCheck.cpp
index aba4d17ccd035..4c5db488dce7f 100644
--- a/clang-tools-extra/clang-tidy/utils/UseRangesCheck.cpp
+++ b/clang-tools-extra/clang-tidy/utils/UseRangesCheck.cpp
@@ -215,6 +215,16 @@ void UseRangesCheck::check(const MatchFinder::MatchResult &Result) {
const auto *Call = Result.Nodes.getNodeAs<CallExpr>(Buffer);
if (!Call)
continue;
+ if (Function->getName() == "find") {
+ unsigned ValueArgIndex = 2;
+ if (Call->getNumArgs() <= ValueArgIndex)
+ continue;
+ const Expr *ValueExpr =
+ Call->getArg(ValueArgIndex)->IgnoreParenImpCasts();
+ if (isa<CXXNullPtrLiteralExpr>(ValueExpr)) {
+ return;
+ }
+ }
auto Diag = createDiag(*Call);
if (auto ReplaceName = Replacer->getReplaceName(*Function))
Diag << FixItHint::CreateReplacement(Call->getCallee()->getSourceRange(),
More information about the cfe-commits
mailing list