TestOverrideBaseCallAnnotation.cpp (964B)
1 #define MOZ_REQUIRED_BASE_METHOD __attribute__((annotate("moz_required_base_method"))) 2 3 class Base { 4 public: 5 virtual void fo() MOZ_REQUIRED_BASE_METHOD { 6 } 7 }; 8 9 class BaseNonVirtual { 10 public: 11 void fo() MOZ_REQUIRED_BASE_METHOD { // expected-error {{MOZ_REQUIRED_BASE_METHOD can be used only on virtual methods}} 12 } 13 }; 14 15 class Deriv : public BaseNonVirtual { 16 public: 17 virtual void fo() MOZ_REQUIRED_BASE_METHOD { 18 } 19 }; 20 21 class DerivVirtual : public Base { 22 public: 23 void fo() MOZ_REQUIRED_BASE_METHOD { 24 Base::fo(); 25 } 26 }; 27 28 class BaseOperator { 29 public: 30 BaseOperator& operator++() MOZ_REQUIRED_BASE_METHOD { // expected-error {{MOZ_REQUIRED_BASE_METHOD can be used only on virtual methods}} 31 return *this; 32 } 33 }; 34 35 class DerivOperator : public BaseOperator { 36 public: 37 virtual DerivOperator& operator++() { 38 return *this; 39 } 40 }; 41 42 class DerivPrimeOperator : public DerivOperator { 43 public: 44 DerivPrimeOperator& operator++() { 45 return *this; 46 } 47 };