-
Notifications
You must be signed in to change notification settings - Fork 15.3k
[clang-tidy][NFC] Refactor modernize-pass-by-value check code and tests
#140753
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[clang-tidy][NFC] Refactor modernize-pass-by-value check code and tests
#140753
Conversation
…es-not and deleted unused code in the check
|
@llvm/pr-subscribers-clang-tools-extra @llvm/pr-subscribers-clang-tidy Author: Baranov Victor (vbvictor) Changes
Full diff: https://github.com/llvm/llvm-project/pull/140753.diff 3 Files Affected:
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;
};
|
carlosgalvezp
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why are the fixes being removed? CHECK-FIXES is not equivalent to CHECK-MESSAGES-NOT
|
Also, CHECK-MESSAGES-NOT is discouraged, since the testing framework already checks that no other output is produced by default. |
So if CHECK-FIXES are the same as previous (written in test file) code, we can remove them completely (I changed them to CHECK-MESSAGES-NOT) |
CHECK-FIXES are removed completely because they have the same code as the "unfixed" version. F(const NotMovable &NM) : NM(NM) {}
// CHECK-FIXES: F(const NotMovable &NM) : NM(NM) {}I think this was used to make sure that the check doesn't produce messages and change the code, but now this behavior is active by default so we don't need them |
|
Thanks, I didn't notice they were the same. In that case they should be removed and have nothing. Optionally one can add a human-readable comment like "Should not trigger here" or something, but it's not necessary. |
carlosgalvezp
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM!
CHECK-MESSAGES-NOTandCHECK-FIXES-NOTfor better readability and maintainability