Author: flx Date: Fri Nov 4 15:51:31 2016 New Revision: 286010 URL: http://llvm.org/viewvc/llvm-project?rev=286010&view=rev Log: [ClangTidy - performance-unnecessary-value-param] Only add "const" when current parameter is not already const qualified
Reviewers: alexfh, sbenza, aaron.ballman Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D26207 Modified: clang-tools-extra/trunk/clang-tidy/performance/UnnecessaryValueParamCheck.cpp clang-tools-extra/trunk/test/clang-tidy/performance-unnecessary-value-param.cpp Modified: clang-tools-extra/trunk/clang-tidy/performance/UnnecessaryValueParamCheck.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/performance/UnnecessaryValueParamCheck.cpp?rev=286010&r1=286009&r2=286010&view=diff ============================================================================== --- clang-tools-extra/trunk/clang-tidy/performance/UnnecessaryValueParamCheck.cpp (original) +++ clang-tools-extra/trunk/clang-tidy/performance/UnnecessaryValueParamCheck.cpp Fri Nov 4 15:51:31 2016 @@ -128,7 +128,10 @@ void UnnecessaryValueParamCheck::check(c const auto &CurrentParam = *FunctionDecl->getParamDecl(Index); Diag << utils::fixit::changeVarDeclToReference(CurrentParam, *Result.Context); - if (!IsConstQualified) + // The parameter of each declaration needs to be checked individually as to + // whether it is const or not as constness can differ between definition and + // declaration. + if (!CurrentParam.getType().getCanonicalType().isConstQualified()) Diag << utils::fixit::changeVarDeclToConst(CurrentParam); } } Modified: clang-tools-extra/trunk/test/clang-tidy/performance-unnecessary-value-param.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-tidy/performance-unnecessary-value-param.cpp?rev=286010&r1=286009&r2=286010&view=diff ============================================================================== --- clang-tools-extra/trunk/test/clang-tidy/performance-unnecessary-value-param.cpp (original) +++ clang-tools-extra/trunk/test/clang-tidy/performance-unnecessary-value-param.cpp Fri Nov 4 15:51:31 2016 @@ -244,3 +244,19 @@ struct IncompleteType; void NegativeForIncompleteType(IncompleteType I) { // CHECK-MESSAGES: [[@LINE-1]]:47: error: variable has incomplete type 'IncompleteType' [clang-diagnostic-error] } + +// Case where parameter in declaration is already const-qualified but not in +// implementation. Make sure a second 'const' is not added to the declaration. +void PositiveConstDeclaration(const ExpensiveToCopyType A); +// CHECK-FIXES: void PositiveConstDeclaration(const ExpensiveToCopyType& A); +void PositiveConstDeclaration(ExpensiveToCopyType A) { + // CHECK-MESSAGES: [[@LINE-1]]:51: warning: the parameter 'A' is copied + // CHECK-FIXES: void PositiveConstDeclaration(const ExpensiveToCopyType& A) { +} + +void PositiveNonConstDeclaration(ExpensiveToCopyType A); +// CHECK-FIXES: void PositiveNonConstDeclaration(const ExpensiveToCopyType& A); +void PositiveNonConstDeclaration(const ExpensiveToCopyType A) { + // CHECK-MESSAGES: [[@LINE-1]]:60: warning: the const qualified parameter 'A' + // CHECK-FIXES: void PositiveNonConstDeclaration(const ExpensiveToCopyType& A) { +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits