81 lines · cpp
1// RUN: %clang_cc1 -fsyntax-only -verify %s2 3namespace PR6631 {4 struct A { 5 virtual void f() = 0;6 };7 8 struct B : virtual A { };9 10 struct C : virtual A { 11 virtual void f();12 };13 14 struct D : public B, public C { 15 virtual void f();16 };17 18 void f() {19 (void)new D; // okay20 }21}22 23// Check cases where we have a virtual function that is pure in one24// subobject but not pure in another subobject.25namespace PartlyPure {26 struct A { 27 virtual void f() = 0; // expected-note{{unimplemented pure virtual method}}28 };29 30 struct B : A {31 virtual void f();32 };33 34 struct C : virtual A { };35 36 struct D : B, C { };37 38 void f() {39 (void) new D; // expected-error{{abstract class}}40 }41}42 43namespace NonPureAlongOnePath {44 struct A { 45 virtual void f() = 0;46 };47 48 struct B : virtual A {49 virtual void f();50 };51 52 struct C : virtual A { };53 54 struct D : B, C { };55 56 void f() {57 (void) new D; // okay58 } 59}60 61namespace NonPureAlongOnePath2 {62 struct Aprime { 63 virtual void f() = 0;64 };65 66 struct A : Aprime {67 };68 69 struct B : virtual A {70 virtual void f();71 };72 73 struct C : virtual A { };74 75 struct D : B, C { };76 77 void f() {78 (void) new D; // okay79 } 80}81