summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clang-tools-extra/clang-tidy/misc/RedundantSmartptrGet.cpp1
-rw-r--r--clang-tools-extra/test/clang-tidy/redundant-smartptr-get.cpp10
2 files changed, 11 insertions, 0 deletions
diff --git a/clang-tools-extra/clang-tidy/misc/RedundantSmartptrGet.cpp b/clang-tools-extra/clang-tidy/misc/RedundantSmartptrGet.cpp
index 97398af2977..d48d74c1125 100644
--- a/clang-tools-extra/clang-tidy/misc/RedundantSmartptrGet.cpp
+++ b/clang-tools-extra/clang-tidy/misc/RedundantSmartptrGet.cpp
@@ -22,6 +22,7 @@ internal::Matcher<Expr> callToGet(internal::Matcher<Decl> OnClass) {
on(expr(anyOf(hasType(OnClass),
hasType(qualType(pointsTo(decl(OnClass).bind(
"ptr_to_ptr")))))).bind("smart_pointer")),
+ unless(callee(memberExpr(hasObjectExpression(thisExpr())))),
callee(methodDecl(hasName("get")))).bind("redundant_get");
}
diff --git a/clang-tools-extra/test/clang-tidy/redundant-smartptr-get.cpp b/clang-tools-extra/test/clang-tidy/redundant-smartptr-get.cpp
index 3887f8e522d..091e9d4dc68 100644
--- a/clang-tools-extra/test/clang-tidy/redundant-smartptr-get.cpp
+++ b/clang-tools-extra/test/clang-tidy/redundant-smartptr-get.cpp
@@ -81,6 +81,16 @@ void Positive() {
// CHECK-NOT: warning
void Negative() {
+ struct NegPtr {
+ int* get();
+ int* operator->() {
+ return &*this->get();
+ }
+ int& operator*() {
+ return *get();
+ }
+ };
+
std::unique_ptr<Bar>* u;
u->get()->Do();
OpenPOWER on IntegriCloud