tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

TestMustOverride.cpp (2441B)


      1 #define MOZ_MUST_OVERRIDE __attribute__((annotate("moz_must_override")))
      2 // Ignore warnings not related to static analysis here
      3 #pragma GCC diagnostic ignored "-Woverloaded-virtual"
      4 
      5 struct S {
      6  virtual void f() MOZ_MUST_OVERRIDE; // expected-note {{function to override is here}}
      7  virtual void g() MOZ_MUST_OVERRIDE;
      8  virtual void h() MOZ_MUST_OVERRIDE; // expected-note {{function to override is here}}
      9 };
     10 struct C : S { // expected-error {{'C' must override 'f'}} expected-error {{'C' must override 'h'}}
     11  virtual void g() MOZ_MUST_OVERRIDE; // expected-note {{function to override is here}}
     12  virtual void h(int);
     13  void q() MOZ_MUST_OVERRIDE; // expected-note {{function to override is here}}
     14 };
     15 struct D : C { // expected-error {{'D' must override 'g'}} expected-error {{'D' must override 'q'}}
     16  virtual void f();
     17 };
     18 
     19 struct Base {
     20  virtual void VirtMethod() MOZ_MUST_OVERRIDE; // expected-note {{function to override is here}}
     21  void NonVirtMethod() MOZ_MUST_OVERRIDE; // expected-note {{function to override is here}}
     22  static void StaticMethod() MOZ_MUST_OVERRIDE;
     23 };
     24 
     25 struct DoesNotPropagate : Base {
     26  virtual void VirtMethod();
     27  void NonVirtMethod();
     28  static void StaticMethod();
     29 };
     30 
     31 struct Final : DoesNotPropagate { };
     32 
     33 struct Propagates : Base {
     34  virtual void VirtMethod() MOZ_MUST_OVERRIDE; // expected-note {{function to override is here}}
     35  void NonVirtMethod() MOZ_MUST_OVERRIDE; // expected-note {{function to override is here}}
     36  static void StaticMethod() MOZ_MUST_OVERRIDE; // expected-note {{function to override is here}}
     37 };
     38 
     39 struct FailsFinal : Propagates { }; // expected-error {{'FailsFinal' must override 'VirtMethod'}} expected-error {{'FailsFinal' must override 'NonVirtMethod'}} expected-error {{'FailsFinal' must override 'StaticMethod'}}
     40 
     41 struct WrongOverload : Base { // expected-error {{'WrongOverload' must override 'VirtMethod'}} expected-error {{'WrongOverload' must override 'NonVirtMethod'}}
     42  virtual void VirtMethod() const;
     43  void NonVirtMethod(int param);
     44  static void StaticMethod();
     45 };
     46 
     47 namespace A { namespace B { namespace C {
     48  struct Param {};
     49  struct Base {
     50    void f(Param p) MOZ_MUST_OVERRIDE; // expected-note {{function to override is here}}
     51  };
     52 }}}
     53 
     54 struct Param {};
     55 
     56 struct Derived : A::B::C::Base {
     57  typedef A::B::C::Param Typedef;
     58  void f(Typedef t);
     59 };
     60 
     61 struct BadDerived : A::B::C::Base { // expected-error {{'BadDerived' must override 'f'}}
     62  void f(Param p);
     63 };