1 // PR c++/89214
2 // { dg-do compile { target c++17 } }
3 
4 struct A
5 {
6   A (int);
7 };
8 
9 struct BB
10 {
11   A a;
12 };
13 
14 struct B : BB
15 {
16 };
17 
18 void
foo()19 foo ()
20 {
21   B b1 = {42};
22   B b2 = {{42}};
23   B b3 = {{{42}}};
24 
25   B b4 = B{42};
26   B b5 = B{{42}};
27   B b6 = B{{{42}}};
28 
29   B b7 = {B{42}};
30   B b8 = {B{{42}}};
31   B b9 = {B{{{42}}}};
32 
33   B b10 = {{B{42}}}; // { dg-warning "initializing a base class of type .BB. results in object slicing" }
34   B b11 = {{B{{42}}}}; // { dg-warning "initializing a base class of type .BB. results in object slicing" }
35   B b12 = {{B{{{42}}}}}; // { dg-warning "initializing a base class of type .BB. results in object slicing" }
36 
37   B bb1{42};
38   B bb2{{42}};
39   B bb3{{{42}}};
40 
41   B bb7{B{42}};
42   B bb8{B{{42}}};
43   B bb9{B{{{42}}}};
44 
45   B bb10{{B{42}}}; // { dg-warning "initializing a base class of type .BB. results in object slicing" }
46   B bb11{{B{{42}}}}; // { dg-warning "initializing a base class of type .BB. results in object slicing" }
47   B bb12{{B{{{42}}}}}; // { dg-warning "initializing a base class of type .BB. results in object slicing" }
48 }
49