1 // Test the self-assignemnt detection plugin. 2 // { dg-do compile } 3 // { dg-options "-O" } 4 5 class Foo { 6 private: 7 int a_; 8 9 public: Foo()10 Foo() : a_(a_) {} // { dg-warning "assigned to itself" } 11 setA(int a)12 void setA(int a) { 13 a_ = a_; // { dg-warning "assigned to itself" } 14 } 15 16 void operator=(Foo& rhs) { 17 this->a_ = rhs.a_; 18 } 19 }; 20 21 struct Bar { 22 int b_; 23 int c_; 24 }; 25 26 int g = g; // { dg-warning "assigned to itself" } 27 Foo foo = foo; // { dg-warning "assigned to itself" } 28 func()29void func() 30 { 31 Bar *bar1, bar2; 32 Foo local_foo; 33 int x = x; // { dg-warning "assigned to itself" } 34 static int y = y; // { dg-warning "assigned to itself" } 35 float *f; 36 Bar bar_array[5]; 37 char n; 38 int overflow; 39 40 *f = *f; // { dg-warning "assigned to itself" } 41 bar1->b_ = bar1->b_; // { dg-warning "assigned to itself" } 42 bar2.c_ = bar2.c_; // { dg-warning "assigned to itself" } 43 local_foo = local_foo; // { dg-warning "assigned to itself" } 44 foo = foo; // { dg-warning "assigned to itself" } 45 foo.setA(5); 46 bar_array[3].c_ = bar_array[3].c_; // { dg-warning "assigned to itself" } 47 bar_array[x+g].b_ = bar_array[x+g].b_; // { dg-warning "self-assignment detected" "" { xfail *-*-* } } 48 y = x; 49 x = y; 50 } 51