flx updated this revision to Diff 304833. flx added a comment. Remove unnecessary test code that is not needed.
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D90042/new/ https://reviews.llvm.org/D90042 Files: clang-tools-extra/clang-tidy/utils/DeclRefExprUtils.cpp clang-tools-extra/test/clang-tidy/checkers/performance-unnecessary-copy-initialization.cpp Index: clang-tools-extra/test/clang-tidy/checkers/performance-unnecessary-copy-initialization.cpp =================================================================== --- clang-tools-extra/test/clang-tidy/checkers/performance-unnecessary-copy-initialization.cpp +++ clang-tools-extra/test/clang-tidy/checkers/performance-unnecessary-copy-initialization.cpp @@ -411,12 +411,12 @@ template <class> class function; -template <class R, class... Args> -class function<R(Args...)> { +template <class R, class... ArgTypes> +class function<R(ArgTypes...)> { public: function(); - function(const function &other); - R operator()(Args &&...args) const; + function(const function &Other); + R operator()(ArgTypes... Args) const; }; } // namespace __1 @@ -460,3 +460,19 @@ } } // namespace fake + +void positiveInvokedOnStdFunction( + std::function<void(const ExpensiveToCopyType &)> Update, + const ExpensiveToCopyType Orig) { + auto Copy = Orig.reference(); + // CHECK-MESSAGES: [[@LINE-1]]:8: warning: the variable 'Copy' is copy-constructed from a const reference + // CHECK-FIXES: const auto& Copy = Orig.reference(); + Update(Copy); +} + +void negativeInvokedOnStdFunction( + std::function<void(ExpensiveToCopyType &)> Update, + const ExpensiveToCopyType Orig) { + auto Copy = Orig.reference(); + Update(Copy); +} Index: clang-tools-extra/clang-tidy/utils/DeclRefExprUtils.cpp =================================================================== --- clang-tools-extra/clang-tidy/utils/DeclRefExprUtils.cpp +++ clang-tools-extra/clang-tidy/utils/DeclRefExprUtils.cpp @@ -59,9 +59,13 @@ extractNodesByIdTo(Matches, "declRef", DeclRefs); auto ConstReferenceOrValue = qualType(anyOf(referenceType(pointee(qualType(isConstQualified()))), - unless(anyOf(referenceType(), pointerType())))); + unless(anyOf(referenceType(), pointerType(), + substTemplateTypeParmType())))); + auto ConstReferenceOrValueOrReplaced = qualType(anyOf( + ConstReferenceOrValue, + substTemplateTypeParmType(hasReplacementType(ConstReferenceOrValue)))); auto UsedAsConstRefOrValueArg = forEachArgumentWithParam( - DeclRefToVar, parmVarDecl(hasType(ConstReferenceOrValue))); + DeclRefToVar, parmVarDecl(hasType(ConstReferenceOrValueOrReplaced))); Matches = match(findAll(callExpr(UsedAsConstRefOrValueArg)), Stmt, Context); extractNodesByIdTo(Matches, "declRef", DeclRefs); Matches =
Index: clang-tools-extra/test/clang-tidy/checkers/performance-unnecessary-copy-initialization.cpp =================================================================== --- clang-tools-extra/test/clang-tidy/checkers/performance-unnecessary-copy-initialization.cpp +++ clang-tools-extra/test/clang-tidy/checkers/performance-unnecessary-copy-initialization.cpp @@ -411,12 +411,12 @@ template <class> class function; -template <class R, class... Args> -class function<R(Args...)> { +template <class R, class... ArgTypes> +class function<R(ArgTypes...)> { public: function(); - function(const function &other); - R operator()(Args &&...args) const; + function(const function &Other); + R operator()(ArgTypes... Args) const; }; } // namespace __1 @@ -460,3 +460,19 @@ } } // namespace fake + +void positiveInvokedOnStdFunction( + std::function<void(const ExpensiveToCopyType &)> Update, + const ExpensiveToCopyType Orig) { + auto Copy = Orig.reference(); + // CHECK-MESSAGES: [[@LINE-1]]:8: warning: the variable 'Copy' is copy-constructed from a const reference + // CHECK-FIXES: const auto& Copy = Orig.reference(); + Update(Copy); +} + +void negativeInvokedOnStdFunction( + std::function<void(ExpensiveToCopyType &)> Update, + const ExpensiveToCopyType Orig) { + auto Copy = Orig.reference(); + Update(Copy); +} Index: clang-tools-extra/clang-tidy/utils/DeclRefExprUtils.cpp =================================================================== --- clang-tools-extra/clang-tidy/utils/DeclRefExprUtils.cpp +++ clang-tools-extra/clang-tidy/utils/DeclRefExprUtils.cpp @@ -59,9 +59,13 @@ extractNodesByIdTo(Matches, "declRef", DeclRefs); auto ConstReferenceOrValue = qualType(anyOf(referenceType(pointee(qualType(isConstQualified()))), - unless(anyOf(referenceType(), pointerType())))); + unless(anyOf(referenceType(), pointerType(), + substTemplateTypeParmType())))); + auto ConstReferenceOrValueOrReplaced = qualType(anyOf( + ConstReferenceOrValue, + substTemplateTypeParmType(hasReplacementType(ConstReferenceOrValue)))); auto UsedAsConstRefOrValueArg = forEachArgumentWithParam( - DeclRefToVar, parmVarDecl(hasType(ConstReferenceOrValue))); + DeclRefToVar, parmVarDecl(hasType(ConstReferenceOrValueOrReplaced))); Matches = match(findAll(callExpr(UsedAsConstRefOrValueArg)), Stmt, Context); extractNodesByIdTo(Matches, "declRef", DeclRefs); Matches =
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits