1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify %s 2*67e74705SXin Li 3*67e74705SXin Li struct A { 4*67e74705SXin Li virtual void f() = 0; // expected-note{{unimplemented pure virtual method}} 5*67e74705SXin Li }; 6*67e74705SXin Li 7*67e74705SXin Li struct B : A { 8*67e74705SXin Li virtual void f(); 9*67e74705SXin Li }; 10*67e74705SXin Li 11*67e74705SXin Li struct C : B { 12*67e74705SXin Li virtual void f() = 0; // expected-note 2{{unimplemented pure virtual method}} 13*67e74705SXin Li }; 14*67e74705SXin Li 15*67e74705SXin Li struct D : C { 16*67e74705SXin Li }; 17*67e74705SXin Li test()18*67e74705SXin Livoid test() { 19*67e74705SXin Li (void)new A; // expected-error{{abstract class}} 20*67e74705SXin Li (void)new B; 21*67e74705SXin Li (void)new C; // expected-error{{abstract class}} 22*67e74705SXin Li (void)new D; // expected-error{{abstract class}} 23*67e74705SXin Li } 24