// RUN: $(dirname %s)/check_clang_tidy.sh %s misc-uniqueptr-reset-release %t // REQUIRES: shell namespace std { template struct unique_ptr { unique_ptr(); explicit unique_ptr(T *); template unique_ptr(unique_ptr &&); void reset(T *); T *release(); }; } // namespace std struct Foo {}; struct Bar : Foo {}; std::unique_ptr Create(); std::unique_ptr &Look(); std::unique_ptr *Get(); void f() { std::unique_ptr a, b; std::unique_ptr c; std::unique_ptr *x = &a; std::unique_ptr *y = &b; a.reset(b.release()); // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: prefer ptr1 = std::move(ptr2) over ptr1.reset(ptr2.release()) [misc-uniqueptr-reset-release] // CHECK-FIXES: a = std::move(b); a.reset(c.release()); // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: prefer ptr1 = std::move(ptr2) // CHECK-FIXES: a = std::move(c); a.reset(Create().release()); // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: prefer ptr1 = std::move(ptr2) // CHECK-FIXES: a = Create(); x->reset(y->release()); // CHECK-MESSAGES: :[[@LINE-1]]:6: warning: prefer ptr1 = std::move(ptr2) // CHECK-FIXES: *x = std::move(*y); Look().reset(Look().release()); // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: prefer ptr1 = std::move(ptr2) // CHECK-FIXES: Look() = std::move(Look()); Get()->reset(Get()->release()); // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: prefer ptr1 = std::move(ptr2) // CHECK-FIXES: *Get() = std::move(*Get()); }