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 
121c9d5d95SFariborz Jahanian struct X3 : public X2 {
131c9d5d95SFariborz Jahanian };
14*8ae5b0a1SFariborz Jahanian X3 x3;  // expected-error {{cannot define the implicit default constructor for 'struct X3', because base class 'struct X2' does not have any default constructor}}
151c9d5d95SFariborz Jahanian 
161c9d5d95SFariborz Jahanian 
171c9d5d95SFariborz Jahanian struct X4 {
18*8ae5b0a1SFariborz Jahanian   X2 x2; 	// expected-note {{member is declared here}}
191c9d5d95SFariborz Jahanian   X2 & rx2; // expected-note {{declared at}}
201c9d5d95SFariborz Jahanian };
211c9d5d95SFariborz Jahanian 
22*8ae5b0a1SFariborz Jahanian X4 x4; // expected-error {{cannot define the implicit default constructor for 'struct X4', because member's type 'struct X2' does not have any default constructor}} \
2352b91805SAnders Carlsson        // expected-error {{cannot define the implicit default constructor for 'struct X4', because reference member 'rx2' cannot be default-initialized}}
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 
481c9d5d95SFariborz Jahanian struct Z1 {
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 
5452b91805SAnders Carlsson Z1 z1;  // expected-error {{cannot define the implicit default constructor for 'struct Z1', because reference member 'z' cannot be default-initialized}} \
5552b91805SAnders Carlsson         // expected-error {{cannot define the implicit default constructor for 'struct Z1', because const member 'c1' cannot be default-initialized}}
561c9d5d95SFariborz Jahanian 
57