destructor.cpp revision 333de066a0c018170142150d563f3acdb2ad80f2
1a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar// RUN: %clang_cc1 -fsyntax-only -verify %s 242a552f8200ba5948661aee0106fce0c04e39818Douglas Gregorclass A { 342a552f8200ba5948661aee0106fce0c04e39818Douglas Gregorpublic: 442a552f8200ba5948661aee0106fce0c04e39818Douglas Gregor ~A(); 542a552f8200ba5948661aee0106fce0c04e39818Douglas Gregor}; 642a552f8200ba5948661aee0106fce0c04e39818Douglas Gregor 742a552f8200ba5948661aee0106fce0c04e39818Douglas Gregorclass B { 842a552f8200ba5948661aee0106fce0c04e39818Douglas Gregorpublic: 942a552f8200ba5948661aee0106fce0c04e39818Douglas Gregor ~B() { } 1042a552f8200ba5948661aee0106fce0c04e39818Douglas Gregor}; 1142a552f8200ba5948661aee0106fce0c04e39818Douglas Gregor 1242a552f8200ba5948661aee0106fce0c04e39818Douglas Gregorclass C { 1342a552f8200ba5948661aee0106fce0c04e39818Douglas Gregorpublic: 1442a552f8200ba5948661aee0106fce0c04e39818Douglas Gregor (~C)() { } 1542a552f8200ba5948661aee0106fce0c04e39818Douglas Gregor}; 1642a552f8200ba5948661aee0106fce0c04e39818Douglas Gregor 1742a552f8200ba5948661aee0106fce0c04e39818Douglas Gregorstruct D { 1842a552f8200ba5948661aee0106fce0c04e39818Douglas Gregor static void ~D(int, ...) const { } // \ 1942a552f8200ba5948661aee0106fce0c04e39818Douglas Gregor // expected-error{{type qualifier is not allowed on this function}} \ 2042a552f8200ba5948661aee0106fce0c04e39818Douglas Gregor // expected-error{{destructor cannot be declared 'static'}} \ 2142a552f8200ba5948661aee0106fce0c04e39818Douglas Gregor // expected-error{{destructor cannot have any parameters}} \ 2242a552f8200ba5948661aee0106fce0c04e39818Douglas Gregor // expected-error{{destructor cannot be variadic}} 2342a552f8200ba5948661aee0106fce0c04e39818Douglas Gregor}; 2442a552f8200ba5948661aee0106fce0c04e39818Douglas Gregor 256540180c2fd7a5b4963b22dc81461b73927499a8Chris Lattnerstruct D2 { 266540180c2fd7a5b4963b22dc81461b73927499a8Chris Lattner void ~D2() { } // \ 276540180c2fd7a5b4963b22dc81461b73927499a8Chris Lattner // expected-error{{destructor cannot have a return type}} 286540180c2fd7a5b4963b22dc81461b73927499a8Chris Lattner}; 296540180c2fd7a5b4963b22dc81461b73927499a8Chris Lattner 30eaaebc7cf10dc1a2016183a262ad3256bc468759Chris Lattner 3142a552f8200ba5948661aee0106fce0c04e39818Douglas Gregorstruct E; 3242a552f8200ba5948661aee0106fce0c04e39818Douglas Gregor 3342a552f8200ba5948661aee0106fce0c04e39818Douglas Gregortypedef E E_typedef; 3442a552f8200ba5948661aee0106fce0c04e39818Douglas Gregorstruct E { 35d0344a4a6182ad704881cbbaa21cca14913d2296Chris Lattner ~E_typedef(); // expected-error{{destructor cannot be declared using a typedef 'E_typedef' (aka 'struct E') of the class name}} 3642a552f8200ba5948661aee0106fce0c04e39818Douglas Gregor}; 3742a552f8200ba5948661aee0106fce0c04e39818Douglas Gregor 3842a552f8200ba5948661aee0106fce0c04e39818Douglas Gregorstruct F { 395f4a6829dc58cab2f76e2b98492859aa3b91e3f2Chris Lattner (~F)(); // expected-note {{previous declaration is here}} 405f4a6829dc58cab2f76e2b98492859aa3b91e3f2Chris Lattner ~F(); // expected-error {{destructor cannot be redeclared}} 4142a552f8200ba5948661aee0106fce0c04e39818Douglas Gregor}; 4242a552f8200ba5948661aee0106fce0c04e39818Douglas Gregor 43124b878dba5007df0a268ea128a6ad8dc5dd2c5eDouglas Gregor~; // expected-error {{expected a class name after '~' to name a destructor}} 4476ed9cb1d7398bb721cb9df67b3004c14dae8aa8Fariborz Jahanian~undef(); // expected-error {{expected the class name after '~' to name a destructor}} 45124b878dba5007df0a268ea128a6ad8dc5dd2c5eDouglas Gregor~operator+(int, int); // expected-error {{expected a class name after '~' to name a destructor}} 46c7ed9c60b8ee04b119e23441cae2cfec74536ba9Argyrios Kyrtzidis~F(){} // expected-error {{destructor must be a non-static member function}} 479d35097bc0fefb2f77638be513cac72d1c09d840Douglas Gregor 489d35097bc0fefb2f77638be513cac72d1c09d840Douglas Gregorstruct G { 499d35097bc0fefb2f77638be513cac72d1c09d840Douglas Gregor ~G(); 509d35097bc0fefb2f77638be513cac72d1c09d840Douglas Gregor}; 519d35097bc0fefb2f77638be513cac72d1c09d840Douglas Gregor 529d35097bc0fefb2f77638be513cac72d1c09d840Douglas GregorG::~G() { } 539d35097bc0fefb2f77638be513cac72d1c09d840Douglas Gregor 547786d1c5d752b90ff74093bd1ffda37daf0dbe6eAnders Carlsson// <rdar://problem/6841210> 557786d1c5d752b90ff74093bd1ffda37daf0dbe6eAnders Carlssonstruct H { 567786d1c5d752b90ff74093bd1ffda37daf0dbe6eAnders Carlsson ~H(void) { } 577786d1c5d752b90ff74093bd1ffda37daf0dbe6eAnders Carlsson}; 58c19f959d7fa5303f2fff5fa7a4968361cb7ef068Fariborz Jahanian 59c19f959d7fa5303f2fff5fa7a4968361cb7ef068Fariborz Jahanianstruct X {}; 60c19f959d7fa5303f2fff5fa7a4968361cb7ef068Fariborz Jahanian 61c19f959d7fa5303f2fff5fa7a4968361cb7ef068Fariborz Jahanianstruct Y { 62c19f959d7fa5303f2fff5fa7a4968361cb7ef068Fariborz Jahanian ~X(); // expected-error {{expected the class name after '~' to name the enclosing class}} 63c19f959d7fa5303f2fff5fa7a4968361cb7ef068Fariborz Jahanian}; 64333de066a0c018170142150d563f3acdb2ad80f2Douglas Gregor 65333de066a0c018170142150d563f3acdb2ad80f2Douglas Gregornamespace PR6421 { 66333de066a0c018170142150d563f3acdb2ad80f2Douglas Gregor class T; // expected-note{{forward declaration}} 67333de066a0c018170142150d563f3acdb2ad80f2Douglas Gregor 68333de066a0c018170142150d563f3acdb2ad80f2Douglas Gregor class QGenericArgument 69333de066a0c018170142150d563f3acdb2ad80f2Douglas Gregor { 70333de066a0c018170142150d563f3acdb2ad80f2Douglas Gregor template<typename U> 71333de066a0c018170142150d563f3acdb2ad80f2Douglas Gregor void foo(T t) // expected-error{{variable has incomplete type}} 72333de066a0c018170142150d563f3acdb2ad80f2Douglas Gregor { } 73333de066a0c018170142150d563f3acdb2ad80f2Douglas Gregor 74333de066a0c018170142150d563f3acdb2ad80f2Douglas Gregor void disconnect() 75333de066a0c018170142150d563f3acdb2ad80f2Douglas Gregor { 76333de066a0c018170142150d563f3acdb2ad80f2Douglas Gregor T* t; 77333de066a0c018170142150d563f3acdb2ad80f2Douglas Gregor bob<QGenericArgument>(t); // expected-error{{undeclared identifier 'bob'}} 78333de066a0c018170142150d563f3acdb2ad80f2Douglas Gregor } 79333de066a0c018170142150d563f3acdb2ad80f2Douglas Gregor }; 80333de066a0c018170142150d563f3acdb2ad80f2Douglas Gregor} 81