1 // RUN: %check_clang_tidy %s bugprone-unhandled-self-assignment %t -- \ 2 // RUN: -config="{CheckOptions: \ 3 // RUN: {bugprone-unhandled-self-assignment.WarnOnlyIfThisHasSuspiciousField: false}}" 4 5 // Classes with pointer field are still caught. 6 class PtrField { 7 public: operator =(const PtrField & object)8 PtrField &operator=(const PtrField &object) { 9 // CHECK-MESSAGES: [[@LINE-1]]:13: warning: operator=() does not handle self-assignment properly [bugprone-unhandled-self-assignment] 10 return *this; 11 } 12 13 private: 14 int *p; 15 }; 16 17 // With the option, check catches classes with trivial fields. 18 class TrivialFields { 19 public: operator =(const TrivialFields & object)20 TrivialFields &operator=(const TrivialFields &object) { 21 // CHECK-MESSAGES: [[@LINE-1]]:18: warning: operator=() does not handle self-assignment properly [bugprone-unhandled-self-assignment] 22 return *this; 23 } 24 25 private: 26 int m; 27 float f; 28 double d; 29 bool b; 30 }; 31 32 // The check warns also when there is no field at all. 33 // In this case, user-defined copy assignment operator is useless anyway. 34 class ClassWithoutFields { 35 public: operator =(const ClassWithoutFields & object)36 ClassWithoutFields &operator=(const ClassWithoutFields &object) { 37 // CHECK-MESSAGES: [[@LINE-1]]:23: warning: operator=() does not handle self-assignment properly [bugprone-unhandled-self-assignment] 38 return *this; 39 } 40 }; 41