TestNoDuplicateRefCntMember.cpp (1350B)
1 class C1 {}; 2 3 class RC1 { 4 public: 5 virtual void AddRef(); 6 virtual void Release(); 7 8 private: 9 int mRefCnt; // expected-note 2 {{Superclass 'RC1' also has an mRefCnt member}} expected-note 3 {{Superclass 'RC1' has an mRefCnt member}} 10 }; 11 12 class RC2 : public RC1 { // expected-error {{Refcounted record 'RC2' has multiple mRefCnt members}} 13 public: 14 virtual void AddRef(); 15 virtual void Release(); 16 17 private: 18 int mRefCnt; // expected-note {{Consider using the _INHERITED macros for AddRef and Release here}} 19 }; 20 21 class C2 : public RC1 {}; 22 23 class RC3 : public RC1 {}; 24 25 class RC4 : public RC3, public C2 {}; // expected-error {{Refcounted record 'RC4' has multiple superclasses with mRefCnt members}} 26 27 class RC5 : public RC1 {}; 28 29 class RC6 : public C1, public RC5 { // expected-error {{Refcounted record 'RC6' has multiple mRefCnt members}} 30 public: 31 virtual void AddRef(); 32 virtual void Release(); 33 34 private: 35 int mRefCnt; // expected-note {{Consider using the _INHERITED macros for AddRef and Release here}} 36 }; 37 38 class Predecl; 39 40 class OtherRC { 41 public: 42 virtual void AddRef(); 43 virtual void Release(); 44 45 private: 46 int mRefCnt; // expected-note {{Superclass 'OtherRC' has an mRefCnt member}} 47 }; 48 49 class MultRCSuper : public RC1, public OtherRC {}; // expected-error {{Refcounted record 'MultRCSuper' has multiple superclasses with mRefCnt members}}