| Daniel Dunbar | a572887 | 2009-12-15 20:14:24 +0000 | [diff] [blame] | 1 | // RUN: %clang_cc1 -fsyntax-only -verify %s | 
| Anders Carlsson | 5c478cf | 2009-12-04 22:33:25 +0000 | [diff] [blame] | 2 |  | 
| John McCall | 3d04336 | 2010-04-13 07:45:41 +0000 | [diff] [blame] | 3 | struct A { }; | 
| Sean Hunt | f961ea5 | 2011-05-10 19:08:14 +0000 | [diff] [blame^] | 4 | A::A() { } // expected-error {{definition of implicitly declared default constructor}} | 
| Anders Carlsson | 5c478cf | 2009-12-04 22:33:25 +0000 | [diff] [blame] | 5 |  | 
| John McCall | 3d04336 | 2010-04-13 07:45:41 +0000 | [diff] [blame] | 6 | struct B { }; | 
| Anders Carlsson | 5c478cf | 2009-12-04 22:33:25 +0000 | [diff] [blame] | 7 | B::B(const B&) { } // expected-error {{definition of implicitly declared copy constructor}} | 
|  | 8 |  | 
| John McCall | 3d04336 | 2010-04-13 07:45:41 +0000 | [diff] [blame] | 9 | struct C { }; | 
| Anders Carlsson | 5c478cf | 2009-12-04 22:33:25 +0000 | [diff] [blame] | 10 | C& C::operator=(const C&) { return *this; } // expected-error {{definition of implicitly declared copy assignment operator}} | 
|  | 11 |  | 
| John McCall | 3d04336 | 2010-04-13 07:45:41 +0000 | [diff] [blame] | 12 | struct D { }; | 
| Anders Carlsson | 5c478cf | 2009-12-04 22:33:25 +0000 | [diff] [blame] | 13 | D::~D() { } // expected-error {{definition of implicitly declared destructor}} | 
|  | 14 |  | 
| Douglas Gregor | 6275e0c | 2010-04-12 17:09:20 +0000 | [diff] [blame] | 15 | // Make sure that the special member functions are introduced for | 
|  | 16 | // name-lookup purposes and overload with user-declared | 
|  | 17 | // constructors and assignment operators. | 
|  | 18 | namespace PR6570 { | 
|  | 19 | class A { }; | 
|  | 20 |  | 
|  | 21 | class B { | 
|  | 22 | public: | 
|  | 23 | B() {} | 
|  | 24 |  | 
|  | 25 | B(const A& a) { | 
|  | 26 | operator = (CONST); | 
|  | 27 | operator = (a); | 
|  | 28 | } | 
|  | 29 |  | 
|  | 30 | B& operator = (const A& a) { | 
|  | 31 | return *this; | 
|  | 32 | } | 
|  | 33 |  | 
|  | 34 | void f(const A &a) { | 
|  | 35 | B b(a); | 
|  | 36 | }; | 
|  | 37 |  | 
|  | 38 | static const B CONST; | 
|  | 39 | }; | 
|  | 40 |  | 
|  | 41 | } | 
| Sebastian Redl | cddc69f | 2010-07-08 23:07:34 +0000 | [diff] [blame] | 42 |  | 
|  | 43 | namespace PR7594 { | 
|  | 44 | // If the lazy declaration of special member functions is triggered | 
|  | 45 | // in an out-of-line initializer, make sure the functions aren't in | 
|  | 46 | // the initializer scope. This used to crash Clang: | 
|  | 47 | struct C { | 
|  | 48 | C(); | 
|  | 49 | static C *c; | 
|  | 50 | }; | 
|  | 51 | C *C::c = new C(); | 
|  | 52 | } |