Fix test-suite fallout of default -Wreturn-type.
[official-gcc.git] / gcc / testsuite / g++.dg / plugin / self-assign-test-2.C
blob2c9d8cb7d0e69a88224818df644efe1041ed367a
1 // Test the self-assignemnt detection plugin without checking of operator-eq.
2 // { dg-do compile }
3 // { dg-options "-O -fplugin-arg-selfassign-no-check-operator-eq" }
5 class Foo {
6  private:
7   int a_;
9  public:
10   Foo() : a_(a_) {} // { dg-warning "assigned to itself" }
12   void setA(int a) {
13     a_ = a_; // { dg-warning "assigned to itself" }
14   }
16   void operator=(Foo& rhs) {
17     this->a_ = rhs.a_;
18   }
21 struct Bar {
22   int b_;
23   int c_;
26 int g = g; // { dg-warning "assigned to itself" }
27 Foo foo = foo; // { dg-warning "assigned to itself" }
29 void func()
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;
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-bogus "assigned to itself" }
44   foo = foo; // { dg-bogus "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;