Thanks for letting me know! Should be fixed in r264862. On Wed, Mar 30, 2016 at 2:19 PM, Nico Weber <tha...@chromium.org> wrote:
> This doesn't build on Windows: > > > http://lab.llvm.org:8011/builders/clang-x64-ninja-win7/builds/11018/steps/build%20stage%201/logs/stdio > > d:\buildslave\clang-x64-ninja-win7\llvm\tools\clang\tools\extra\clang-tidy\readability\../ClangTidyModule.h(61) > : error C2660: > 'clang::tidy::readability::AvoidConstParamsInDecls::AvoidConstParamsInDecls' > : function does not take 2 arguments > > D:\buildslave\clang-x64-ninja-win7\llvm\tools\clang\tools\extra\clang-tidy\readability\ReadabilityTidyModule.cpp(37) > : see reference to function template instantiation 'void > clang::tidy::ClangTidyCheckFactories::registerCheck<clang::tidy::readability::AvoidConstParamsInDecls>(llvm::StringRef)' > being compiled > > Can you take a look? > > > On Wed, Mar 30, 2016 at 4:31 AM, Alexander Kornienko via cfe-commits < > cfe-commits@lists.llvm.org> wrote: > >> Author: alexfh >> Date: Wed Mar 30 06:31:33 2016 >> New Revision: 264856 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=264856&view=rev >> Log: >> [clang-tidy] readability check for const params in declarations >> >> Summary: Adds a clang-tidy warning for top-level consts in function >> declarations. >> >> Reviewers: hokein, sbenza, alexfh >> >> Subscribers: cfe-commits >> >> Patch by Matt Kulukundis! >> >> Differential Revision: http://reviews.llvm.org/D18408 >> >> Added: >> >> clang-tools-extra/trunk/clang-tidy/readability/AvoidConstParamsInDecls.cpp >> >> clang-tools-extra/trunk/clang-tidy/readability/AvoidConstParamsInDecls.h >> >> clang-tools-extra/trunk/docs/clang-tidy/checks/readability-avoid-const-params-in-decls.rst >> >> clang-tools-extra/trunk/test/clang-tidy/readability-avoid-const-params-in-decls.cpp >> Modified: >> clang-tools-extra/trunk/clang-tidy/readability/CMakeLists.txt >> >> clang-tools-extra/trunk/clang-tidy/readability/ReadabilityTidyModule.cpp >> clang-tools-extra/trunk/docs/clang-tidy/checks/list.rst >> >> Added: >> clang-tools-extra/trunk/clang-tidy/readability/AvoidConstParamsInDecls.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/readability/AvoidConstParamsInDecls.cpp?rev=264856&view=auto >> >> ============================================================================== >> --- >> clang-tools-extra/trunk/clang-tidy/readability/AvoidConstParamsInDecls.cpp >> (added) >> +++ >> clang-tools-extra/trunk/clang-tidy/readability/AvoidConstParamsInDecls.cpp >> Wed Mar 30 06:31:33 2016 >> @@ -0,0 +1,71 @@ >> +//===--- AvoidConstParamsInDecls.cpp - >> clang-tidy--------------------------===// >> +// >> +// The LLVM Compiler Infrastructure >> +// >> +// This file is distributed under the University of Illinois Open Source >> +// License. See LICENSE.TXT for details. >> +// >> >> +//===----------------------------------------------------------------------===// >> + >> +#include "AvoidConstParamsInDecls.h" >> +#include "clang/ASTMatchers/ASTMatchFinder.h" >> +#include "clang/ASTMatchers/ASTMatchers.h" >> +#include "clang/Lex/Lexer.h" >> + >> +using namespace clang::ast_matchers; >> + >> +namespace clang { >> +namespace tidy { >> +namespace readability { >> +namespace { >> + >> +SourceRange getTypeRange(const ParmVarDecl &Param) { >> + if (Param.getIdentifier() != nullptr) >> + return SourceRange(Param.getLocStart(), >> + Param.getLocEnd().getLocWithOffset(-1)); >> + return Param.getSourceRange(); >> +} >> + >> +} // namespace >> + >> + >> +void AvoidConstParamsInDecls::registerMatchers(MatchFinder *Finder) { >> + const auto ConstParamDecl = >> + parmVarDecl(hasType(qualType(isConstQualified()))).bind("param"); >> + Finder->addMatcher(functionDecl(unless(isDefinition()), >> + has(typeLoc(forEach(ConstParamDecl)))) >> + .bind("func"), >> + this); >> +} >> + >> +void AvoidConstParamsInDecls::check(const MatchFinder::MatchResult >> &Result) { >> + const auto *Func = Result.Nodes.getNodeAs<FunctionDecl>("func"); >> + const auto *Param = Result.Nodes.getNodeAs<ParmVarDecl>("param"); >> + >> + QualType Type = Param->getType(); >> + if (!Type.isLocalConstQualified()) >> + return; >> + >> + Type.removeLocalConst(); >> + >> + auto Diag = diag(Param->getLocStart(), >> + "parameter %0 is const-qualified in the function " >> + "declaration; const-qualification of parameters only >> has an " >> + "effect in function definitions"); >> + if (Param->getName().empty()) { >> + for (unsigned int i = 0; i < Func->getNumParams(); ++i) { >> + if (Param == Func->getParamDecl(i)) { >> + Diag << (i + 1); >> + break; >> + } >> + } >> + } else { >> + Diag << Param; >> + } >> + Diag << FixItHint::CreateReplacement(getTypeRange(*Param), >> + Type.getAsString()); >> +} >> + >> +} // namespace readability >> +} // namespace tidy >> +} // namespace clang >> >> Added: >> clang-tools-extra/trunk/clang-tidy/readability/AvoidConstParamsInDecls.h >> URL: >> http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/readability/AvoidConstParamsInDecls.h?rev=264856&view=auto >> >> ============================================================================== >> --- >> clang-tools-extra/trunk/clang-tidy/readability/AvoidConstParamsInDecls.h >> (added) >> +++ >> clang-tools-extra/trunk/clang-tidy/readability/AvoidConstParamsInDecls.h >> Wed Mar 30 06:31:33 2016 >> @@ -0,0 +1,33 @@ >> +//===--- AvoidConstParamsInDecls.h - >> clang-tidy----------------------------===// >> +// >> +// The LLVM Compiler Infrastructure >> +// >> +// This file is distributed under the University of Illinois Open Source >> +// License. See LICENSE.TXT for details. >> +// >> >> +//===----------------------------------------------------------------------===// >> + >> +#ifndef >> LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_READABILITY_AVOID_CONST_PARAMS_IN_DECLS_H >> +#define >> LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_READABILITY_AVOID_CONST_PARAMS_IN_DECLS_H >> + >> +#include "../ClangTidy.h" >> + >> +namespace clang { >> +namespace tidy { >> +namespace readability { >> + >> +// Detect function declarations that have const value parameters and >> discourage >> +// them. >> +class AvoidConstParamsInDecls : public ClangTidyCheck { >> +public: >> + using ClangTidyCheck::ClangTidyCheck; >> + >> + void registerMatchers(ast_matchers::MatchFinder *Finder) override; >> + void check(const ast_matchers::MatchFinder::MatchResult &Result) >> override; >> +}; >> + >> +} // namespace readability >> +} // namespace tidy >> +} // namespace clang >> + >> +#endif // >> LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_READABILITY_AVOID_CONST_PARAMS_IN_DECLS_H >> >> Modified: clang-tools-extra/trunk/clang-tidy/readability/CMakeLists.txt >> URL: >> http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/readability/CMakeLists.txt?rev=264856&r1=264855&r2=264856&view=diff >> >> ============================================================================== >> --- clang-tools-extra/trunk/clang-tidy/readability/CMakeLists.txt >> (original) >> +++ clang-tools-extra/trunk/clang-tidy/readability/CMakeLists.txt Wed Mar >> 30 06:31:33 2016 >> @@ -1,6 +1,7 @@ >> set(LLVM_LINK_COMPONENTS support) >> >> add_clang_library(clangTidyReadabilityModule >> + AvoidConstParamsInDecls.cpp >> BracesAroundStatementsCheck.cpp >> ContainerSizeEmptyCheck.cpp >> ElseAfterReturnCheck.cpp >> >> Modified: >> clang-tools-extra/trunk/clang-tidy/readability/ReadabilityTidyModule.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/readability/ReadabilityTidyModule.cpp?rev=264856&r1=264855&r2=264856&view=diff >> >> ============================================================================== >> --- >> clang-tools-extra/trunk/clang-tidy/readability/ReadabilityTidyModule.cpp >> (original) >> +++ >> clang-tools-extra/trunk/clang-tidy/readability/ReadabilityTidyModule.cpp >> Wed Mar 30 06:31:33 2016 >> @@ -10,6 +10,7 @@ >> #include "../ClangTidy.h" >> #include "../ClangTidyModule.h" >> #include "../ClangTidyModuleRegistry.h" >> +#include "AvoidConstParamsInDecls.h" >> #include "BracesAroundStatementsCheck.h" >> #include "ContainerSizeEmptyCheck.h" >> #include "ElseAfterReturnCheck.h" >> @@ -32,6 +33,8 @@ namespace readability { >> class ReadabilityModule : public ClangTidyModule { >> public: >> void addCheckFactories(ClangTidyCheckFactories &CheckFactories) >> override { >> + CheckFactories.registerCheck<AvoidConstParamsInDecls>( >> + "readability-avoid-const-params-in-decls"); >> CheckFactories.registerCheck<BracesAroundStatementsCheck>( >> "readability-braces-around-statements"); >> CheckFactories.registerCheck<ContainerSizeEmptyCheck>( >> >> Modified: clang-tools-extra/trunk/docs/clang-tidy/checks/list.rst >> URL: >> http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/docs/clang-tidy/checks/list.rst?rev=264856&r1=264855&r2=264856&view=diff >> >> ============================================================================== >> --- clang-tools-extra/trunk/docs/clang-tidy/checks/list.rst (original) >> +++ clang-tools-extra/trunk/docs/clang-tidy/checks/list.rst Wed Mar 30 >> 06:31:33 2016 >> @@ -90,8 +90,9 @@ Clang-Tidy Checks >> performance-faster-string-find >> performance-for-range-copy >> performance-implicit-cast-in-loop >> - performance-unnecessary-value-param >> performance-unnecessary-copy-initialization >> + performance-unnecessary-value-param >> + readability-avoid-const-params-in-decls >> readability-braces-around-statements >> readability-container-size-empty >> readability-else-after-return >> >> Added: >> clang-tools-extra/trunk/docs/clang-tidy/checks/readability-avoid-const-params-in-decls.rst >> URL: >> http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/docs/clang-tidy/checks/readability-avoid-const-params-in-decls.rst?rev=264856&view=auto >> >> ============================================================================== >> --- >> clang-tools-extra/trunk/docs/clang-tidy/checks/readability-avoid-const-params-in-decls.rst >> (added) >> +++ >> clang-tools-extra/trunk/docs/clang-tidy/checks/readability-avoid-const-params-in-decls.rst >> Wed Mar 30 06:31:33 2016 >> @@ -0,0 +1,17 @@ >> +.. title:: clang-tidy - readability-avoid-const-params-in-decls >> + >> +readability-avoid-const-params-in-decls >> +======================================= >> + >> +Checks whether a function declaration has parameters that are top level >> const. >> + >> +`const` values in declarations do not affect the signature of a >> function, so >> +they should not be put there. For example: >> + >> +Examples: >> + >> +.. code:: c++ >> + >> + void f(const string); // Bad: const is top level. >> + void f(const string&); // Good: const is not top level. >> + >> >> Added: >> clang-tools-extra/trunk/test/clang-tidy/readability-avoid-const-params-in-decls.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-tidy/readability-avoid-const-params-in-decls.cpp?rev=264856&view=auto >> >> ============================================================================== >> --- >> clang-tools-extra/trunk/test/clang-tidy/readability-avoid-const-params-in-decls.cpp >> (added) >> +++ >> clang-tools-extra/trunk/test/clang-tidy/readability-avoid-const-params-in-decls.cpp >> Wed Mar 30 06:31:33 2016 >> @@ -0,0 +1,78 @@ >> +// RUN: %check_clang_tidy %s readability-avoid-const-params-in-decls %t >> + >> +using alias_type = bool; >> +using alias_const_type = const bool; >> + >> + >> +void F1(const int i); >> +// CHECK-MESSAGES: :[[@LINE-1]]:9: warning: parameter 'i' is >> const-qualified in the function declaration; const-qualification of >> parameters only has an effect in function definitions >> [readability-avoid-const-params-in-decls] >> +// CHECK-FIXES: void F1(int i); >> + >> +void F2(const int *const i); >> +// CHECK-MESSAGES: :[[@LINE-1]]:9: warning: parameter 'i' is >> const-qualified >> +// CHECK-FIXES: void F2(const int * i); >> + >> +void F3(int const i); >> +// CHECK-MESSAGES: :[[@LINE-1]]:9: warning: parameter 'i' is >> const-qualified >> +// CHECK-FIXES: void F3(int i); >> + >> +void F4(alias_type const i); >> +// CHECK-MESSAGES: :[[@LINE-1]]:9: warning: parameter 'i' is >> const-qualified >> +// CHECK-FIXES: void F4(alias_type i); >> + >> +void F5(const int); >> +// CHECK-MESSAGES: :[[@LINE-1]]:9: warning: parameter 1 is >> const-qualified >> +// CHECK-FIXES: void F5(int); >> + >> +void F6(const int *const); >> +// CHECK-MESSAGES: :[[@LINE-1]]:9: warning: parameter 1 is >> const-qualified >> +// BUG(b/27584482): void F6(const int *); should be produced >> + >> +void F7(int, const int); >> +// CHECK-MESSAGES: :[[@LINE-1]]:14: warning: parameter 2 is >> const-qualified >> +// CHECK-FIXES: void F7(int, int); >> + >> +void F8(const int, const int); >> +// CHECK-MESSAGES: :[[@LINE-1]]:9: warning: parameter 1 is >> const-qualified >> +// CHECK-MESSAGES: :[[@LINE-2]]:20: warning: parameter 2 is >> const-qualified >> +// CHECK-FIXES: void F8(int, int); >> + >> +void F9(const int long_name); >> +// CHECK-MESSAGES: :[[@LINE-1]]:9: warning: parameter 'long_name' >> +// CHECK-FIXES: void F9(int long_name); >> + >> +void F10(const int *const *const long_name); >> +// CHECK-MESSAGES: :[[@LINE-1]]:10: warning: parameter 'long_name' >> +// CHECK-FIXES: void F10(const int *const * long_name); >> + >> + >> +struct Foo { >> + Foo(const int i); >> + // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: parameter 'i' >> + // CHECK-FIXES: Foo(int i); >> + >> + void operator()(const int i); >> + // CHECK-MESSAGES: :[[@LINE-1]]:19: warning: parameter 'i' >> + // CHECK-FIXES: void operator()(int i); >> +}; >> + >> +// Do not match on definitions >> +void NF1(const int i) {} >> +void NF2(const int *const i) {} >> +void NF3(int const i) {} >> +void NF4(alias_type const i) {} >> +void NF5(const int) {} >> +void NF6(const int *const) {} >> +void NF7(int, const int) {} >> +void NF8(const int, const int) {} >> + >> +// Do not match on other stuff >> +void NF(const alias_type& i); >> +void NF(const int &i); >> +void NF(const int *i); >> +void NF(alias_const_type i); >> +void NF(const alias_type&); >> +void NF(const int&); >> +void NF(const int*); >> +void NF(const int* const*); >> +void NF(alias_const_type); >> >> >> _______________________________________________ >> cfe-commits mailing list >> cfe-commits@lists.llvm.org >> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >> > >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits