llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang-tidy Author: Clement Courbet (legrosbuffle) <details> <summary>Changes</summary> ... so that derived checks can implement custom behaviour. Does nothing by default, which makes this an NFC. --- Full diff: https://github.com/llvm/llvm-project/pull/73921.diff 2 Files Affected: - (modified) clang-tools-extra/clang-tidy/performance/UnnecessaryCopyInitialization.cpp (+15-9) - (modified) clang-tools-extra/clang-tidy/performance/UnnecessaryCopyInitialization.h (+7-2) ``````````diff diff --git a/clang-tools-extra/clang-tidy/performance/UnnecessaryCopyInitialization.cpp b/clang-tools-extra/clang-tidy/performance/UnnecessaryCopyInitialization.cpp index 990e20400fbfcd2..966071e92833b87 100644 --- a/clang-tools-extra/clang-tidy/performance/UnnecessaryCopyInitialization.cpp +++ b/clang-tools-extra/clang-tidy/performance/UnnecessaryCopyInitialization.cpp @@ -294,24 +294,28 @@ void UnnecessaryCopyInitialization::check( return; if (OldVar == nullptr) { - handleCopyFromMethodReturn(*NewVar, *BlockStmt, *Stmt, IssueFix, ObjectArg, - *Result.Context); + if (handleCopyFromMethodReturn(*NewVar, *BlockStmt, *Stmt, IssueFix, + ObjectArg, *Result.Context)) { + onWarningEmitted(*NewVar, *BlockStmt, *Result.Context); + } } else { - handleCopyFromLocalVar(*NewVar, *OldVar, *BlockStmt, *Stmt, IssueFix, - *Result.Context); + if (handleCopyFromLocalVar(*NewVar, *OldVar, *BlockStmt, *Stmt, IssueFix, + *Result.Context)) { + onWarningEmitted(*NewVar, *BlockStmt, *Result.Context); + } } } -void UnnecessaryCopyInitialization::handleCopyFromMethodReturn( +bool UnnecessaryCopyInitialization::handleCopyFromMethodReturn( const VarDecl &Var, const Stmt &BlockStmt, const DeclStmt &Stmt, bool IssueFix, const VarDecl *ObjectArg, ASTContext &Context) { bool IsConstQualified = Var.getType().isConstQualified(); if (!IsConstQualified && !isOnlyUsedAsConst(Var, BlockStmt, Context)) - return; + return false; if (ObjectArg != nullptr && !isInitializingVariableImmutable(*ObjectArg, BlockStmt, Context, ExcludedContainerTypes)) - return; + return false; if (isVariableUnused(Var, BlockStmt, Context)) { auto Diagnostic = diag(Var.getLocation(), @@ -331,15 +335,16 @@ void UnnecessaryCopyInitialization::handleCopyFromMethodReturn( if (IssueFix) recordFixes(Var, Context, Diagnostic); } + return true; } -void UnnecessaryCopyInitialization::handleCopyFromLocalVar( +bool UnnecessaryCopyInitialization::handleCopyFromLocalVar( const VarDecl &NewVar, const VarDecl &OldVar, const Stmt &BlockStmt, const DeclStmt &Stmt, bool IssueFix, ASTContext &Context) { if (!isOnlyUsedAsConst(NewVar, BlockStmt, Context) || !isInitializingVariableImmutable(OldVar, BlockStmt, Context, ExcludedContainerTypes)) - return; + return false; if (isVariableUnused(NewVar, BlockStmt, Context)) { auto Diagnostic = diag(NewVar.getLocation(), @@ -358,6 +363,7 @@ void UnnecessaryCopyInitialization::handleCopyFromLocalVar( if (IssueFix) recordFixes(NewVar, Context, Diagnostic); } + return true; } void UnnecessaryCopyInitialization::storeOptions( diff --git a/clang-tools-extra/clang-tidy/performance/UnnecessaryCopyInitialization.h b/clang-tools-extra/clang-tidy/performance/UnnecessaryCopyInitialization.h index ea009ba9979de97..7d76c9e7cab940c 100644 --- a/clang-tools-extra/clang-tidy/performance/UnnecessaryCopyInitialization.h +++ b/clang-tools-extra/clang-tidy/performance/UnnecessaryCopyInitialization.h @@ -33,13 +33,18 @@ class UnnecessaryCopyInitialization : public ClangTidyCheck { void storeOptions(ClangTidyOptions::OptionMap &Opts) override; private: - void handleCopyFromMethodReturn(const VarDecl &Var, const Stmt &BlockStmt, + bool handleCopyFromMethodReturn(const VarDecl &Var, const Stmt &BlockStmt, const DeclStmt &Stmt, bool IssueFix, const VarDecl *ObjectArg, ASTContext &Context); - void handleCopyFromLocalVar(const VarDecl &NewVar, const VarDecl &OldVar, + bool handleCopyFromLocalVar(const VarDecl &NewVar, const VarDecl &OldVar, const Stmt &BlockStmt, const DeclStmt &Stmt, bool IssueFix, ASTContext &Context); + + // A hook called for each emitted warning. + virtual void onWarningEmitted(const VarDecl &Var, const Stmt &BlockStmt, + ASTContext &context) {} + const std::vector<StringRef> AllowedTypes; const std::vector<StringRef> ExcludedContainerTypes; }; `````````` </details> https://github.com/llvm/llvm-project/pull/73921 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits