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