diff options
| author | Haojian Wu <hokein@google.com> | 2016-10-20 11:32:47 +0000 |
|---|---|---|
| committer | Haojian Wu <hokein@google.com> | 2016-10-20 11:32:47 +0000 |
| commit | 157e46dd45e7833d0fe765d26ed4993619bc05b3 (patch) | |
| tree | 74efd3d51a93c2f19072707ec6c6b41301eae47f /clang-tools-extra/clang-tidy/modernize/AvoidBindCheck.cpp | |
| parent | 3d0266b66446dd1cd0a9d843dd8cd20954e9b980 (diff) | |
| download | bcm5719-llvm-157e46dd45e7833d0fe765d26ed4993619bc05b3.tar.gz bcm5719-llvm-157e46dd45e7833d0fe765d26ed4993619bc05b3.zip | |
[Clang-tidy]: Fix modernize-avoid-bind erroneous scope resolution.
Hello, i would like to suggest a fix for one of the checks in clang-tidy and i should hope this one is the correct mailing list.
The check is modernize-avoid-bind.
Consider the following:
void bar(int x, int y);
namespace N {
void bar(int x, int y);
}
void foo(){
auto Test = std::bind(N::bar,1,1);
}
clang-tidy’s modernize-avoid-bind check suggests writing:
void foo(){
auto Test =[] {return bar(1,1);};
}
instead of:
void foo(){
auto Test = [] {return N::bar(1,1);};
}
So clang-tidy has proposed an incorrect Fix.
Patch by IdrissRio!
Reviewers: alexfh, hokein, aaron.ballman
Subscriber: cfe-commits
llvm-svn: 284719
Diffstat (limited to 'clang-tools-extra/clang-tidy/modernize/AvoidBindCheck.cpp')
| -rw-r--r-- | clang-tools-extra/clang-tidy/modernize/AvoidBindCheck.cpp | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/clang-tools-extra/clang-tidy/modernize/AvoidBindCheck.cpp b/clang-tools-extra/clang-tidy/modernize/AvoidBindCheck.cpp index c7c51a25e99..2b9a4827d12 100644 --- a/clang-tools-extra/clang-tidy/modernize/AvoidBindCheck.cpp +++ b/clang-tools-extra/clang-tidy/modernize/AvoidBindCheck.cpp @@ -108,8 +108,9 @@ void AvoidBindCheck::registerMatchers(MatchFinder *Finder) { return; Finder->addMatcher( - callExpr(callee(namedDecl(hasName("::std::bind"))), - hasArgument(0, declRefExpr(to(functionDecl().bind("f"))))) + callExpr( + callee(namedDecl(hasName("::std::bind"))), + hasArgument(0, declRefExpr(to(functionDecl().bind("f"))).bind("ref"))) .bind("bind"), this); } @@ -148,14 +149,17 @@ void AvoidBindCheck::check(const MatchFinder::MatchResult &Result) { bool HasCapturedArgument = llvm::any_of( Args, [](const BindArgument &B) { return B.Kind == BK_Other; }); - + const auto *Ref = Result.Nodes.getNodeAs<DeclRefExpr>("ref"); Stream << "[" << (HasCapturedArgument ? "=" : "") << "]"; addPlaceholderArgs(Args, Stream); - Stream << " { return " << F->getName() << "("; + Stream << " { return "; + Ref->printPretty(Stream, nullptr, Result.Context->getPrintingPolicy()); + Stream<< "("; addFunctionCallArgs(Args, Stream); Stream << "); };"; - Diag << FixItHint::CreateReplacement(MatchedDecl->getSourceRange(), Stream.str()); + Diag << FixItHint::CreateReplacement(MatchedDecl->getSourceRange(), + Stream.str()); } } // namespace modernize |

