1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -triple %itanium_abi_triple -verify %s 2*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -triple %ms_abi_triple -DMSABI -verify %s 3*67e74705SXin Li struct A { 4*67e74705SXin Li virtual ~A(); 5*67e74705SXin Li }; 6*67e74705SXin Li 7*67e74705SXin Li struct B : A { // expected-error {{no suitable member 'operator delete' in 'B'}} 8*67e74705SXin Li virtual void f(); 9*67e74705SXin Li 10*67e74705SXin Li void operator delete (void *, int); // expected-note {{'operator delete' declared here}} 11*67e74705SXin Li }; 12*67e74705SXin Li 13*67e74705SXin Li #ifdef MSABI 14*67e74705SXin Li B b; // expected-note {{implicit destructor for 'B' first required here}} 15*67e74705SXin Li #else f()16*67e74705SXin Livoid B::f() { // expected-note {{implicit destructor for 'B' first required here}} 17*67e74705SXin Li } 18*67e74705SXin Li #endif 19*67e74705SXin Li 20*67e74705SXin Li struct C : A { // expected-error {{no suitable member 'operator delete' in 'C'}} 21*67e74705SXin Li C(); 22*67e74705SXin Li void operator delete(void *, int); // expected-note {{'operator delete' declared here}} 23*67e74705SXin Li }; 24*67e74705SXin Li C()25*67e74705SXin LiC::C() { } // expected-note {{implicit destructor for 'C' first required here}} 26*67e74705SXin Li 27*67e74705SXin Li struct D : A { // expected-error {{no suitable member 'operator delete' in 'D'}} 28*67e74705SXin Li void operator delete(void *, int); // expected-note {{'operator delete' declared here}} 29*67e74705SXin Li }; 30*67e74705SXin Li f()31*67e74705SXin Livoid f() { 32*67e74705SXin Li new D; // expected-note {{implicit destructor for 'D' first required here}} 33*67e74705SXin Li } 34