forked from OSchip/llvm-project
42 lines
1.3 KiB
C++
42 lines
1.3 KiB
C++
// RUN: %check_clang_tidy %s bugprone-unhandled-self-assignment %t -- \
|
|
// RUN: -config="{CheckOptions: \
|
|
// RUN: [{key: bugprone-unhandled-self-assignment.WarnOnlyIfThisHasSuspiciousField, \
|
|
// RUN: value: false}]}"
|
|
|
|
// Classes with pointer field are still caught.
|
|
class PtrField {
|
|
public:
|
|
PtrField &operator=(const PtrField &object) {
|
|
// CHECK-MESSAGES: [[@LINE-1]]:13: warning: operator=() does not handle self-assignment properly [bugprone-unhandled-self-assignment]
|
|
return *this;
|
|
}
|
|
|
|
private:
|
|
int *p;
|
|
};
|
|
|
|
// With the option, check catches classes with trivial fields.
|
|
class TrivialFields {
|
|
public:
|
|
TrivialFields &operator=(const TrivialFields &object) {
|
|
// CHECK-MESSAGES: [[@LINE-1]]:18: warning: operator=() does not handle self-assignment properly [bugprone-unhandled-self-assignment]
|
|
return *this;
|
|
}
|
|
|
|
private:
|
|
int m;
|
|
float f;
|
|
double d;
|
|
bool b;
|
|
};
|
|
|
|
// The check warns also when there is no field at all.
|
|
// In this case, user-defined copy assignment operator is useless anyway.
|
|
class ClassWithoutFields {
|
|
public:
|
|
ClassWithoutFields &operator=(const ClassWithoutFields &object) {
|
|
// CHECK-MESSAGES: [[@LINE-1]]:23: warning: operator=() does not handle self-assignment properly [bugprone-unhandled-self-assignment]
|
|
return *this;
|
|
}
|
|
};
|