brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.2 KiB · b04de21 Raw
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