Daily bump.
[gcc.git] / gcc / testsuite / g++.dg / warn / Wuninitialized-24.C
blobe5dd4295a70bbd20027585726c5d9d1ebaa60d73
1 // PR c++/19808
2 // { dg-do compile { target c++11 } }
3 // { dg-options "-Wuninitialized -Winit-self" }
5 int fint(int);
6 int fintp(int *);
7 int fintr(int &);
8 int fintcr(const int &);
10 int arr[10];
12 struct S {
13   int x;
14   int y;
15   const int z = 42;
16   int *p;
18   S(int (*)[1]) : x(x) { } // { dg-warning "initialized with itself" }
19   S(int (*)[2]) : x(x + x) { } // { dg-warning "member .S::x. is used uninitialized" }
20   S(int (*)[3]) : x(static_cast<int>(y)) { } // { dg-warning "member .S::y. is used uninitialized" }
21   S(int (*)[4]) : x(static_cast<int>(x)) { } // { dg-warning "member .S::x. is used uninitialized" }
22   S(int (*)[5]) : x(fint(x)) { }
23   S(int (*)[6]) : x(fint(y)) { }
25   S(int (*)[7]) : x(sizeof(x)) { }
26   S(int (*)[8]) : x(sizeof(y)) { }
27   S(int (*)[9]) : p(&x) { }
28   S(int (*)[10]) : x(fintp(&y)) { }
29   S(int (*)[11]) : x(fintr(y)) { }
30   S(int (*)[12]) : x(fintcr(y)) { }
31   S(int (*)[26]) : x(((void)(__typeof(y)) 1, 1)) { }
32   S(int (*)[27]) : x(((void)(decltype(y)) 1, 1)) { }
33   S(int (*)[28]) : x(__alignof__(y)) { }
34   S(int (*)[29]) : x(noexcept(y)) { }
36   S(int (*)[13]) : x(0), y(x ? y : y) { }
37   S(int (*)[14]) : x(0), y(1 + (x ? y : y)) { }
38   S(int (*)[15]) : x(-y) { } // { dg-warning "member .S::y. is used uninitialized" }
39   S(int (*)[16]) : x(1 << y) { } // { dg-warning "member .S::y. is used uninitialized" }
40   S(int (*)[17]) : x(this->y) { } // { dg-warning "member .S::y. is used uninitialized" }
41   S(int (*)[18]) : x(arr[y]) { } // { dg-warning "member .S::y. is used uninitialized" }
42   S(int (*)[19]) : x(0), y(x ? x : y) { }
43   S(int (*)[20]) : x(0), y(y ? x : y) { }
44   S(int (*)[21]) : x(0), y(y ? x : x) { }
45   S(int (*)[22]) : x(0), y((fint(y), x)) { }
46   S(int (*)[23]) : x(0), y(x += y) { } // "member .S::y. is used uninitialized" but too complex for the FE
47   S(int (*)[24]) : x(y += 10) { } // "member .S::y. is used uninitialized" but too complex for the FE
48   S(int (*)[25]) : x(y++) { } // { dg-warning "member .S::y. is used uninitialized" }
51 // Same, but { }.
52 struct R {
53   int x;
54   int y;
55   const int z = 42;
56   int *p;
58   R(int (*)[1]) : x{x} { } // { dg-warning "member .R::x. is used uninitialized" }
59   R(int (*)[2]) : x{x + x} { } // { dg-warning "member .R::x. is used uninitialized" }
60   R(int (*)[3]) : x{static_cast<int>(y)} { } // { dg-warning "member .R::y. is used uninitialized" }
61   R(int (*)[4]) : x{static_cast<int>(x)} { } // { dg-warning "member .R::x. is used uninitialized" }
62   R(int (*)[5]) : x{fint(x)} { }
63   R(int (*)[6]) : x{fint(y)} { }
65   R(int (*)[7]) : x{sizeof(x)} { }
66   R(int (*)[8]) : x{sizeof(y)} { }
67   R(int (*)[9]) : p{&x} { }
68   R(int (*)[10]) : x{fintp(&y)} { }
69   R(int (*)[11]) : x{fintr(y)} { }
70   R(int (*)[12]) : x{fintcr(y)} { }
71   R(int (*)[26]) : x{((void)(__typeof(y)) 1, 1)} { }
72   R(int (*)[27]) : x{((void)(decltype(y)) 1, 1)} { }
73   R(int (*)[28]) : x{__alignof__(y)} { }
74   R(int (*)[29]) : x{noexcept(y)} { }
76   R(int (*)[13]) : x{0}, y{x ? y : y} { }
77   R(int (*)[14]) : x{0}, y{1 + (x ? y : y)} { }
78   R(int (*)[15]) : x{-y} { } // { dg-warning "member .R::y. is used uninitialized" }
79   R(int (*)[16]) : x{1 << y} { } // { dg-warning "member .R::y. is used uninitialized" }
80   R(int (*)[17]) : x{this->y} { } // { dg-warning "member .R::y. is used uninitialized" }
81   R(int (*)[18]) : x{arr[y]} { } // { dg-warning "member .R::y. is used uninitialized" }
82   R(int (*)[19]) : x{0}, y{x ? x : y} { }
83   R(int (*)[20]) : x{0}, y{y ? x : y} { }
84   R(int (*)[21]) : x{0}, y{y ? x : x} { }
85   R(int (*)[22]) : x{0}, y{(fint(y), x)} { }
86   R(int (*)[23]) : x{0}, y{x += y} { } // "member .R::y. is used uninitialized" but too complex for the FE
87   R(int (*)[24]) : x{y += 10} { } // "member .R::y. is used uninitialized" but too complex for the FE
88   R(int (*)[25]) : x{y++} { } // { dg-warning "member .R::y. is used uninitialized" }