destructor.cpp revision 6540180c2fd7a5b4963b22dc81461b73927499a8
1d7d5f0223bd30dfd618762349c6209dd1d5ea3e6Daniel Dunbar// RUN: clang-cc -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 43c7ed9c60b8ee04b119e23441cae2cfec74536ba9Argyrios Kyrtzidis~; // expected-error {{expected class name}} 44c7ed9c60b8ee04b119e23441cae2cfec74536ba9Argyrios Kyrtzidis~undef(); // expected-error {{expected class name}} 45c7ed9c60b8ee04b119e23441cae2cfec74536ba9Argyrios Kyrtzidis~F(){} // expected-error {{destructor must be a non-static member function}} 469d35097bc0fefb2f77638be513cac72d1c09d840Douglas Gregor 479d35097bc0fefb2f77638be513cac72d1c09d840Douglas Gregorstruct G { 489d35097bc0fefb2f77638be513cac72d1c09d840Douglas Gregor ~G(); 499d35097bc0fefb2f77638be513cac72d1c09d840Douglas Gregor}; 509d35097bc0fefb2f77638be513cac72d1c09d840Douglas Gregor 519d35097bc0fefb2f77638be513cac72d1c09d840Douglas GregorG::~G() { } 529d35097bc0fefb2f77638be513cac72d1c09d840Douglas Gregor 53