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