Index: clang-tidy/readability/NonConstParameterCheck.cpp =================================================================== --- clang-tidy/readability/NonConstParameterCheck.cpp +++ clang-tidy/readability/NonConstParameterCheck.cpp @@ -138,9 +138,20 @@ if (!ParamInfo.CanBeConst) continue; - diag(Par->getLocation(), "pointer parameter '%0' can be pointer to const") - << Par->getName() - << FixItHint::CreateInsertion(Par->getLocStart(), "const "); + auto D = diag(Par->getLocation(), + "pointer parameter '%0' can be pointer to const") + << Par->getName() + << FixItHint::CreateInsertion(Par->getLocStart(), "const "); + + const DeclContext *Parent = Par->getParentFunctionOrMethod(); + const auto *FD = dyn_cast(Parent); + while (FD) { + const auto ParDecl = FD->getParamDecl(Par->getFunctionScopeIndex()); + if (Par != ParDecl) + D << ParDecl->getName() + << FixItHint::CreateInsertion(ParDecl->getLocStart(), "const "); + FD = FD->getPreviousDecl(); + } } } Index: test/clang-tidy/readability-non-const-parameter.cpp =================================================================== --- test/clang-tidy/readability-non-const-parameter.cpp +++ test/clang-tidy/readability-non-const-parameter.cpp @@ -277,3 +277,26 @@ int x = *p; } }; + +int declarationFixit(int *i); +// CHECK-FIXES: {{^}}int declarationFixit(const int *i);{{$}} +int declarationFixit(int *i); +// CHECK-FIXES: {{^}}int declarationFixit(const int *i);{{$}} +// CHECK-MESSAGES: :[[@LINE+1]]:27: warning: pointer parameter 'i' can be +int declarationFixit(int *i) { + // CHECK-FIXES: {{^}}int declarationFixit(const int *i) {{{$}} + return *i; +} + + +class D { +private: + int declarationFixit(int *i); + // CHECK-FIXES: {{^}} int declarationFixit(const int *i);{{$}} +}; + +// CHECK-MESSAGES: :[[@LINE+1]]:30: warning: pointer parameter 'i' can be +int D::declarationFixit(int *i) { + // CHECK-FIXES: {{^}}int declarationFixit(const int *i) {{{$}} + return *i; +}