This revision was automatically updated to reflect the committed changes. Closed by commit rL274552: [clang-tidy] UnnecessaryValueParamCheck - only warn for virtual methods (authored by flx).
Changed prior to commit: http://reviews.llvm.org/D21936?vs=62750&id=62752#toc Repository: rL LLVM http://reviews.llvm.org/D21936 Files: clang-tools-extra/trunk/clang-tidy/performance/UnnecessaryValueParamCheck.cpp clang-tools-extra/trunk/test/clang-tidy/performance-unnecessary-value-param.cpp Index: clang-tools-extra/trunk/clang-tidy/performance/UnnecessaryValueParamCheck.cpp =================================================================== --- clang-tools-extra/trunk/clang-tidy/performance/UnnecessaryValueParamCheck.cpp +++ clang-tools-extra/trunk/clang-tidy/performance/UnnecessaryValueParamCheck.cpp @@ -118,8 +118,10 @@ "invocation but only used as a const reference; " "consider making it a const reference") << paramNameOrIndex(Param->getName(), Index); - // Do not propose fixes in macros since we cannot place them correctly. - if (Param->getLocStart().isMacroID()) + // Do not propose fixes in macros since we cannot place them correctly, or if + // function is virtual as it might break overrides. + const auto *Method = llvm::dyn_cast<CXXMethodDecl>(Function); + if (Param->getLocStart().isMacroID() || (Method && Method->isVirtual())) return; for (const auto *FunctionDecl = Function; FunctionDecl != nullptr; FunctionDecl = FunctionDecl->getPreviousDecl()) { Index: clang-tools-extra/trunk/test/clang-tidy/performance-unnecessary-value-param.cpp =================================================================== --- clang-tools-extra/trunk/test/clang-tidy/performance-unnecessary-value-param.cpp +++ clang-tools-extra/trunk/test/clang-tidy/performance-unnecessary-value-param.cpp @@ -182,6 +182,19 @@ } }; +struct VirtualMethodWarningOnly { + virtual void methodWithExpensiveValueParam(ExpensiveToCopyType T) {} + // CHECK-MESSAGES: [[@LINE-1]]:66: warning: the parameter 'T' is copied + // CHECK-FIXES: virtual void methodWithExpensiveValueParam(ExpensiveToCopyType T) {} + virtual ~VirtualMethodWarningOnly() {} +}; + +struct PositiveNonVirualMethod { + void method(const ExpensiveToCopyType T) {} + // CHECK-MESSAGES: [[@LINE-1]]:41: warning: the const qualified parameter 'T' is copied + // CHECK-FIXES: void method(const ExpensiveToCopyType& T) {} +}; + struct NegativeDeletedMethod { ~NegativeDeletedMethod() {} NegativeDeletedMethod& operator=(NegativeDeletedMethod N) = delete;
Index: clang-tools-extra/trunk/clang-tidy/performance/UnnecessaryValueParamCheck.cpp =================================================================== --- clang-tools-extra/trunk/clang-tidy/performance/UnnecessaryValueParamCheck.cpp +++ clang-tools-extra/trunk/clang-tidy/performance/UnnecessaryValueParamCheck.cpp @@ -118,8 +118,10 @@ "invocation but only used as a const reference; " "consider making it a const reference") << paramNameOrIndex(Param->getName(), Index); - // Do not propose fixes in macros since we cannot place them correctly. - if (Param->getLocStart().isMacroID()) + // Do not propose fixes in macros since we cannot place them correctly, or if + // function is virtual as it might break overrides. + const auto *Method = llvm::dyn_cast<CXXMethodDecl>(Function); + if (Param->getLocStart().isMacroID() || (Method && Method->isVirtual())) return; for (const auto *FunctionDecl = Function; FunctionDecl != nullptr; FunctionDecl = FunctionDecl->getPreviousDecl()) { Index: clang-tools-extra/trunk/test/clang-tidy/performance-unnecessary-value-param.cpp =================================================================== --- clang-tools-extra/trunk/test/clang-tidy/performance-unnecessary-value-param.cpp +++ clang-tools-extra/trunk/test/clang-tidy/performance-unnecessary-value-param.cpp @@ -182,6 +182,19 @@ } }; +struct VirtualMethodWarningOnly { + virtual void methodWithExpensiveValueParam(ExpensiveToCopyType T) {} + // CHECK-MESSAGES: [[@LINE-1]]:66: warning: the parameter 'T' is copied + // CHECK-FIXES: virtual void methodWithExpensiveValueParam(ExpensiveToCopyType T) {} + virtual ~VirtualMethodWarningOnly() {} +}; + +struct PositiveNonVirualMethod { + void method(const ExpensiveToCopyType T) {} + // CHECK-MESSAGES: [[@LINE-1]]:41: warning: the const qualified parameter 'T' is copied + // CHECK-FIXES: void method(const ExpensiveToCopyType& T) {} +}; + struct NegativeDeletedMethod { ~NegativeDeletedMethod() {} NegativeDeletedMethod& operator=(NegativeDeletedMethod N) = delete;
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits