| // RUN: %check_clang_tidy %s modernize-shrink-to-fit %t |
| |
| namespace std { |
| template <typename T> struct vector { void swap(vector &other); }; |
| } |
| |
| void f() { |
| std::vector<int> v; |
| |
| std::vector<int>(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<int> &vref = v; |
| std::vector<int>(vref).swap(vref); |
| // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: the shrink_to_fit method should |
| // CHECK-FIXES: {{^ }}vref.shrink_to_fit();{{$}} |
| |
| std::vector<int> *vptr = &v; |
| std::vector<int>(*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<int> v; |
| void f() { |
| std::vector<int>(v).swap(v); |
| // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: the shrink_to_fit method should |
| // CHECK-FIXES: {{^ }}v.shrink_to_fit();{{$}} |
| |
| std::vector<int> *vptr = &v; |
| std::vector<int>(*vptr).swap(*vptr); |
| // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: the shrink_to_fit method should |
| // CHECK-FIXES: {{^ }}vptr->shrink_to_fit();{{$}} |
| } |
| }; |
| |
| template <typename T> void g() { |
| std::vector<int> v; |
| std::vector<int>(v).swap(v); |
| // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: the shrink_to_fit method should |
| // CHECK-FIXES: {{^ }}v.shrink_to_fit();{{$}} |
| |
| std::vector<T> v2; |
| std::vector<T>(v2).swap(v2); |
| // CHECK-FIXES: {{^ }}std::vector<T>(v2).swap(v2);{{$}} |
| } |
| |
| template <typename T> void g2() { |
| std::vector<int> v; |
| std::vector<int>(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<int>(x).swap(x) |
| // CHECK-FIXES: #define COPY_AND_SWAP_INT_VEC(x) std::vector<int>(x).swap(x) |
| |
| void h() { |
| g<int>(); |
| g<double>(); |
| g<bool>(); |
| g2<std::vector<int>>(); |
| std::vector<int> 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<int> 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<int>; |
| Vector2 v2; |
| Vector2(v2).swap(v2); |
| // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: the shrink_to_fit method should |
| // CHECK-FIXES: {{^ }}v2.shrink_to_fit();{{$}} |
| } |