18fbe78f6SDaniel 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 
7*85f90559SJohn McCall struct X2  : X1 {  // expected-note 2 {{'X2' declared here}}
81c9d5d95SFariborz Jahanian    X2(int);
91c9d5d95SFariborz Jahanian };
101c9d5d95SFariborz Jahanian 
11*85f90559SJohn McCall struct X3 : public X2 { // expected-error {{implicit default constructor for 'X3' must explicitly initialize the base class 'X2' which does not have a default constructor}}
121c9d5d95SFariborz Jahanian };
139cf6b594SEli Friedman X3 x3; // expected-note {{first required here}}
141c9d5d95SFariborz Jahanian 
151c9d5d95SFariborz Jahanian 
16d7686ef3SEli Friedman struct X4 { // expected-error {{must explicitly initialize the member 'x2'}} \
17d7686ef3SEli Friedman             // expected-error {{must explicitly initialize the reference member 'rx2'}}
188ae5b0a1SFariborz Jahanian   X2 x2; 	// expected-note {{member is declared here}}
191c9d5d95SFariborz Jahanian   X2 & rx2; // expected-note {{declared at}}
201c9d5d95SFariborz Jahanian };
211c9d5d95SFariborz Jahanian 
229cf6b594SEli Friedman X4 x4; // expected-note {{first required here}}
231c9d5d95SFariborz Jahanian 
241c9d5d95SFariborz Jahanian 
251c9d5d95SFariborz Jahanian struct Y1 { // has no implicit default constructor
261c9d5d95SFariborz Jahanian    Y1(int);
271c9d5d95SFariborz Jahanian };
281c9d5d95SFariborz Jahanian 
291c9d5d95SFariborz Jahanian struct Y2  : Y1 {
301c9d5d95SFariborz Jahanian    Y2(int);
311c9d5d95SFariborz Jahanian    Y2();
321c9d5d95SFariborz Jahanian };
331c9d5d95SFariborz Jahanian 
341c9d5d95SFariborz Jahanian struct Y3 : public Y2 {
351c9d5d95SFariborz Jahanian };
361c9d5d95SFariborz Jahanian Y3 y3;
371c9d5d95SFariborz Jahanian 
381c9d5d95SFariborz Jahanian struct Y4 {
391c9d5d95SFariborz Jahanian   Y2 y2;
401c9d5d95SFariborz Jahanian };
411c9d5d95SFariborz Jahanian 
421c9d5d95SFariborz Jahanian Y4 y4;
431c9d5d95SFariborz Jahanian 
441c9d5d95SFariborz Jahanian // More tests
451c9d5d95SFariborz Jahanian 
461c9d5d95SFariborz Jahanian 
47d7686ef3SEli Friedman struct Z1 { // expected-error {{must explicitly initialize the reference member 'z'}} \
48d7686ef3SEli Friedman             // expected-error {{must explicitly initialize the const member 'c1'}}
491c9d5d95SFariborz Jahanian   int& z;       // expected-note {{declared at}}
501c9d5d95SFariborz Jahanian   const int c1; // expected-note {{declared at}}
511c9d5d95SFariborz Jahanian   volatile int v1;
521c9d5d95SFariborz Jahanian };
531c9d5d95SFariborz Jahanian 
549cf6b594SEli Friedman Z1 z1; // expected-note {{first required here}}
551c9d5d95SFariborz Jahanian 
56