1*8fbe78f6SDaniel Dunbar // RUN: %clang_cc1 -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 
12d7686ef3SEli Friedman struct X3 : public X2 { // expected-error {{must explicitly initialize the base class 'struct X2'}}
131c9d5d95SFariborz Jahanian };
149cf6b594SEli Friedman X3 x3; // expected-note {{first required here}}
151c9d5d95SFariborz Jahanian 
161c9d5d95SFariborz Jahanian 
17d7686ef3SEli Friedman struct X4 { // expected-error {{must explicitly initialize the member 'x2'}} \
18d7686ef3SEli 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 
239cf6b594SEli Friedman X4 x4; // expected-note {{first required here}}
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 
48d7686ef3SEli Friedman struct Z1 { // expected-error {{must explicitly initialize the reference member 'z'}} \
49d7686ef3SEli 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 
559cf6b594SEli Friedman Z1 z1; // expected-note {{first required here}}
561c9d5d95SFariborz Jahanian 
57