111
|
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" }
|
|
4
|
|
5 class Foo {
|
|
6 private:
|
|
7 int a_;
|
|
8
|
|
9 public:
|
|
10 Foo() : a_(a_) {} // { dg-warning "assigned to itself" }
|
|
11
|
|
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
|
131
|
29 void func()
|
111
|
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-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;
|
|
50 }
|