1a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar// RUN: %clang_cc1 -Wreorder -fsyntax-only -verify %s 27ad8390f7992ab7f19b1460c5f0b9d96f165c4e9Douglas Gregorclass A { 37ad8390f7992ab7f19b1460c5f0b9d96f165c4e9Douglas Gregor int m; 47002f4c03c2d0544f4e8bea8d3a5636519081e35John McCallpublic: 5bcfad54a43e5570e09daddd976bd4545933e75b1Fariborz Jahanian A() : A::m(17) { } // expected-error {{member initializer 'm' does not name a non-static data member or base class}} 6d7b27e1c17d40c72a1ccf8868315bf0c5271aa54Fariborz Jahanian A(int); 77ad8390f7992ab7f19b1460c5f0b9d96f165c4e9Douglas Gregor}; 87ad8390f7992ab7f19b1460c5f0b9d96f165c4e9Douglas Gregor 97ad8390f7992ab7f19b1460c5f0b9d96f165c4e9Douglas Gregorclass B : public A { 107ad8390f7992ab7f19b1460c5f0b9d96f165c4e9Douglas Gregorpublic: 117ad8390f7992ab7f19b1460c5f0b9d96f165c4e9Douglas Gregor B() : A(), m(1), n(3.14) { } 127ad8390f7992ab7f19b1460c5f0b9d96f165c4e9Douglas Gregor 137ad8390f7992ab7f19b1460c5f0b9d96f165c4e9Douglas Gregorprivate: 147ad8390f7992ab7f19b1460c5f0b9d96f165c4e9Douglas Gregor int m; 157ad8390f7992ab7f19b1460c5f0b9d96f165c4e9Douglas Gregor float n; 167ad8390f7992ab7f19b1460c5f0b9d96f165c4e9Douglas Gregor}; 177ad8390f7992ab7f19b1460c5f0b9d96f165c4e9Douglas Gregor 187ad8390f7992ab7f19b1460c5f0b9d96f165c4e9Douglas Gregor 197ad8390f7992ab7f19b1460c5f0b9d96f165c4e9Douglas Gregorclass C : public virtual B { 207ad8390f7992ab7f19b1460c5f0b9d96f165c4e9Douglas Gregorpublic: 217ad8390f7992ab7f19b1460c5f0b9d96f165c4e9Douglas Gregor C() : B() { } 227ad8390f7992ab7f19b1460c5f0b9d96f165c4e9Douglas Gregor}; 237ad8390f7992ab7f19b1460c5f0b9d96f165c4e9Douglas Gregor 247ad8390f7992ab7f19b1460c5f0b9d96f165c4e9Douglas Gregorclass D : public C { 257ad8390f7992ab7f19b1460c5f0b9d96f165c4e9Douglas Gregorpublic: 267ad8390f7992ab7f19b1460c5f0b9d96f165c4e9Douglas Gregor D() : B(), C() { } 277ad8390f7992ab7f19b1460c5f0b9d96f165c4e9Douglas Gregor}; 287ad8390f7992ab7f19b1460c5f0b9d96f165c4e9Douglas Gregor 297ad8390f7992ab7f19b1460c5f0b9d96f165c4e9Douglas Gregorclass E : public D, public B { 307ad8390f7992ab7f19b1460c5f0b9d96f165c4e9Douglas Gregorpublic: 317c2342dd4c9947806842e5aca3d2bb2e542853c9John McCall E() : B(), D() { } // expected-error{{base class initializer 'B' names both a direct base class and an inherited virtual base class}} 327ad8390f7992ab7f19b1460c5f0b9d96f165c4e9Douglas Gregor}; 337ad8390f7992ab7f19b1460c5f0b9d96f165c4e9Douglas Gregor 347ad8390f7992ab7f19b1460c5f0b9d96f165c4e9Douglas Gregor 357ad8390f7992ab7f19b1460c5f0b9d96f165c4e9Douglas Gregortypedef int INT; 367ad8390f7992ab7f19b1460c5f0b9d96f165c4e9Douglas Gregor 377ad8390f7992ab7f19b1460c5f0b9d96f165c4e9Douglas Gregorclass F : public B { 387ad8390f7992ab7f19b1460c5f0b9d96f165c4e9Douglas Gregorpublic: 397ad8390f7992ab7f19b1460c5f0b9d96f165c4e9Douglas Gregor int B; 407ad8390f7992ab7f19b1460c5f0b9d96f165c4e9Douglas Gregor 417ad8390f7992ab7f19b1460c5f0b9d96f165c4e9Douglas Gregor F() : B(17), 427ad8390f7992ab7f19b1460c5f0b9d96f165c4e9Douglas Gregor m(17), // expected-error{{member initializer 'm' does not name a non-static data member or base class}} 43d0344a4a6182ad704881cbbaa21cca14913d2296Chris Lattner INT(17) // expected-error{{constructor initializer 'INT' (aka 'int') does not name a class}} 447ad8390f7992ab7f19b1460c5f0b9d96f165c4e9Douglas Gregor { 457ad8390f7992ab7f19b1460c5f0b9d96f165c4e9Douglas Gregor } 467ad8390f7992ab7f19b1460c5f0b9d96f165c4e9Douglas Gregor}; 473f08d181f620e6bf4971c436fc9878f98a02bbe3Douglas Gregor 483f08d181f620e6bf4971c436fc9878f98a02bbe3Douglas Gregorclass G : A { 493f08d181f620e6bf4971c436fc9878f98a02bbe3Douglas Gregor G() : A(10); // expected-error{{expected '{'}} 503f08d181f620e6bf4971c436fc9878f98a02bbe3Douglas Gregor}; 51a7b3521ef52d983bd0e7fa562bb9ef1393f14634Anders Carlsson 52a7b3521ef52d983bd0e7fa562bb9ef1393f14634Anders Carlssonvoid f() : a(242) { } // expected-error{{only constructors take base initializers}} 53a7b3521ef52d983bd0e7fa562bb9ef1393f14634Anders Carlsson 54a7b3521ef52d983bd0e7fa562bb9ef1393f14634Anders Carlssonclass H : A { 55a7b3521ef52d983bd0e7fa562bb9ef1393f14634Anders Carlsson H(); 56a7b3521ef52d983bd0e7fa562bb9ef1393f14634Anders Carlsson}; 57a7b3521ef52d983bd0e7fa562bb9ef1393f14634Anders Carlsson 58a7b3521ef52d983bd0e7fa562bb9ef1393f14634Anders CarlssonH::H() : A(10) { } 59a7b3521ef52d983bd0e7fa562bb9ef1393f14634Anders Carlsson 609da7201adeab345fc7da72bcfcf30e11774fb8c4Fariborz Jahanian 619da7201adeab345fc7da72bcfcf30e11774fb8c4Fariborz Jahanianclass X {}; 629da7201adeab345fc7da72bcfcf30e11774fb8c4Fariborz Jahanianclass Y {}; 639da7201adeab345fc7da72bcfcf30e11774fb8c4Fariborz Jahanian 649da7201adeab345fc7da72bcfcf30e11774fb8c4Fariborz Jahanianstruct S : Y, virtual X { 659da7201adeab345fc7da72bcfcf30e11774fb8c4Fariborz Jahanian S (); 669da7201adeab345fc7da72bcfcf30e11774fb8c4Fariborz Jahanian}; 679da7201adeab345fc7da72bcfcf30e11774fb8c4Fariborz Jahanian 689da7201adeab345fc7da72bcfcf30e11774fb8c4Fariborz Jahanianstruct Z : S { 697c2342dd4c9947806842e5aca3d2bb2e542853c9John McCall Z() : X(), S(), E() {} // expected-error {{type 'E' is not a direct or virtual base of 'Z'}} 709da7201adeab345fc7da72bcfcf30e11774fb8c4Fariborz Jahanian}; 719da7201adeab345fc7da72bcfcf30e11774fb8c4Fariborz Jahanian 725ac3dfc24bd2d8c5c0d9955f5de33c97e6aaaadfFariborz Jahanianclass U { 735ac3dfc24bd2d8c5c0d9955f5de33c97e6aaaadfFariborz Jahanian union { int a; char* p; }; 745ac3dfc24bd2d8c5c0d9955f5de33c97e6aaaadfFariborz Jahanian union { int b; double d; }; 755ac3dfc24bd2d8c5c0d9955f5de33c97e6aaaadfFariborz Jahanian 763c3ccdbe73cb43bdf39a9102f5f7eb842fb71952John McCall U() : a(1), // expected-note {{previous initialization is here}} 776fe2965ce722826ae7c3af85271f900286ef20c3David Blaikie p(0), // expected-error {{initializing multiple members of union}} 783c3ccdbe73cb43bdf39a9102f5f7eb842fb71952John McCall d(1.0) {} 795ac3dfc24bd2d8c5c0d9955f5de33c97e6aaaadfFariborz Jahanian}; 805ac3dfc24bd2d8c5c0d9955f5de33c97e6aaaadfFariborz Jahanian 81bcfad54a43e5570e09daddd976bd4545933e75b1Fariborz Jahanianstruct V {}; 82bcfad54a43e5570e09daddd976bd4545933e75b1Fariborz Jahanianstruct Base {}; 83bcfad54a43e5570e09daddd976bd4545933e75b1Fariborz Jahanianstruct Base1 {}; 84bcfad54a43e5570e09daddd976bd4545933e75b1Fariborz Jahanian 85bcfad54a43e5570e09daddd976bd4545933e75b1Fariborz Jahanianstruct Derived : Base, Base1, virtual V { 86bcfad54a43e5570e09daddd976bd4545933e75b1Fariborz Jahanian Derived (); 87bcfad54a43e5570e09daddd976bd4545933e75b1Fariborz Jahanian}; 88bcfad54a43e5570e09daddd976bd4545933e75b1Fariborz Jahanian 89bcfad54a43e5570e09daddd976bd4545933e75b1Fariborz Jahanianstruct Current : Derived { 90bcfad54a43e5570e09daddd976bd4545933e75b1Fariborz Jahanian int Derived; 91d6ca8da0f5a4115813055729faaa5128e994806dJohn McCall Current() : Derived(1), ::Derived(), // expected-warning {{field 'Derived' will be initialized after base '::Derived'}} \ 92d6ca8da0f5a4115813055729faaa5128e994806dJohn McCall // expected-warning {{base class '::Derived' will be initialized after base 'Derived::V'}} 93bcfad54a43e5570e09daddd976bd4545933e75b1Fariborz Jahanian ::Derived::Base(), // expected-error {{type '::Derived::Base' is not a direct or virtual base of 'Current'}} 94bcfad54a43e5570e09daddd976bd4545933e75b1Fariborz Jahanian Derived::Base1(), // expected-error {{type 'Derived::Base1' is not a direct or virtual base of 'Current'}} 95d6ca8da0f5a4115813055729faaa5128e994806dJohn McCall Derived::V(), 96bcfad54a43e5570e09daddd976bd4545933e75b1Fariborz Jahanian ::NonExisting(), // expected-error {{member initializer 'NonExisting' does not name a non-static data member or}} 97bcfad54a43e5570e09daddd976bd4545933e75b1Fariborz Jahanian INT::NonExisting() {} // expected-error {{expected a class or namespace}} \ 981eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump // expected-error {{member initializer 'NonExisting' does not name a non-static data member or}} 99bcfad54a43e5570e09daddd976bd4545933e75b1Fariborz Jahanian}; 10087595e46ccd61c9b7c08074c2c64b66b5c0fc694Fariborz Jahanian 101220ccbf2c9ef97034cce80561f9f46c4f1f63bc7John McCallstruct M { // expected-note 2 {{candidate constructor (the implicit copy constructor)}} \ 10249c16da71b9c95cc53b4af6de2833a022cb69b6aEli Friedman // expected-note {{declared here}} \ 10349c16da71b9c95cc53b4af6de2833a022cb69b6aEli Friedman // expected-note {{declared here}} 104b1622a1fd7b7f4ab8d00d0183d17c90ad25c14e3John McCall M(int i, int j); // expected-note 2 {{candidate constructor}} 10587595e46ccd61c9b7c08074c2c64b66b5c0fc694Fariborz Jahanian}; 10687595e46ccd61c9b7c08074c2c64b66b5c0fc694Fariborz Jahanian 10787595e46ccd61c9b7c08074c2c64b66b5c0fc694Fariborz Jahanianstruct N : M { 1087c2342dd4c9947806842e5aca3d2bb2e542853c9John McCall N() : M(1), // expected-error {{no matching constructor for initialization of 'M'}} 1097c2342dd4c9947806842e5aca3d2bb2e542853c9John McCall m1(100) { } // expected-error {{no matching constructor for initialization of 'M'}} 11087595e46ccd61c9b7c08074c2c64b66b5c0fc694Fariborz Jahanian M m1; 11187595e46ccd61c9b7c08074c2c64b66b5c0fc694Fariborz Jahanian}; 11287595e46ccd61c9b7c08074c2c64b66b5c0fc694Fariborz Jahanian 11349c16da71b9c95cc53b4af6de2833a022cb69b6aEli Friedmanstruct P : M { 1147c2342dd4c9947806842e5aca3d2bb2e542853c9John McCall P() { } // expected-error {{constructor for 'P' must explicitly initialize the base class 'M' which does not have a default constructor}} \ 11549c16da71b9c95cc53b4af6de2833a022cb69b6aEli Friedman // expected-error {{member 'm'}} 11649c16da71b9c95cc53b4af6de2833a022cb69b6aEli Friedman M m; // expected-note {{member is declared here}} 11787595e46ccd61c9b7c08074c2c64b66b5c0fc694Fariborz Jahanian}; 11887595e46ccd61c9b7c08074c2c64b66b5c0fc694Fariborz Jahanian 1197252f5110de3163a465aa50a2114c1fef9e848e8Fariborz Jahanianstruct Q { 1209db7dbb918ca49f4ee6c181e4917e7b6ec547353Douglas Gregor Q() : f1(1,2), // expected-error {{excess elements in scalar initializer}} 1219db7dbb918ca49f4ee6c181e4917e7b6ec547353Douglas Gregor pf(0.0) { } // expected-error {{cannot initialize a member subobject of type 'float *' with an rvalue of type 'double'}} 1227252f5110de3163a465aa50a2114c1fef9e848e8Fariborz Jahanian float f1; 1237252f5110de3163a465aa50a2114c1fef9e848e8Fariborz Jahanian 1247252f5110de3163a465aa50a2114c1fef9e848e8Fariborz Jahanian float *pf; 1257252f5110de3163a465aa50a2114c1fef9e848e8Fariborz Jahanian}; 126b41900410fae8cba4bc02db2e3e44142e7f4c625John McCall 127b41900410fae8cba4bc02db2e3e44142e7f4c625John McCall// A silly class used to demonstrate field-is-uninitialized in constructors with 128b41900410fae8cba4bc02db2e3e44142e7f4c625John McCall// multiple params. 1297002f4c03c2d0544f4e8bea8d3a5636519081e35John McCallclass TwoInOne { public: TwoInOne(TwoInOne a, TwoInOne b) {} }; 130b41900410fae8cba4bc02db2e3e44142e7f4c625John McCallclass InitializeUsingSelfTest { 131b41900410fae8cba4bc02db2e3e44142e7f4c625John McCall bool A; 132b41900410fae8cba4bc02db2e3e44142e7f4c625John McCall char* B; 133b41900410fae8cba4bc02db2e3e44142e7f4c625John McCall int C; 134b41900410fae8cba4bc02db2e3e44142e7f4c625John McCall TwoInOne D; 135b41900410fae8cba4bc02db2e3e44142e7f4c625John McCall InitializeUsingSelfTest(int E) 136b41900410fae8cba4bc02db2e3e44142e7f4c625John McCall : A(A), // expected-warning {{field is uninitialized when used here}} 137b41900410fae8cba4bc02db2e3e44142e7f4c625John McCall B((((B)))), // expected-warning {{field is uninitialized when used here}} 138b41900410fae8cba4bc02db2e3e44142e7f4c625John McCall C(A && InitializeUsingSelfTest::C), // expected-warning {{field is uninitialized when used here}} 139b41900410fae8cba4bc02db2e3e44142e7f4c625John McCall D(D, // expected-warning {{field is uninitialized when used here}} 140b41900410fae8cba4bc02db2e3e44142e7f4c625John McCall D) {} // expected-warning {{field is uninitialized when used here}} 141b41900410fae8cba4bc02db2e3e44142e7f4c625John McCall}; 142b41900410fae8cba4bc02db2e3e44142e7f4c625John McCall 143b41900410fae8cba4bc02db2e3e44142e7f4c625John McCallint IntWrapper(int i) { return 0; }; 144b41900410fae8cba4bc02db2e3e44142e7f4c625John McCallclass InitializeUsingSelfExceptions { 145b41900410fae8cba4bc02db2e3e44142e7f4c625John McCall int A; 146b41900410fae8cba4bc02db2e3e44142e7f4c625John McCall int B; 147ff8819be64c53d71dcc0200ece9b2738041c80e2Argyrios Kyrtzidis int C; 148ff8819be64c53d71dcc0200ece9b2738041c80e2Argyrios Kyrtzidis void *P; 149b41900410fae8cba4bc02db2e3e44142e7f4c625John McCall InitializeUsingSelfExceptions(int B) 150b41900410fae8cba4bc02db2e3e44142e7f4c625John McCall : A(IntWrapper(A)), // Due to a conservative implementation, we do not report warnings inside function/ctor calls even though it is possible to do so. 151ff8819be64c53d71dcc0200ece9b2738041c80e2Argyrios Kyrtzidis B(B), // Not a warning; B is a local variable. 152ff8819be64c53d71dcc0200ece9b2738041c80e2Argyrios Kyrtzidis C(sizeof(C)), // sizeof doesn't reference contents, do not warn 153ff8819be64c53d71dcc0200ece9b2738041c80e2Argyrios Kyrtzidis P(&P) {} // address-of doesn't reference contents (the pointer may be dereferenced in the same expression but it would be rare; and weird) 154b41900410fae8cba4bc02db2e3e44142e7f4c625John McCall}; 155b41900410fae8cba4bc02db2e3e44142e7f4c625John McCall 156b41900410fae8cba4bc02db2e3e44142e7f4c625John McCallclass CopyConstructorTest { 157b41900410fae8cba4bc02db2e3e44142e7f4c625John McCall bool A, B, C; 158b41900410fae8cba4bc02db2e3e44142e7f4c625John McCall CopyConstructorTest(const CopyConstructorTest& rhs) 159b41900410fae8cba4bc02db2e3e44142e7f4c625John McCall : A(rhs.A), 160b41900410fae8cba4bc02db2e3e44142e7f4c625John McCall B(B), // expected-warning {{field is uninitialized when used here}} 161b41900410fae8cba4bc02db2e3e44142e7f4c625John McCall C(rhs.C || C) { } // expected-warning {{field is uninitialized when used here}} 162b41900410fae8cba4bc02db2e3e44142e7f4c625John McCall}; 163c07a494b376f75f33759cf09ad188b11ef3fa9d5Douglas Gregor 164c07a494b376f75f33759cf09ad188b11ef3fa9d5Douglas Gregor// Make sure we aren't marking default constructors when we shouldn't be. 165c07a494b376f75f33759cf09ad188b11ef3fa9d5Douglas Gregortemplate<typename T> 166c07a494b376f75f33759cf09ad188b11ef3fa9d5Douglas Gregorstruct NDC { 167c07a494b376f75f33759cf09ad188b11ef3fa9d5Douglas Gregor T &ref; 168c07a494b376f75f33759cf09ad188b11ef3fa9d5Douglas Gregor 169c07a494b376f75f33759cf09ad188b11ef3fa9d5Douglas Gregor NDC() { } 170c07a494b376f75f33759cf09ad188b11ef3fa9d5Douglas Gregor NDC(T &ref) : ref(ref) { } 171c07a494b376f75f33759cf09ad188b11ef3fa9d5Douglas Gregor}; 172c07a494b376f75f33759cf09ad188b11ef3fa9d5Douglas Gregor 173c07a494b376f75f33759cf09ad188b11ef3fa9d5Douglas Gregorstruct X0 : NDC<int> { 174c07a494b376f75f33759cf09ad188b11ef3fa9d5Douglas Gregor X0(int &ref) : NDC<int>(ref), ndc(ref) { } 175c07a494b376f75f33759cf09ad188b11ef3fa9d5Douglas Gregor 176c07a494b376f75f33759cf09ad188b11ef3fa9d5Douglas Gregor NDC<int> ndc; 177c07a494b376f75f33759cf09ad188b11ef3fa9d5Douglas Gregor}; 178114a297ef02a722b3afcd719210c060811d431e0Anders Carlsson 179114a297ef02a722b3afcd719210c060811d431e0Anders Carlssonnamespace Test0 { 180114a297ef02a722b3afcd719210c060811d431e0Anders Carlsson 181114a297ef02a722b3afcd719210c060811d431e0Anders Carlssonstruct A { A(); }; 182114a297ef02a722b3afcd719210c060811d431e0Anders Carlsson 183114a297ef02a722b3afcd719210c060811d431e0Anders Carlssonstruct B { 184114a297ef02a722b3afcd719210c060811d431e0Anders Carlsson B() { } 185114a297ef02a722b3afcd719210c060811d431e0Anders Carlsson const A a; 186114a297ef02a722b3afcd719210c060811d431e0Anders Carlsson}; 187114a297ef02a722b3afcd719210c060811d431e0Anders Carlsson 188114a297ef02a722b3afcd719210c060811d431e0Anders Carlsson} 1890d6b1640eb4d1a4a0203235cfdfcdaf3335af36dJohn McCall 1909fd682b960bf0628299c46a1a07a7cc5a6dcba01Anders Carlssonnamespace Test1 { 1910d6b1640eb4d1a4a0203235cfdfcdaf3335af36dJohn McCall struct A { 1920d6b1640eb4d1a4a0203235cfdfcdaf3335af36dJohn McCall enum Kind { Foo } Kind; 1930d6b1640eb4d1a4a0203235cfdfcdaf3335af36dJohn McCall A() : Kind(Foo) {} 1940d6b1640eb4d1a4a0203235cfdfcdaf3335af36dJohn McCall }; 1950d6b1640eb4d1a4a0203235cfdfcdaf3335af36dJohn McCall} 1969fd682b960bf0628299c46a1a07a7cc5a6dcba01Anders Carlsson 1979fd682b960bf0628299c46a1a07a7cc5a6dcba01Anders Carlssonnamespace Test2 { 1989fd682b960bf0628299c46a1a07a7cc5a6dcba01Anders Carlsson 1999fd682b960bf0628299c46a1a07a7cc5a6dcba01Anders Carlssonstruct A { 2009fd682b960bf0628299c46a1a07a7cc5a6dcba01Anders Carlsson A(const A&); 2019fd682b960bf0628299c46a1a07a7cc5a6dcba01Anders Carlsson}; 2029fd682b960bf0628299c46a1a07a7cc5a6dcba01Anders Carlsson 2039fd682b960bf0628299c46a1a07a7cc5a6dcba01Anders Carlssonstruct B : virtual A { }; 2049fd682b960bf0628299c46a1a07a7cc5a6dcba01Anders Carlssonstruct C : A, B { }; 2059fd682b960bf0628299c46a1a07a7cc5a6dcba01Anders Carlsson 2069fd682b960bf0628299c46a1a07a7cc5a6dcba01Anders CarlssonC f(C c) { 2079fd682b960bf0628299c46a1a07a7cc5a6dcba01Anders Carlsson return c; 2089fd682b960bf0628299c46a1a07a7cc5a6dcba01Anders Carlsson} 2099fd682b960bf0628299c46a1a07a7cc5a6dcba01Anders Carlsson 2109fd682b960bf0628299c46a1a07a7cc5a6dcba01Anders Carlsson} 211e861c60bde74cf495447f50844d7ee7ea3a8a7a0Chandler Carruth 212e861c60bde74cf495447f50844d7ee7ea3a8a7a0Chandler Carruth// Don't build implicit initializers for anonymous union fields when we already 213e861c60bde74cf495447f50844d7ee7ea3a8a7a0Chandler Carruth// have an explicit initializer for another field in the union. 214e861c60bde74cf495447f50844d7ee7ea3a8a7a0Chandler Carruthnamespace PR7402 { 215e861c60bde74cf495447f50844d7ee7ea3a8a7a0Chandler Carruth struct S { 216e861c60bde74cf495447f50844d7ee7ea3a8a7a0Chandler Carruth union { 217e861c60bde74cf495447f50844d7ee7ea3a8a7a0Chandler Carruth void* ptr_; 218e861c60bde74cf495447f50844d7ee7ea3a8a7a0Chandler Carruth struct { int i_; }; 219e861c60bde74cf495447f50844d7ee7ea3a8a7a0Chandler Carruth }; 220e861c60bde74cf495447f50844d7ee7ea3a8a7a0Chandler Carruth 221e861c60bde74cf495447f50844d7ee7ea3a8a7a0Chandler Carruth template <typename T> S(T) : ptr_(0) { } 222e861c60bde74cf495447f50844d7ee7ea3a8a7a0Chandler Carruth }; 223e861c60bde74cf495447f50844d7ee7ea3a8a7a0Chandler Carruth 224e861c60bde74cf495447f50844d7ee7ea3a8a7a0Chandler Carruth void f() { 225e861c60bde74cf495447f50844d7ee7ea3a8a7a0Chandler Carruth S s(3); 226e861c60bde74cf495447f50844d7ee7ea3a8a7a0Chandler Carruth } 227e861c60bde74cf495447f50844d7ee7ea3a8a7a0Chandler Carruth} 228572fc62b52b5b113cbaf528bd3ec00fcde19a46eJohn McCall 229572fc62b52b5b113cbaf528bd3ec00fcde19a46eJohn McCall// <rdar://problem/8308215>: don't crash. 230572fc62b52b5b113cbaf528bd3ec00fcde19a46eJohn McCall// Lots of questionable recovery here; errors can change. 231572fc62b52b5b113cbaf528bd3ec00fcde19a46eJohn McCallnamespace test3 { 232572fc62b52b5b113cbaf528bd3ec00fcde19a46eJohn McCall class A : public std::exception {}; // expected-error {{undeclared identifier}} expected-error {{expected class name}} expected-note 3 {{candidate}} expected-note {{passing argument}} 233572fc62b52b5b113cbaf528bd3ec00fcde19a46eJohn McCall class B : public A { 234572fc62b52b5b113cbaf528bd3ec00fcde19a46eJohn McCall public: 235572fc62b52b5b113cbaf528bd3ec00fcde19a46eJohn McCall B(const String& s, int e=0) // expected-error {{unknown type name}} 236572fc62b52b5b113cbaf528bd3ec00fcde19a46eJohn McCall : A(e), m_String(s) , m_ErrorStr(__null) {} // expected-error {{no matching constructor}} expected-error {{does not name}} 237572fc62b52b5b113cbaf528bd3ec00fcde19a46eJohn McCall B(const B& e) 238572fc62b52b5b113cbaf528bd3ec00fcde19a46eJohn McCall : A(e), m_String(e.m_String), m_ErrorStr(__null) { // expected-error {{no viable conversion}} expected-error {{does not name}} 239572fc62b52b5b113cbaf528bd3ec00fcde19a46eJohn McCall } 240572fc62b52b5b113cbaf528bd3ec00fcde19a46eJohn McCall }; 241572fc62b52b5b113cbaf528bd3ec00fcde19a46eJohn McCall} 242175ffbf7db893181b301e201c561ac928266f4beAnders Carlsson 243175ffbf7db893181b301e201c561ac928266f4beAnders Carlsson// PR8075 244175ffbf7db893181b301e201c561ac928266f4beAnders Carlssonnamespace PR8075 { 245175ffbf7db893181b301e201c561ac928266f4beAnders Carlsson 246175ffbf7db893181b301e201c561ac928266f4beAnders Carlssonstruct S1 { 247175ffbf7db893181b301e201c561ac928266f4beAnders Carlsson enum { FOO = 42 }; 248175ffbf7db893181b301e201c561ac928266f4beAnders Carlsson static const int bar = 42; 249175ffbf7db893181b301e201c561ac928266f4beAnders Carlsson static int baz(); 250175ffbf7db893181b301e201c561ac928266f4beAnders Carlsson S1(int); 251175ffbf7db893181b301e201c561ac928266f4beAnders Carlsson}; 252175ffbf7db893181b301e201c561ac928266f4beAnders Carlsson 253175ffbf7db893181b301e201c561ac928266f4beAnders Carlssonconst int S1::bar; 254175ffbf7db893181b301e201c561ac928266f4beAnders Carlsson 255175ffbf7db893181b301e201c561ac928266f4beAnders Carlssonstruct S2 { 256175ffbf7db893181b301e201c561ac928266f4beAnders Carlsson S1 s1; 257175ffbf7db893181b301e201c561ac928266f4beAnders Carlsson S2() : s1(s1.FOO) {} 258175ffbf7db893181b301e201c561ac928266f4beAnders Carlsson}; 259175ffbf7db893181b301e201c561ac928266f4beAnders Carlsson 260175ffbf7db893181b301e201c561ac928266f4beAnders Carlssonstruct S3 { 261175ffbf7db893181b301e201c561ac928266f4beAnders Carlsson S1 s1; 262175ffbf7db893181b301e201c561ac928266f4beAnders Carlsson S3() : s1(s1.bar) {} 263175ffbf7db893181b301e201c561ac928266f4beAnders Carlsson}; 264175ffbf7db893181b301e201c561ac928266f4beAnders Carlsson 265175ffbf7db893181b301e201c561ac928266f4beAnders Carlssonstruct S4 { 266175ffbf7db893181b301e201c561ac928266f4beAnders Carlsson S1 s1; 267175ffbf7db893181b301e201c561ac928266f4beAnders Carlsson S4() : s1(s1.baz()) {} 268175ffbf7db893181b301e201c561ac928266f4beAnders Carlsson}; 269175ffbf7db893181b301e201c561ac928266f4beAnders Carlsson 270175ffbf7db893181b301e201c561ac928266f4beAnders Carlsson} 271e9ee382c32a83e9807a2fe4cfd52b5a11169a4b8Eli Friedman 272e9ee382c32a83e9807a2fe4cfd52b5a11169a4b8Eli Friedmannamespace PR12049 { 273e9ee382c32a83e9807a2fe4cfd52b5a11169a4b8Eli Friedman int function(); 274e9ee382c32a83e9807a2fe4cfd52b5a11169a4b8Eli Friedman 275e9ee382c32a83e9807a2fe4cfd52b5a11169a4b8Eli Friedman class Class 276e9ee382c32a83e9807a2fe4cfd52b5a11169a4b8Eli Friedman { 277e9ee382c32a83e9807a2fe4cfd52b5a11169a4b8Eli Friedman public: 278e9ee382c32a83e9807a2fe4cfd52b5a11169a4b8Eli Friedman Class() : member(function() {} // expected-note {{to match this '('}} 279e9ee382c32a83e9807a2fe4cfd52b5a11169a4b8Eli Friedman 280e9ee382c32a83e9807a2fe4cfd52b5a11169a4b8Eli Friedman int member; // expected-error {{expected ')'}} 281e9ee382c32a83e9807a2fe4cfd52b5a11169a4b8Eli Friedman }; 282e9ee382c32a83e9807a2fe4cfd52b5a11169a4b8Eli Friedman} 283