summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/clang-tidy/modernize/AvoidBindCheck.cpp
diff options
context:
space:
mode:
authorHaojian Wu <hokein@google.com>2016-10-20 11:32:47 +0000
committerHaojian Wu <hokein@google.com>2016-10-20 11:32:47 +0000
commit157e46dd45e7833d0fe765d26ed4993619bc05b3 (patch)
tree74efd3d51a93c2f19072707ec6c6b41301eae47f /clang-tools-extra/clang-tidy/modernize/AvoidBindCheck.cpp
parent3d0266b66446dd1cd0a9d843dd8cd20954e9b980 (diff)
downloadbcm5719-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.cpp14
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
OpenPOWER on IntegriCloud