1 | // RUN: %check_clang_tidy %s readability-ambiguous-smartptr-reset-call %t -- \ |
---|---|
2 | // RUN: -config='{CheckOptions: \ |
3 | // RUN: {readability-ambiguous-smartptr-reset-call.SmartPointers: "::std::unique_ptr;::other_ptr"}}' \ |
4 | // RUN: --fix-notes -- -I %S/../modernize/Inputs/smart-ptr |
5 | |
6 | #include "unique_ptr.h" |
7 | #include "shared_ptr.h" |
8 | |
9 | template <typename T> |
10 | struct other_ptr { |
11 | T& operator*() const; |
12 | T* operator->() const; |
13 | void reset(); |
14 | }; |
15 | |
16 | struct Resettable { |
17 | void reset(); |
18 | void doSomething(); |
19 | }; |
20 | |
21 | void Positive() { |
22 | std::unique_ptr<Resettable> u; |
23 | u.reset(); |
24 | // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: ambiguous call to 'reset()' on a smart pointer with pointee that also has a 'reset()' method, prefer more explicit approach |
25 | // CHECK-MESSAGES: :[[@LINE-2]]:3: note: consider assigning the pointer to 'nullptr' here |
26 | // CHECK-FIXES: u = nullptr; |
27 | u->reset(); |
28 | // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: ambiguous call to 'reset()' on a pointee of a smart pointer, prefer more explicit approach |
29 | // CHECK-MESSAGES: :[[@LINE-2]]:3: note: consider dereferencing smart pointer to call 'reset' method of the pointee here |
30 | // CHECK-FIXES: (*u).reset(); |
31 | |
32 | other_ptr<Resettable> s; |
33 | s.reset(); |
34 | // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: ambiguous call to 'reset()' on a smart pointer with pointee that also has a 'reset()' method, prefer more explicit approach |
35 | // CHECK-MESSAGES: :[[@LINE-2]]:3: note: consider assigning the pointer to 'nullptr' here |
36 | // CHECK-FIXES: s = nullptr; |
37 | s->reset(); |
38 | // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: ambiguous call to 'reset()' on a pointee of a smart pointer, prefer more explicit approach |
39 | // CHECK-MESSAGES: :[[@LINE-2]]:3: note: consider dereferencing smart pointer to call 'reset' method of the pointee here |
40 | // CHECK-FIXES: (*s).reset(); |
41 | } |
42 | |
43 | void Negative() { |
44 | std::shared_ptr<Resettable> s_ptr; |
45 | s_ptr.reset(); |
46 | s_ptr->reset(); |
47 | s_ptr->doSomething(); |
48 | |
49 | std::unique_ptr<Resettable> u_ptr; |
50 | u_ptr.reset(nullptr); |
51 | u_ptr->doSomething(); |
52 | } |
53 |