Re-factor inclusion of tree.h.
[official-gcc.git] / gcc / testsuite / g++.dg / plugin / self-assign-test-1.C
blob607381fb403ccfefeaa146b69ae752f7b0b66e48
1 // Test the self-assignemnt detection plugin.
2 // { dg-do compile }
3 // { dg-options "-O" }
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 int 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-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" }
48   y = x;
49   x = y;