// RUN: %clang_cc1 -fsyntax-only -verify %s
namespacePR6631{structA{virtualvoidf()=0;};structB:virtualA{};structC:virtualA{virtualvoidf();};structD:publicB,publicC{virtualvoidf();};voidf(){(void)new D;// okay
}}// Check cases where we have a virtual function that is pure in one
// subobject but not pure in another subobject.
namespacePartlyPure{structA{virtualvoidf()=0;// expected-note{{unimplemented pure virtual method}}
};structB:A{virtualvoidf();};structC:virtualA{};structD:B,C{};voidf(){(void)new D;// expected-error{{abstract class}}
}}namespaceNonPureAlongOnePath{structA{virtualvoidf()=0;};structB:virtualA{virtualvoidf();};structC:virtualA{};structD:B,C{};voidf(){(void)new D;// okay
}}namespaceNonPureAlongOnePath2{structAprime{virtualvoidf()=0;};structA:Aprime{};structB:virtualA{virtualvoidf();};structC:virtualA{};structD:B,C{};voidf(){(void)new D;// okay
}}