// 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();{{$}} }