// RUN: %check_clang_tidy %s modernize-shrink-to-fit %t namespace std { template struct vector { void swap(vector &other); }; } void f() { std::vector v; std::vector(v).swap(v); // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: the shrink_to_fit method should be used to reduce the capacity of a shrinkable container [modernize-shrink-to-fit] // CHECK-FIXES: v.shrink_to_fit(); std::vector &vref = v; std::vector(vref).swap(vref); // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: the shrink_to_fit method should // CHECK-FIXES: vref.shrink_to_fit(); std::vector *vptr = &v; std::vector(*vptr).swap(*vptr); // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: the shrink_to_fit method should // CHECK-FIXES: vptr->shrink_to_fit(); } struct X { std::vector v; void f() { std::vector(v).swap(v); // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: the shrink_to_fit method should // CHECK-FIXES: v.shrink_to_fit(); std::vector *vptr = &v; std::vector(*vptr).swap(*vptr); // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: the shrink_to_fit method should // CHECK-FIXES: vptr->shrink_to_fit(); } }; template void g() { std::vector v; std::vector(v).swap(v); // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: the shrink_to_fit method should // CHECK-FIXES: v.shrink_to_fit(); std::vector v2; std::vector(v2).swap(v2); // CHECK-FIXES: std::vector(v2).swap(v2); } template void g2() { std::vector v; std::vector(v).swap(v); // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: the shrink_to_fit method should // CHECK-FIXES: v.shrink_to_fit(); T v3; T(v3).swap(v3); // CHECK-FIXES: T(v3).swap(v3); } #define COPY_AND_SWAP_INT_VEC(x) std::vector(x).swap(x) // CHECK-FIXES: #define COPY_AND_SWAP_INT_VEC(x) std::vector(x).swap(x) void h() { g(); g(); g(); g2>(); std::vector v; COPY_AND_SWAP_INT_VEC(v); // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: the shrink_to_fit method should // CHECK-FIXES: COPY_AND_SWAP_INT_VEC(v); } void PR38315() { typedef std::vector Vector; Vector v; Vector(v).swap(v); // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: the shrink_to_fit method should // CHECK-FIXES: v.shrink_to_fit(); using Vector2 = std::vector; Vector2 v2; Vector2(v2).swap(v2); // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: the shrink_to_fit method should // CHECK-FIXES: v2.shrink_to_fit(); }