1*89a1d03eSRichard // RUN: %check_clang_tidy %s fuchsia-virtual-inheritance %t 2*89a1d03eSRichard 3*89a1d03eSRichard class A { 4*89a1d03eSRichard public: A(int value)5*89a1d03eSRichard A(int value) : val(value) {} 6*89a1d03eSRichard do_A()7*89a1d03eSRichard int do_A() { return val; } 8*89a1d03eSRichard 9*89a1d03eSRichard private: 10*89a1d03eSRichard int val; 11*89a1d03eSRichard }; 12*89a1d03eSRichard 13*89a1d03eSRichard class B : public virtual A { 14*89a1d03eSRichard // CHECK-MESSAGES: [[@LINE-1]]:1: warning: direct virtual inheritance is disallowed [fuchsia-virtual-inheritance] 15*89a1d03eSRichard // CHECK-NEXT: class B : public virtual A { 16*89a1d03eSRichard public: B()17*89a1d03eSRichard B() : A(0) {} do_B()18*89a1d03eSRichard int do_B() { return 1 + do_A(); } 19*89a1d03eSRichard }; 20*89a1d03eSRichard 21*89a1d03eSRichard class C : public virtual A { 22*89a1d03eSRichard // CHECK-MESSAGES: [[@LINE-1]]:1: warning: direct virtual inheritance is disallowed [fuchsia-virtual-inheritance] 23*89a1d03eSRichard // CHECK-NEXT: class C : public virtual A { 24*89a1d03eSRichard public: C()25*89a1d03eSRichard C() : A(0) {} do_C()26*89a1d03eSRichard int do_C() { return 2 + do_A(); } 27*89a1d03eSRichard }; 28*89a1d03eSRichard 29*89a1d03eSRichard class D : public B, public C { 30*89a1d03eSRichard public: D(int value)31*89a1d03eSRichard D(int value) : A(value), B(), C() {} 32*89a1d03eSRichard do_D()33*89a1d03eSRichard int do_D() { return do_A() + do_B() + do_C(); } 34*89a1d03eSRichard }; 35*89a1d03eSRichard main()36*89a1d03eSRichardint main() { 37*89a1d03eSRichard A *a = new A(0); 38*89a1d03eSRichard B *b = new B(); 39*89a1d03eSRichard C *c = new C(); 40*89a1d03eSRichard D *d = new D(0); 41*89a1d03eSRichard return 0; 42*89a1d03eSRichard } 43