mirror of https://github.com/roytam1/UXP
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
175 lines
2.9 KiB
175 lines
2.9 KiB
#define MOZ_REQUIRED_BASE_METHOD __attribute__((annotate("moz_required_base_method"))) |
|
|
|
class Base { |
|
public: |
|
virtual void fo() MOZ_REQUIRED_BASE_METHOD { |
|
} |
|
|
|
virtual int foRet() MOZ_REQUIRED_BASE_METHOD { |
|
return 0; |
|
} |
|
}; |
|
|
|
class BaseOne : public Base { |
|
public: |
|
virtual void fo() MOZ_REQUIRED_BASE_METHOD { |
|
Base::fo(); |
|
} |
|
}; |
|
|
|
class BaseSecond : public Base { |
|
public: |
|
virtual void fo() MOZ_REQUIRED_BASE_METHOD { |
|
Base::fo(); |
|
} |
|
}; |
|
|
|
class Deriv : public BaseOne, public BaseSecond { |
|
public: |
|
void func() { |
|
} |
|
|
|
void fo() { |
|
func(); |
|
BaseSecond::fo(); |
|
BaseOne::fo(); |
|
} |
|
}; |
|
|
|
class DerivSimple : public Base { |
|
public: |
|
void fo() { // expected-error {{Method Base::fo must be called in all overrides, but is not called in this override defined for class DerivSimple}} |
|
} |
|
}; |
|
|
|
class BaseVirtualOne : public virtual Base { |
|
}; |
|
|
|
class BaseVirtualSecond: public virtual Base { |
|
}; |
|
|
|
class DerivVirtual : public BaseVirtualOne, public BaseVirtualSecond { |
|
public: |
|
void fo() { |
|
Base::fo(); |
|
} |
|
}; |
|
|
|
class DerivIf : public Base { |
|
public: |
|
void fo() { |
|
if (true) { |
|
Base::fo(); |
|
} |
|
} |
|
}; |
|
|
|
class DerivIfElse : public Base { |
|
public: |
|
void fo() { |
|
if (true) { |
|
Base::fo(); |
|
} else { |
|
Base::fo(); |
|
} |
|
} |
|
}; |
|
|
|
class DerivFor : public Base { |
|
public: |
|
void fo() { |
|
for (int i = 0; i < 10; i++) { |
|
Base::fo(); |
|
} |
|
} |
|
}; |
|
|
|
class DerivDoWhile : public Base { |
|
public: |
|
void fo() { |
|
do { |
|
Base::fo(); |
|
} while(false); |
|
} |
|
}; |
|
|
|
class DerivWhile : public Base { |
|
public: |
|
void fo() { |
|
while (true) { |
|
Base::fo(); |
|
break; |
|
} |
|
} |
|
}; |
|
|
|
class DerivAssignment : public Base { |
|
public: |
|
int foRet() { |
|
return foRet(); |
|
} |
|
}; |
|
|
|
class BaseOperator { |
|
private: |
|
int value; |
|
public: |
|
BaseOperator() : value(0) { |
|
} |
|
virtual BaseOperator& operator++() MOZ_REQUIRED_BASE_METHOD { |
|
value++; |
|
return *this; |
|
} |
|
}; |
|
|
|
class DerivOperatorErr : public BaseOperator { |
|
private: |
|
int value; |
|
public: |
|
DerivOperatorErr() : value(0) { |
|
} |
|
DerivOperatorErr& operator++() { // expected-error {{Method BaseOperator::operator++ must be called in all overrides, but is not called in this override defined for class DerivOperatorErr}} |
|
value++; |
|
return *this; |
|
} |
|
}; |
|
|
|
class DerivOperator : public BaseOperator { |
|
private: |
|
int value; |
|
public: |
|
DerivOperator() : value(0) { |
|
} |
|
DerivOperator& operator++() { |
|
BaseOperator::operator++(); |
|
value++; |
|
return *this; |
|
} |
|
}; |
|
|
|
class DerivPrime : public Base { |
|
public: |
|
void fo() { |
|
Base::fo(); |
|
} |
|
}; |
|
|
|
class DerivSecondErr : public DerivPrime { |
|
public: |
|
void fo() { // expected-error {{Method Base::fo must be called in all overrides, but is not called in this override defined for class DerivSecondErr}} |
|
} |
|
}; |
|
|
|
class DerivSecond : public DerivPrime { |
|
public: |
|
void fo() { |
|
Base::fo(); |
|
} |
|
}; |
|
|
|
class DerivSecondIndirect : public DerivPrime { |
|
public: |
|
void fo() { |
|
DerivPrime::fo(); |
|
} |
|
};
|
|
|