1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -std=c++11 -verify %s 2*67e74705SXin Li 3*67e74705SXin Li struct A { 4*67e74705SXin Li virtual void a(); // expected-note{{overridden virtual function is here}} 5*67e74705SXin Li virtual void b() = delete; // expected-note{{overridden virtual function is here}} 6*67e74705SXin Li }; 7*67e74705SXin Li 8*67e74705SXin Li struct B: A { 9*67e74705SXin Li virtual void a() = delete; // expected-error{{deleted function 'a' cannot override a non-deleted function}} 10*67e74705SXin Li virtual void b(); // expected-error{{non-deleted function 'b' cannot override a deleted function}} 11*67e74705SXin Li }; 12*67e74705SXin Li 13*67e74705SXin Li struct C: A { 14*67e74705SXin Li virtual void a(); 15*67e74705SXin Li virtual void b() = delete; 16*67e74705SXin Li }; 17*67e74705SXin Li 18*67e74705SXin Li struct E; 19*67e74705SXin Li struct F; 20*67e74705SXin Li struct G; 21*67e74705SXin Li struct H; 22*67e74705SXin Li struct D { 23*67e74705SXin Li virtual E &operator=(const E &); // expected-note {{here}} 24*67e74705SXin Li virtual F &operator=(const F &); 25*67e74705SXin Li virtual G &operator=(G&&); // expected-note {{here}} 26*67e74705SXin Li virtual H &operator=(H&&); // expected-note {{here}} 27*67e74705SXin Li friend struct F; 28*67e74705SXin Li 29*67e74705SXin Li private: 30*67e74705SXin Li D &operator=(const D&) = default; 31*67e74705SXin Li D &operator=(D&&) = default; 32*67e74705SXin Li virtual ~D(); // expected-note 2{{here}} 33*67e74705SXin Li }; 34*67e74705SXin Li struct E : D {}; // expected-error {{deleted function '~E' cannot override a non-deleted function}} \ 35*67e74705SXin Li // expected-error {{deleted function 'operator=' cannot override a non-deleted function}} 36*67e74705SXin Li struct F : D {}; 37*67e74705SXin Li struct G : D {}; // expected-error {{deleted function '~G' cannot override a non-deleted function}} 38*67e74705SXin Li // expected-error@-1 {{deleted function 'operator=' cannot override a non-deleted function}} 39*67e74705SXin Li struct H : D { 40*67e74705SXin Li H &operator=(H&&) = default; // expected-error {{deleted function 'operator=' cannot override a non-deleted function}} 41*67e74705SXin Li ~H(); 42*67e74705SXin Li }; 43