Author: sbenza
Date: Tue Apr 29 08:41:23 2014
New Revision: 207525

URL: http://llvm.org/viewvc/llvm-project?rev=207525&view=rev
Log:
Do not touch get() calls on 'this' object.

Summary:
These calls are part of the implementation of the smart pointer itself
and chaning it is likely to be wrong.
Example:
  T& operator*() const { return *get(); }

Reviewers: djasper

Subscribers: cfe-commits

Differential Revision: http://reviews.llvm.org/D3540

Modified:
    clang-tools-extra/trunk/clang-tidy/misc/RedundantSmartptrGet.cpp
    clang-tools-extra/trunk/test/clang-tidy/redundant-smartptr-get.cpp

Modified: clang-tools-extra/trunk/clang-tidy/misc/RedundantSmartptrGet.cpp
URL: 
http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/misc/RedundantSmartptrGet.cpp?rev=207525&r1=207524&r2=207525&view=diff
==============================================================================
--- clang-tools-extra/trunk/clang-tidy/misc/RedundantSmartptrGet.cpp (original)
+++ clang-tools-extra/trunk/clang-tidy/misc/RedundantSmartptrGet.cpp Tue Apr 29 
08:41:23 2014
@@ -22,6 +22,7 @@ internal::Matcher<Expr> callToGet(intern
              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");
 }
 

Modified: clang-tools-extra/trunk/test/clang-tidy/redundant-smartptr-get.cpp
URL: 
http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-tidy/redundant-smartptr-get.cpp?rev=207525&r1=207524&r2=207525&view=diff
==============================================================================
--- clang-tools-extra/trunk/test/clang-tidy/redundant-smartptr-get.cpp 
(original)
+++ clang-tools-extra/trunk/test/clang-tidy/redundant-smartptr-get.cpp Tue Apr 
29 08:41:23 2014
@@ -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();
 


_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to