https://gcc.gnu.org/bugzilla/show_bug.cgi?id=19808
Marek Polacek <mpolacek at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |mpolacek at gcc dot gnu.org --- Comment #48 from Marek Polacek <mpolacek at gcc dot gnu.org> --- I have a patch that for this: // PR c++/19808 // { dg-do compile { target c++11 } } // { dg-options "-Wuninitialized" } struct S { int i, j, k, l; S() : i(j), // { dg-warning "field .S::j. is uninitialized when used here" } j(1), k(l + 1), // { dg-warning "field .S::l. is uninitialized when used here" } l(2) { } }; struct A { int a, b, c; A() : a(b // { dg-warning "field .A::b. is uninitialized when used here" } + c) { } // { dg-warning "field .A::c. is uninitialized when used here" } }; 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 "field .D::b. is uninitialized when used here" } }; struct E { int a = 1; E() : a(a + 1) { } // { dg-warning "field .E::a. is uninitialized when used here" } }; struct F { int a = 1; int b; F() : b(a + 1) { } }; struct bar { bar() {} bar(bar&) {} }; class foo { bar first; bar second; public: foo() : first(second) {} // { dg-warning "field .foo::second. is uninitialized when used here" } }; does this: $ ./cc1plus -quiet -Wuninitialized Wuninitialized-12.C Wuninitialized-12.C: In constructor ‘S::S()’: Wuninitialized-12.C:7:11: warning: field ‘S::j’ is uninitialized when used here [-Wuninitialized] 7 | S() : i(j), // { dg-warning "field .S::j. is uninitialized when used here" } | ^ Wuninitialized-12.C:9:11: warning: field ‘S::l’ is uninitialized when used here [-Wuninitialized] 9 | k(l + 1), // { dg-warning "field .S::l. is uninitialized when used here" } | ^ Wuninitialized-12.C: In constructor ‘A::A()’: Wuninitialized-12.C:15:11: warning: field ‘A::b’ is uninitialized when used here [-Wuninitialized] 15 | A() : a(b // { dg-warning "field .A::b. is uninitialized when used here" } | ^ Wuninitialized-12.C:16:13: warning: field ‘A::c’ is uninitialized when used here [-Wuninitialized] 16 | + c) { } // { dg-warning "field .A::c. is uninitialized when used here" } | ^ Wuninitialized-12.C: In constructor ‘C::C()’: Wuninitialized-12.C:28:13: warning: reference ‘C::r2’ is not yet bound to a value when used here [-Wuninitialized] 28 | C () : r1(r2), // { dg-warning "reference .C::r2. is not yet bound to a value when used here" } | ^~ Wuninitialized-12.C: In constructor ‘D::D()’: Wuninitialized-12.C:35:11: warning: field ‘D::b’ is uninitialized when used here [-Wuninitialized] 35 | D() : a(b + 1), b(a + 1) { } // { dg-warning "field .D::b. is uninitialized when used here" } | ^ Wuninitialized-12.C: In constructor ‘E::E()’: Wuninitialized-12.C:40:11: warning: field ‘E::a’ is uninitialized when used here [-Wuninitialized] 40 | E() : a(a + 1) { } // { dg-warning "field .E::a. is uninitialized when used here" } | ^ Wuninitialized-12.C: In constructor ‘foo::foo()’: Wuninitialized-12.C:58:17: warning: field ‘foo::second’ is uninitialized when used here [-Wuninitialized] 58 | foo() : first(second) {} // { dg-warning "field .foo::second. is uninitialized when used here" } | ^~~~~~