13573b2c84372d9484296fa658f5276f6c09acb92Daniel Dunbar// RUN: %clang_cc1 -fsyntax-only -verify %s 2ccabf0868d9cb81bbc3037a8b3b400737401841dDouglas Gregortypedef int INT; 3ccabf0868d9cb81bbc3037a8b3b400737401841dDouglas Gregor 4f15ac4bc132d609f1df92308612f3d2629bbd480Douglas Gregorclass Foo { 5f15ac4bc132d609f1df92308612f3d2629bbd480Douglas Gregor Foo(); 6f15ac4bc132d609f1df92308612f3d2629bbd480Douglas Gregor (Foo)(float) { } 71336cab43dec39c2d36531c0e3875f4db725a28cChris Lattner explicit Foo(int); // expected-note {{previous declaration is here}} 8f15ac4bc132d609f1df92308612f3d2629bbd480Douglas Gregor Foo(const Foo&); 9f15ac4bc132d609f1df92308612f3d2629bbd480Douglas Gregor 10ccabf0868d9cb81bbc3037a8b3b400737401841dDouglas Gregor ((Foo))(INT); // expected-error{{cannot be redeclared}} 11ccabf0868d9cb81bbc3037a8b3b400737401841dDouglas Gregor 12869cabfb18978c6cd759b31eaa29a69ce73fd486Douglas Gregor Foo(Foo foo, int i = 17, int j = 42); // expected-error{{copy constructor must pass its first argument by reference}} 13ccabf0868d9cb81bbc3037a8b3b400737401841dDouglas Gregor 14f15ac4bc132d609f1df92308612f3d2629bbd480Douglas Gregor static Foo(short, short); // expected-error{{constructor cannot be declared 'static'}} 15f15ac4bc132d609f1df92308612f3d2629bbd480Douglas Gregor virtual Foo(double); // expected-error{{constructor cannot be declared 'virtual'}} 16f15ac4bc132d609f1df92308612f3d2629bbd480Douglas Gregor Foo(long) const; // expected-error{{'const' qualifier is not allowed on a constructor}} 17d87f5a7a7cb050e9cec8b330f06d1f034eddb417Douglas Gregor 1887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar int Foo(int, int); // expected-error{{constructor cannot have a return type}} 19c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 20c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines volatile Foo(float); // expected-error{{constructor cannot have a return type}} 21f15ac4bc132d609f1df92308612f3d2629bbd480Douglas Gregor}; 2298341049a14443ad41927de25d8950936a39aeddDouglas Gregor 2398341049a14443ad41927de25d8950936a39aeddDouglas GregorFoo::Foo(const Foo&) { } 2498341049a14443ad41927de25d8950936a39aeddDouglas Gregor 25b9213832bca8e9a31450604e56a1da067fea4b7cDouglas Gregortypedef struct { 26b9213832bca8e9a31450604e56a1da067fea4b7cDouglas Gregor int version; 27b9213832bca8e9a31450604e56a1da067fea4b7cDouglas Gregor} Anon; 28b9213832bca8e9a31450604e56a1da067fea4b7cDouglas Gregorextern const Anon anon; 29b9213832bca8e9a31450604e56a1da067fea4b7cDouglas Gregorextern "C" const Anon anon2; 30b9213832bca8e9a31450604e56a1da067fea4b7cDouglas Gregor 31303102df2c7d587d1e23126c56dc51fd0946524eSebastian Redl// PR3188: The extern declaration complained about not having an appropriate 32303102df2c7d587d1e23126c56dc51fd0946524eSebastian Redl// constructor. 33303102df2c7d587d1e23126c56dc51fd0946524eSebastian Redlstruct x; 34303102df2c7d587d1e23126c56dc51fd0946524eSebastian Redlextern x a; 35303102df2c7d587d1e23126c56dc51fd0946524eSebastian Redl 36303102df2c7d587d1e23126c56dc51fd0946524eSebastian Redl// A similar case. 37303102df2c7d587d1e23126c56dc51fd0946524eSebastian Redlstruct y { 38303102df2c7d587d1e23126c56dc51fd0946524eSebastian Redl y(int); 39303102df2c7d587d1e23126c56dc51fd0946524eSebastian Redl}; 40303102df2c7d587d1e23126c56dc51fd0946524eSebastian Redlextern y b; 4162ae25ad1ecf45a8ecfefba3b14b159a91847657Douglas Gregor 4262ae25ad1ecf45a8ecfefba3b14b159a91847657Douglas Gregorstruct Length { 4362ae25ad1ecf45a8ecfefba3b14b159a91847657Douglas Gregor Length l() const { return *this; } 4462ae25ad1ecf45a8ecfefba3b14b159a91847657Douglas Gregor}; 45c2bada747d3dfc98205776e766b2de23e68e17f5Anders Carlsson 46c2bada747d3dfc98205776e766b2de23e68e17f5Anders Carlsson// <rdar://problem/6815988> 47c2bada747d3dfc98205776e766b2de23e68e17f5Anders Carlssonstruct mmst_reg{ 48c2bada747d3dfc98205776e766b2de23e68e17f5Anders Carlsson char mmst_reg[10]; 49c2bada747d3dfc98205776e766b2de23e68e17f5Anders Carlsson}; 50e19759d8bdf60b4aa8a56d9f0ff6b533db1ca9a3Anders Carlsson 51e19759d8bdf60b4aa8a56d9f0ff6b533db1ca9a3Anders Carlsson// PR3948 52e19759d8bdf60b4aa8a56d9f0ff6b533db1ca9a3Anders Carlssonnamespace PR3948 { 53e19759d8bdf60b4aa8a56d9f0ff6b533db1ca9a3Anders Carlsson// PR3948 54e19759d8bdf60b4aa8a56d9f0ff6b533db1ca9a3Anders Carlssonclass a { 55e19759d8bdf60b4aa8a56d9f0ff6b533db1ca9a3Anders Carlsson public: 56e19759d8bdf60b4aa8a56d9f0ff6b533db1ca9a3Anders Carlsson int b(int a()); 57e19759d8bdf60b4aa8a56d9f0ff6b533db1ca9a3Anders Carlsson}; 58e19759d8bdf60b4aa8a56d9f0ff6b533db1ca9a3Anders Carlssonint x(); 59e19759d8bdf60b4aa8a56d9f0ff6b533db1ca9a3Anders Carlssonvoid y() { 60e19759d8bdf60b4aa8a56d9f0ff6b533db1ca9a3Anders Carlsson a z; z.b(x); 61e19759d8bdf60b4aa8a56d9f0ff6b533db1ca9a3Anders Carlsson} 62e19759d8bdf60b4aa8a56d9f0ff6b533db1ca9a3Anders Carlsson} 63cb0a7f740d35c61cf51e6be64d937b6943db6c85Douglas Gregor 64cb0a7f740d35c61cf51e6be64d937b6943db6c85Douglas Gregornamespace A { 65cb0a7f740d35c61cf51e6be64d937b6943db6c85Douglas Gregor struct S { 66cb0a7f740d35c61cf51e6be64d937b6943db6c85Douglas Gregor S(); 67cb0a7f740d35c61cf51e6be64d937b6943db6c85Douglas Gregor S(int); 68cb0a7f740d35c61cf51e6be64d937b6943db6c85Douglas Gregor void f1(); 69cb0a7f740d35c61cf51e6be64d937b6943db6c85Douglas Gregor void f2(); 70cb0a7f740d35c61cf51e6be64d937b6943db6c85Douglas Gregor operator int (); 71cb0a7f740d35c61cf51e6be64d937b6943db6c85Douglas Gregor ~S(); 72cb0a7f740d35c61cf51e6be64d937b6943db6c85Douglas Gregor }; 73cb0a7f740d35c61cf51e6be64d937b6943db6c85Douglas Gregor} 74cb0a7f740d35c61cf51e6be64d937b6943db6c85Douglas Gregor 75cb0a7f740d35c61cf51e6be64d937b6943db6c85Douglas GregorA::S::S() {} 76cb0a7f740d35c61cf51e6be64d937b6943db6c85Douglas Gregor 77cb0a7f740d35c61cf51e6be64d937b6943db6c85Douglas Gregorvoid A::S::f1() {} 78cb0a7f740d35c61cf51e6be64d937b6943db6c85Douglas Gregor 79cb0a7f740d35c61cf51e6be64d937b6943db6c85Douglas Gregorstruct S {}; 80cb0a7f740d35c61cf51e6be64d937b6943db6c85Douglas Gregor 81cb0a7f740d35c61cf51e6be64d937b6943db6c85Douglas GregorA::S::S(int) {} 82cb0a7f740d35c61cf51e6be64d937b6943db6c85Douglas Gregor 83cb0a7f740d35c61cf51e6be64d937b6943db6c85Douglas Gregorvoid A::S::f2() {} 84cb0a7f740d35c61cf51e6be64d937b6943db6c85Douglas Gregor 85cb0a7f740d35c61cf51e6be64d937b6943db6c85Douglas GregorA::S::operator int() { return 1; } 86cb0a7f740d35c61cf51e6be64d937b6943db6c85Douglas Gregor 87cb0a7f740d35c61cf51e6be64d937b6943db6c85Douglas GregorA::S::~S() {} 88383f1936108dc776417998ac27972c6f6c3b437cDouglas Gregor 89