11c9d5d95SFariborz Jahanian // RUN: clang-cc -fsyntax-only -verify %s
21c9d5d95SFariborz Jahanian 
31c9d5d95SFariborz Jahanian struct X1 { // has no implicit default constructor
41c9d5d95SFariborz Jahanian    X1(int);
51c9d5d95SFariborz Jahanian };
61c9d5d95SFariborz Jahanian 
71c9d5d95SFariborz Jahanian struct X2  : X1 {  // expected-note {{'struct X2' declared here}} \
81c9d5d95SFariborz Jahanian                   //  expected-note {{'struct X2' declared here}}
91c9d5d95SFariborz Jahanian    X2(int);
101c9d5d95SFariborz Jahanian };
111c9d5d95SFariborz Jahanian 
12*d7686ef3SEli Friedman struct X3 : public X2 { // expected-error {{must explicitly initialize the base class 'struct X2'}}
131c9d5d95SFariborz Jahanian };
14*d7686ef3SEli Friedman X3 x3;
151c9d5d95SFariborz Jahanian 
161c9d5d95SFariborz Jahanian 
17*d7686ef3SEli Friedman struct X4 { // expected-error {{must explicitly initialize the member 'x2'}} \
18*d7686ef3SEli Friedman             // expected-error {{must explicitly initialize the reference member 'rx2'}}
198ae5b0a1SFariborz Jahanian   X2 x2; 	// expected-note {{member is declared here}}
201c9d5d95SFariborz Jahanian   X2 & rx2; // expected-note {{declared at}}
211c9d5d95SFariborz Jahanian };
221c9d5d95SFariborz Jahanian 
23*d7686ef3SEli Friedman X4 x4;
241c9d5d95SFariborz Jahanian 
251c9d5d95SFariborz Jahanian 
261c9d5d95SFariborz Jahanian struct Y1 { // has no implicit default constructor
271c9d5d95SFariborz Jahanian    Y1(int);
281c9d5d95SFariborz Jahanian };
291c9d5d95SFariborz Jahanian 
301c9d5d95SFariborz Jahanian struct Y2  : Y1 {
311c9d5d95SFariborz Jahanian    Y2(int);
321c9d5d95SFariborz Jahanian    Y2();
331c9d5d95SFariborz Jahanian };
341c9d5d95SFariborz Jahanian 
351c9d5d95SFariborz Jahanian struct Y3 : public Y2 {
361c9d5d95SFariborz Jahanian };
371c9d5d95SFariborz Jahanian Y3 y3;
381c9d5d95SFariborz Jahanian 
391c9d5d95SFariborz Jahanian struct Y4 {
401c9d5d95SFariborz Jahanian   Y2 y2;
411c9d5d95SFariborz Jahanian };
421c9d5d95SFariborz Jahanian 
431c9d5d95SFariborz Jahanian Y4 y4;
441c9d5d95SFariborz Jahanian 
451c9d5d95SFariborz Jahanian // More tests
461c9d5d95SFariborz Jahanian 
471c9d5d95SFariborz Jahanian 
48*d7686ef3SEli Friedman struct Z1 { // expected-error {{must explicitly initialize the reference member 'z'}} \
49*d7686ef3SEli Friedman             // expected-error {{must explicitly initialize the const member 'c1'}}
501c9d5d95SFariborz Jahanian   int& z;       // expected-note {{declared at}}
511c9d5d95SFariborz Jahanian   const int c1; // expected-note {{declared at}}
521c9d5d95SFariborz Jahanian   volatile int v1;
531c9d5d95SFariborz Jahanian };
541c9d5d95SFariborz Jahanian 
55*d7686ef3SEli Friedman Z1 z1;
561c9d5d95SFariborz Jahanian 
57