| // PR c++/19808 |
| // { dg-do compile { target c++11 } } |
| // { dg-options "-Wuninitialized" } |
| |
| struct S { |
| int i, j, k, l; |
| S() : i(j), // { dg-warning "member .S::j. is used uninitialized" } |
| j(1), |
| k(l + 1), // { dg-warning "member .S::l. is used uninitialized" } |
| l(2) { } |
| }; |
| |
| struct A { |
| int a, b, c; |
| A() : a(b // { dg-warning "member .A::b. is used uninitialized" } |
| + c) { } // { dg-warning "member .A::c. is used uninitialized" } |
| }; |
| |
| struct B { |
| int &r; |
| int *p; |
| int a; |
| B() : r(a), p(&a), a(1) { } |
| }; |
| |
| struct C { |
| const int &r1, &r2; |
| C () : r1(r2), // { dg-warning "reference .C::r2. is not yet bound to a value when used here" } |
| r2(r1) { } |
| }; |
| |
| struct D { |
| int a = 1; |
| int b = 2; |
| D() : a(b + 1), b(a + 1) { } // { dg-warning "member .D::b. is used uninitialized" } |
| }; |
| |
| struct E { |
| int a = 1; |
| E() : a(a + 1) { } // { dg-warning "member .E::a. is used uninitialized" } |
| }; |
| |
| struct F { |
| int a = 1; |
| int b; |
| F() : b(a + 1) { } |
| }; |
| |
| struct bar { |
| int a; |
| bar() {} |
| bar(bar&) {} |
| }; |
| |
| class foo { |
| bar first; |
| bar second; |
| public: |
| foo() : first(second) {} // { dg-warning "member .foo::second. is used uninitialized" } |
| }; |