Author: sbenza Date: Tue Jun 28 09:19:41 2016 New Revision: 274019 URL: http://llvm.org/viewvc/llvm-project?rev=274019&view=rev Log: [clang-tidy] Do not match on lambdas.
We match on the generated FunctionDecl of the lambda and try to fix it. This causes a crash. The right behavior is to ignore lambdas, because they are a definition. Modified: clang-tools-extra/trunk/clang-tidy/readability/AvoidConstParamsInDecls.cpp clang-tools-extra/trunk/test/clang-tidy/readability-avoid-const-params-in-decls.cpp Modified: 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=274019&r1=274018&r2=274019&view=diff ============================================================================== --- clang-tools-extra/trunk/clang-tidy/readability/AvoidConstParamsInDecls.cpp (original) +++ clang-tools-extra/trunk/clang-tidy/readability/AvoidConstParamsInDecls.cpp Tue Jun 28 09:19:41 2016 @@ -32,10 +32,14 @@ SourceRange getTypeRange(const ParmVarDe 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); + Finder->addMatcher( + functionDecl(unless(isDefinition()), + // Lambdas are always their own definition, but they + // generate a non-definition FunctionDecl too. Ignore those. + unless(cxxMethodDecl(ofClass(cxxRecordDecl(isLambda())))), + has(typeLoc(forEach(ConstParamDecl)))) + .bind("func"), + this); } // Re-lex the tokens to get precise location of last 'const' Modified: 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=274019&r1=274018&r2=274019&view=diff ============================================================================== --- clang-tools-extra/trunk/test/clang-tidy/readability-avoid-const-params-in-decls.cpp (original) +++ clang-tools-extra/trunk/test/clang-tidy/readability-avoid-const-params-in-decls.cpp Tue Jun 28 09:19:41 2016 @@ -90,3 +90,7 @@ void ConstNotVisible(CONCAT(cons, t) int // CHECK-MESSAGES: :[[@LINE-1]]:22: warning: parameter 'i' // We warn, but we can't give a fix // CHECK-FIXES: void ConstNotVisible(CONCAT(cons, t) int i); + +// Regression test. We should not warn (or crash) on lambda expressions +auto lambda_with_name = [](const int n) {}; +auto lambda_without_name = [](const int) {}; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits