tor-browser

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

TestOverrideBaseCall.cpp (2921B)


      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  virtual int foRet() MOZ_REQUIRED_BASE_METHOD {
      9    return 0;
     10  }
     11 };
     12 
     13 class BaseOne : public Base {
     14 public:
     15  virtual void fo() MOZ_REQUIRED_BASE_METHOD {
     16    Base::fo();
     17  }
     18 };
     19 
     20 class BaseSecond : public Base {
     21 public:
     22  virtual void fo() MOZ_REQUIRED_BASE_METHOD {
     23   Base::fo();
     24  }
     25 };
     26 
     27 class Deriv : public BaseOne, public BaseSecond {
     28 public:
     29  void func() {
     30  }
     31 
     32  void fo() {
     33    func();
     34    BaseSecond::fo();
     35    BaseOne::fo();
     36  }
     37 };
     38 
     39 class DerivSimple : public Base {
     40 public:
     41  void fo() { // expected-error {{Method Base::fo must be called in all overrides, but is not called in this override defined for class DerivSimple}}
     42  }
     43 };
     44 
     45 class BaseVirtualOne : public virtual Base {
     46 };
     47 
     48 class BaseVirtualSecond: public virtual Base {
     49 };
     50 
     51 class DerivVirtual : public BaseVirtualOne, public BaseVirtualSecond {
     52 public:
     53  void fo() {
     54    Base::fo();
     55  }
     56 };
     57 
     58 class DerivIf : public Base {
     59 public:
     60  void fo() {
     61    if (true) {
     62      Base::fo();
     63    }
     64  }
     65 };
     66 
     67 class DerivIfElse : public Base {
     68 public:
     69  void fo() {
     70    if (true) {
     71      Base::fo();
     72    } else {
     73      Base::fo();
     74    }
     75  }
     76 };
     77 
     78 class DerivFor : public Base {
     79 public:
     80  void fo() {
     81    for (int i = 0; i < 10; i++) {
     82      Base::fo();
     83    }
     84  }
     85 };
     86 
     87 class DerivDoWhile : public Base {
     88 public:
     89  void fo() {
     90    do {
     91      Base::fo();
     92    } while(false);
     93  }
     94 };
     95 
     96 class DerivWhile : public Base {
     97 public:
     98  void fo() {
     99    while (true) {
    100      Base::fo();
    101      break;
    102    }
    103  }
    104 };
    105 
    106 class DerivAssignment : public Base {
    107 public:
    108  int foRet() {
    109    return foRet();
    110  }
    111 };
    112 
    113 class BaseOperator {
    114 private:
    115  int value;
    116 public:
    117  BaseOperator() : value(0) {
    118  }
    119  virtual BaseOperator& operator++() MOZ_REQUIRED_BASE_METHOD {
    120    value++;
    121    return *this;
    122  }
    123 };
    124 
    125 class DerivOperatorErr : public BaseOperator {
    126 private:
    127  int value;
    128 public:
    129  DerivOperatorErr() : value(0) {
    130  }
    131  DerivOperatorErr& operator++() { // expected-error {{Method BaseOperator::operator++ must be called in all overrides, but is not called in this override defined for class DerivOperatorErr}}
    132    value++;
    133    return *this;
    134  }
    135 };
    136 
    137 class DerivOperator : public BaseOperator {
    138 private:
    139  int value;
    140 public:
    141  DerivOperator() : value(0) {
    142  }
    143  DerivOperator& operator++() {
    144    BaseOperator::operator++();
    145    value++;
    146    return *this;
    147  }
    148 };
    149 
    150 class DerivPrime : public Base {
    151 public:
    152  void fo() {
    153    Base::fo();
    154  }
    155 };
    156 
    157 class DerivSecondErr : public DerivPrime {
    158 public:
    159  void fo() { // expected-error {{Method Base::fo must be called in all overrides, but is not called in this override defined for class DerivSecondErr}}
    160  }
    161 };
    162 
    163 class DerivSecond : public DerivPrime {
    164 public:
    165  void fo() {
    166    Base::fo();
    167  }
    168 };
    169 
    170 class DerivSecondIndirect : public DerivPrime {
    171 public:
    172  void fo() {
    173    DerivPrime::fo();
    174  }
    175 };