default-constructor-initializers.cpp revision a5728872c7702ddd09537c95bc3cbd20e1f2fb09
1a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar// RUN: %clang_cc1 -fsyntax-only -verify %s
23da83eb7bcfa6bd476ab804ecb6cf755b39a6f92Fariborz Jahanian
33da83eb7bcfa6bd476ab804ecb6cf755b39a6f92Fariborz Jahanianstruct X1 { // has no implicit default constructor
43da83eb7bcfa6bd476ab804ecb6cf755b39a6f92Fariborz Jahanian   X1(int);
53da83eb7bcfa6bd476ab804ecb6cf755b39a6f92Fariborz Jahanian};
63da83eb7bcfa6bd476ab804ecb6cf755b39a6f92Fariborz Jahanian
73da83eb7bcfa6bd476ab804ecb6cf755b39a6f92Fariborz Jahanianstruct X2  : X1 {  // expected-note {{'struct X2' declared here}} \
83da83eb7bcfa6bd476ab804ecb6cf755b39a6f92Fariborz Jahanian                  //  expected-note {{'struct X2' declared here}}
93da83eb7bcfa6bd476ab804ecb6cf755b39a6f92Fariborz Jahanian   X2(int);
103da83eb7bcfa6bd476ab804ecb6cf755b39a6f92Fariborz Jahanian};
113da83eb7bcfa6bd476ab804ecb6cf755b39a6f92Fariborz Jahanian
1249c16da71b9c95cc53b4af6de2833a022cb69b6aEli Friedmanstruct X3 : public X2 { // expected-error {{must explicitly initialize the base class 'struct X2'}}
133da83eb7bcfa6bd476ab804ecb6cf755b39a6f92Fariborz Jahanian};
1480c30dad6c6fca077293125a96f464b6c8857171Eli FriedmanX3 x3; // expected-note {{first required here}}
153da83eb7bcfa6bd476ab804ecb6cf755b39a6f92Fariborz Jahanian
163da83eb7bcfa6bd476ab804ecb6cf755b39a6f92Fariborz Jahanian
1749c16da71b9c95cc53b4af6de2833a022cb69b6aEli Friedmanstruct X4 { // expected-error {{must explicitly initialize the member 'x2'}} \
1849c16da71b9c95cc53b4af6de2833a022cb69b6aEli Friedman            // expected-error {{must explicitly initialize the reference member 'rx2'}}
190c728f1eb2e8e6e5adc2501c6fdcd87105b34d5cFariborz Jahanian  X2 x2; 	// expected-note {{member is declared here}}
203da83eb7bcfa6bd476ab804ecb6cf755b39a6f92Fariborz Jahanian  X2 & rx2; // expected-note {{declared at}}
213da83eb7bcfa6bd476ab804ecb6cf755b39a6f92Fariborz Jahanian};
223da83eb7bcfa6bd476ab804ecb6cf755b39a6f92Fariborz Jahanian
2380c30dad6c6fca077293125a96f464b6c8857171Eli FriedmanX4 x4; // expected-note {{first required here}}
243da83eb7bcfa6bd476ab804ecb6cf755b39a6f92Fariborz Jahanian
253da83eb7bcfa6bd476ab804ecb6cf755b39a6f92Fariborz Jahanian
263da83eb7bcfa6bd476ab804ecb6cf755b39a6f92Fariborz Jahanianstruct Y1 { // has no implicit default constructor
273da83eb7bcfa6bd476ab804ecb6cf755b39a6f92Fariborz Jahanian   Y1(int);
283da83eb7bcfa6bd476ab804ecb6cf755b39a6f92Fariborz Jahanian};
293da83eb7bcfa6bd476ab804ecb6cf755b39a6f92Fariborz Jahanian
303da83eb7bcfa6bd476ab804ecb6cf755b39a6f92Fariborz Jahanianstruct Y2  : Y1 {
313da83eb7bcfa6bd476ab804ecb6cf755b39a6f92Fariborz Jahanian   Y2(int);
323da83eb7bcfa6bd476ab804ecb6cf755b39a6f92Fariborz Jahanian   Y2();
333da83eb7bcfa6bd476ab804ecb6cf755b39a6f92Fariborz Jahanian};
343da83eb7bcfa6bd476ab804ecb6cf755b39a6f92Fariborz Jahanian
353da83eb7bcfa6bd476ab804ecb6cf755b39a6f92Fariborz Jahanianstruct Y3 : public Y2 {
363da83eb7bcfa6bd476ab804ecb6cf755b39a6f92Fariborz Jahanian};
373da83eb7bcfa6bd476ab804ecb6cf755b39a6f92Fariborz JahanianY3 y3;
383da83eb7bcfa6bd476ab804ecb6cf755b39a6f92Fariborz Jahanian
393da83eb7bcfa6bd476ab804ecb6cf755b39a6f92Fariborz Jahanianstruct Y4 {
403da83eb7bcfa6bd476ab804ecb6cf755b39a6f92Fariborz Jahanian  Y2 y2;
413da83eb7bcfa6bd476ab804ecb6cf755b39a6f92Fariborz Jahanian};
423da83eb7bcfa6bd476ab804ecb6cf755b39a6f92Fariborz Jahanian
433da83eb7bcfa6bd476ab804ecb6cf755b39a6f92Fariborz JahanianY4 y4;
443da83eb7bcfa6bd476ab804ecb6cf755b39a6f92Fariborz Jahanian
453da83eb7bcfa6bd476ab804ecb6cf755b39a6f92Fariborz Jahanian// More tests
463da83eb7bcfa6bd476ab804ecb6cf755b39a6f92Fariborz Jahanian
473da83eb7bcfa6bd476ab804ecb6cf755b39a6f92Fariborz Jahanian
4849c16da71b9c95cc53b4af6de2833a022cb69b6aEli Friedmanstruct Z1 { // expected-error {{must explicitly initialize the reference member 'z'}} \
4949c16da71b9c95cc53b4af6de2833a022cb69b6aEli Friedman            // expected-error {{must explicitly initialize the const member 'c1'}}
501eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  int& z;       // expected-note {{declared at}}
511eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  const int c1; // expected-note {{declared at}}
521eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  volatile int v1;
533da83eb7bcfa6bd476ab804ecb6cf755b39a6f92Fariborz Jahanian};
543da83eb7bcfa6bd476ab804ecb6cf755b39a6f92Fariborz Jahanian
5580c30dad6c6fca077293125a96f464b6c8857171Eli FriedmanZ1 z1; // expected-note {{first required here}}
563da83eb7bcfa6bd476ab804ecb6cf755b39a6f92Fariborz Jahanian
57