llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang-tools-extra Author: None (serge-sans-paille) <details> <summary>Changes</summary> --- Full diff: https://github.com/llvm/llvm-project/pull/184072.diff 2 Files Affected: - (modified) clang-tools-extra/clang-tidy/performance/UseStdMoveCheck.cpp (+5-1) - (modified) clang-tools-extra/test/clang-tidy/checkers/performance/use-std-move.cpp (+14) ``````````diff diff --git a/clang-tools-extra/clang-tidy/performance/UseStdMoveCheck.cpp b/clang-tools-extra/clang-tidy/performance/UseStdMoveCheck.cpp index d6be91b86eb8c..8b7878399fc31 100644 --- a/clang-tools-extra/clang-tidy/performance/UseStdMoveCheck.cpp +++ b/clang-tools-extra/clang-tidy/performance/UseStdMoveCheck.cpp @@ -106,8 +106,12 @@ void UseStdMoveCheck::check(const MatchFinder::MatchResult &Result) { const Stmt *EltStmt = Elt.castAs<CFGStmt>().getStmt(); if (EltStmt == AssignExpr) { + StringRef AssignValueName = AssignValue->getDecl()->getName(); diag(AssignValue->getBeginLoc(), "'%0' could be moved here") - << AssignValue->getDecl()->getName(); + << AssignValueName + << FixItHint::CreateReplacement( + AssignValue->getLocation(), + ("std::move(" + AssignValueName + ")").str()); break; } // The reference is being referenced after the assignment, bail out. diff --git a/clang-tools-extra/test/clang-tidy/checkers/performance/use-std-move.cpp b/clang-tools-extra/test/clang-tidy/checkers/performance/use-std-move.cpp index d823fa75720af..4492d976c37bd 100644 --- a/clang-tools-extra/test/clang-tidy/checkers/performance/use-std-move.cpp +++ b/clang-tools-extra/test/clang-tidy/checkers/performance/use-std-move.cpp @@ -42,6 +42,7 @@ void use(T&) {} void ConvertibleNonTrivialMoveAssign(NonTrivialMoveAssign& target, NonTrivialMoveAssign source) { // CHECK-MESSAGES: [[@LINE+1]]:12: warning: 'source' could be moved here [performance-use-std-move] target = source; + // CHECK-FIXES: target = std::move(source); } void NonProfitableNonTrivialMoveAssignPointer(NonTrivialMoveAssign*& target, NonTrivialMoveAssign* source) { @@ -52,6 +53,7 @@ void NonProfitableNonTrivialMoveAssignPointer(NonTrivialMoveAssign*& target, Non void ConvertibleNonTrivialMoveAssignFromLValue(NonTrivialMoveAssign& target, NonTrivialMoveAssign&& source) { // CHECK-MESSAGES: [[@LINE+1]]:12: warning: 'source' could be moved here [performance-use-std-move] target = source; + // CHECK-FIXES: target = std::move(source); } // Check moving already moved values @@ -74,12 +76,14 @@ struct SomeRecord { void ConvertibleNonTrivialMoveAssignWithinMethod(NonTrivialMoveAssign& target, NonTrivialMoveAssign source) { // CHECK-MESSAGES: [[@LINE+1]]:12: warning: 'source' could be moved here [performance-use-std-move] target = source; + // CHECK-FIXES: target = std::move(source); } }; auto ConvertibleNonTrivialMoveAssignWithinLambda = [](NonTrivialMoveAssign& target, NonTrivialMoveAssign source) { // CHECK-MESSAGES: [[@LINE+1]]:12: warning: 'source' could be moved here [performance-use-std-move] target = source; + // CHECK-FIXES: target = std::move(source); }; void SomeFunction(NonTrivialMoveAssign source0, NonTrivialMoveAssign const &source1) { @@ -105,6 +109,7 @@ void ConvertibleNonTrivialMoveAssignShadowing(NonTrivialMoveAssign& target, NoMo NonTrivialMoveAssign source; // CHECK-MESSAGES: [[@LINE+1]]:14: warning: 'source' could be moved here [performance-use-std-move] target = source; + // CHECK-FIXES: target = std::move(source); } } @@ -147,6 +152,7 @@ void NonConvertibleNonTrivialMoveAssignFromConst(NonTrivialMoveAssign& target) { NonTrivialMoveAssign source; // CHECK-MESSAGES: [[@LINE+1]]:12: warning: 'source' could be moved here [performance-use-std-move] target = source; + // CHECK-FIXES: target = std::move(source); } void NonConvertibleNonTrivialMoveAssignFromStatic(NonTrivialMoveAssign& target) { @@ -189,6 +195,7 @@ void ConvertibleNonTrivialMoveAssignToStatic(NonTrivialMoveAssign source) { static NonTrivialMoveAssign target; // CHECK-MESSAGES: [[@LINE+1]]:12: warning: 'source' could be moved here [performance-use-std-move] target = source; + // CHECK-FIXES: target = std::move(source); } struct ConvertibleNonTrivialMoveAssignToMember { @@ -196,6 +203,7 @@ struct ConvertibleNonTrivialMoveAssignToMember { void NonConvertibleNonTrivialMoveAssignFromStatic(NonTrivialMoveAssign source) { // CHECK-MESSAGES: [[@LINE+1]]:14: warning: 'source' could be moved here [performance-use-std-move] target = source; + // CHECK-FIXES: target = std::move(source); } }; @@ -203,18 +211,21 @@ void ConvertibleNonTrivialMoveAssignToExtern(NonTrivialMoveAssign source) { extern NonTrivialMoveAssign target; // CHECK-MESSAGES: [[@LINE+1]]:12: warning: 'source' could be moved here [performance-use-std-move] target = source; + // CHECK-FIXES: target = std::move(source); } void ConvertibleNonTrivialMoveAssignToTLS(NonTrivialMoveAssign source) { thread_local NonTrivialMoveAssign target; // CHECK-MESSAGES: [[@LINE+1]]:12: warning: 'source' could be moved here [performance-use-std-move] target = source; + // CHECK-FIXES: target = std::move(source); } NonTrivialMoveAssign global_target; void ConvertibleNonTrivialMoveAssignToGlobal(NonTrivialMoveAssign source) { // CHECK-MESSAGES: [[@LINE+1]]:19: warning: 'source' could be moved here [performance-use-std-move] global_target = source; + // CHECK-FIXES: global_target = std::move(source); } void NonConvertibleNonTrivialMoveAssignRValue(NonTrivialMoveAssign& target, NonTrivialMoveAssign const& source) { @@ -234,6 +245,7 @@ void ConvertibleNonTrivialMoveAssignWithBranching(bool cond, NonTrivialMoveAssig if(cond) { // CHECK-MESSAGES: [[@LINE+1]]:14: warning: 'source' could be moved here [performance-use-std-move] target = source; + // CHECK-FIXES: target = std::move(source); } } @@ -249,11 +261,13 @@ void ConvertibleNonTrivialMoveAssignBothBranches(bool cond, NonTrivialMoveAssign if(cond) { // CHECK-MESSAGES: [[@LINE+1]]:14: warning: 'source' could be moved here [performance-use-std-move] target = source; + // CHECK-FIXES: target = std::move(source); } else { source.stuff(); // CHECK-MESSAGES: [[@LINE+1]]:14: warning: 'source' could be moved here [performance-use-std-move] target = source; + // CHECK-FIXES: target = std::move(source); } } `````````` </details> https://github.com/llvm/llvm-project/pull/184072 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
