// RUN: %clang_cc1 -fsyntax-only -verify %s struct A { virtual ~A(); }; struct B : A { // expected-error {{no suitable member 'operator delete' in 'B'}} B() { } // expected-note {{implicit default destructor for 'struct B' first required here}} void operator delete(void *, int); // expected-note {{'operator delete' declared here}} }; struct C : A { // expected-error {{no suitable member 'operator delete' in 'C'}} void operator delete(void *, int); // expected-note {{'operator delete' declared here}} }; void f() { // new B should mark the constructor as used, which then marks // all the virtual members as used, because B has no key function. (void)new B; // Same here, except that C has an implicit constructor. (void)new C; // expected-note {{implicit default destructor for 'struct C' first required here}} }