[clang-tools-extra] [clang-tidy][NFC] Refactor `modernize-pass-by-value` check code and tests (PR #140753)

Baranov Victor via cfe-commits cfe-commits at lists.llvm.org
Tue May 20 09:05:35 PDT 2025


https://github.com/vbvictor created https://github.com/llvm/llvm-project/pull/140753

- Deleted unused includes
- Deleted useless braces
- Modernized tests to use `CHECK-MESSAGES-NOT` and `CHECK-FIXES-NOT` for better readability and maintainability

>From 60c4c0432a47637bedd20a88c60b5a715473c78a Mon Sep 17 00:00:00 2001
From: Baranov Victor <bar.victor.2002 at gmail.com>
Date: Tue, 20 May 2025 19:02:16 +0300
Subject: [PATCH] [clang-tidy][nfc] refactor pass-by-value check tests to use
 check-fixes-not and deleted unused code in the check

---
 .../clang-tidy/modernize/PassByValueCheck.cpp |  3 +--
 .../clang-tidy/modernize/PassByValueCheck.h   |  2 --
 .../checkers/modernize/pass-by-value.cpp      | 24 ++++++++++---------
 3 files changed, 14 insertions(+), 15 deletions(-)

diff --git a/clang-tools-extra/clang-tidy/modernize/PassByValueCheck.cpp b/clang-tools-extra/clang-tidy/modernize/PassByValueCheck.cpp
index 7a9d04bfa8ba1..35f90fb8da15b 100644
--- a/clang-tools-extra/clang-tidy/modernize/PassByValueCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/PassByValueCheck.cpp
@@ -166,9 +166,8 @@ static bool hasRValueOverload(const CXXConstructorDecl *Ctor,
   };
 
   for (const auto *Candidate : Record->ctors()) {
-    if (IsRValueOverload(Candidate)) {
+    if (IsRValueOverload(Candidate))
       return true;
-    }
   }
   return false;
 }
diff --git a/clang-tools-extra/clang-tidy/modernize/PassByValueCheck.h b/clang-tools-extra/clang-tidy/modernize/PassByValueCheck.h
index c7677edc37dc4..b586b8d5fbf66 100644
--- a/clang-tools-extra/clang-tidy/modernize/PassByValueCheck.h
+++ b/clang-tools-extra/clang-tidy/modernize/PassByValueCheck.h
@@ -12,8 +12,6 @@
 #include "../ClangTidyCheck.h"
 #include "../utils/IncludeInserter.h"
 
-#include <memory>
-
 namespace clang::tidy::modernize {
 
 class PassByValueCheck : public ClangTidyCheck {
diff --git a/clang-tools-extra/test/clang-tidy/checkers/modernize/pass-by-value.cpp b/clang-tools-extra/test/clang-tidy/checkers/modernize/pass-by-value.cpp
index c0ebaebe4ccf6..4977186478793 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/modernize/pass-by-value.cpp
+++ b/clang-tools-extra/test/clang-tidy/checkers/modernize/pass-by-value.cpp
@@ -32,7 +32,7 @@ struct A {
 Movable GlobalObj;
 struct B {
   B(const Movable &M) : M(GlobalObj) {}
-  // CHECK-FIXES: B(const Movable &M) : M(GlobalObj) {}
+  // CHECK-MESSAGES-NOT: :[[@LINE-1]]:5: warning: pass by value and use std::move
   Movable M;
 };
 
@@ -40,11 +40,11 @@ struct B {
 struct C {
   // Tests extra-reference in body.
   C(const Movable &M) : M(M) { this->i = M.a; }
-  // CHECK-FIXES: C(const Movable &M) : M(M) { this->i = M.a; }
+  // CHECK-MESSAGES-NOT: :[[@LINE-1]]:5: warning: pass by value and use std::move
 
   // Tests extra-reference in init-list.
   C(const Movable &M, int) : M(M), i(M.a) {}
-  // CHECK-FIXES: C(const Movable &M, int) : M(M), i(M.a) {}
+  // CHECK-MESSAGES-NOT: :[[@LINE-1]]:5: warning: pass by value and use std::move
   Movable M;
   int i;
 };
@@ -70,7 +70,7 @@ struct E {
 // Test with object that can't be moved.
 struct F {
   F(const NotMovable &NM) : NM(NM) {}
-  // CHECK-FIXES: F(const NotMovable &NM) : NM(NM) {}
+  // CHECK-MESSAGES-NOT: :[[@LINE-1]]:5: warning: pass by value and use std::move
   NotMovable NM;
 };
 
@@ -112,7 +112,8 @@ struct I {
 // Test that templates aren't modified.
 template <typename T> struct J {
   J(const T &M) : M(M) {}
-  // CHECK-FIXES: J(const T &M) : M(M) {}
+  // CHECK-MESSAGES-NOT: :[[@LINE-1]]:5: warning: pass by value and use std::move
+  // CHECK-FIXES-NOT: J(T M) : M(std::move(M)) {}
   T M;
 };
 J<Movable> j1(Movable());
@@ -129,13 +130,14 @@ struct MovableTemplateT
 template <class T>
 struct J2 {
   J2(const MovableTemplateT<T>& A);
-  // CHECK-FIXES: J2(const MovableTemplateT<T>& A);
+  // CHECK-FIXES-NOT: J2(MovableTemplateT<T> A);
   MovableTemplateT<T> M;
 };
 
 template <class T>
 J2<T>::J2(const MovableTemplateT<T>& A) : M(A) {}
-// CHECK-FIXES: J2<T>::J2(const MovableTemplateT<T>& A) : M(A) {}
+// CHECK-MESSAGES-NOT: :[[@LINE-1]]:11: warning: pass by value and use std::move
+// CHECK-FIXES-NOT: J2<T>::J2(MovableTemplateT<T> A) : M(std::move(A)) {}
 J2<int> j3(MovableTemplateT<int>{});
 
 struct K_Movable {
@@ -182,7 +184,7 @@ struct O {
 // Test with a const-value parameter.
 struct P {
   P(const Movable M) : M(M) {}
-  // CHECK-FIXES: P(const Movable M) : M(M) {}
+  // CHECK-MESSAGES-NOT: :[[@LINE-1]]:5: warning: pass by value and use std::move
   Movable M;
 };
 
@@ -215,7 +217,7 @@ struct R {
 // Test with rvalue parameter.
 struct S {
   S(Movable &&M) : M(M) {}
-  // CHECK-FIXES: S(Movable &&M) : M(M) {}
+  // CHECK-MESSAGES-NOT: :[[@LINE-1]]:5: warning: pass by value and use std::move
   Movable M;
 };
 
@@ -225,13 +227,13 @@ template <typename T, int N> struct array { T A[N]; };
 // cause problems with performance-move-const-arg, as it will revert it.
 struct T {
   T(array<int, 10> a) : a_(a) {}
-  // CHECK-FIXES: T(array<int, 10> a) : a_(a) {}
+  // CHECK-MESSAGES-NOT: :[[@LINE-1]]:5: warning: pass by value and use std::move
   array<int, 10> a_;
 };
 
 struct U {
   U(const POD &M) : M(M) {}
-  // CHECK-FIXES: U(const POD &M) : M(M) {}
+  // CHECK-MESSAGES-NOT: :[[@LINE-1]]:5: warning: pass by value and use std::move
   POD M;
 };
 



More information about the cfe-commits mailing list