// Minimal mock of the IPC base class. namespace mozilla { namespace ipc { class IProtocol {
public:
virtual ~IProtocol() = default;
};
} // namespace ipc
} // namespace mozilla
// Simulates an IPC actor class (inherits from IProtocol). class MockCDMParent : public mozilla::ipc::IProtocol {
public: void RecvDecryptFailed(unsigned aStatus) {
ScopedEnum e = static_cast<ScopedEnum>(aStatus); // expected-error {{static_cast from builtin type 'unsigned int' to enum type 'ScopedEnum' in an IPC actor method}} expected-note {{consider using the enum type directly}}
}
void RecvOnRejectPromise(unsigned aException) {
UnscopedEnum e = static_cast<UnscopedEnum>(aException); // expected-error {{static_cast from builtin type 'unsigned int' to enum type 'UnscopedEnum' in an IPC actor method}} expected-note {{consider using the enum type directly}}
}
void RecvDecoderInit(unsigned aStatus) {
TypedEnum e = static_cast<TypedEnum>(aStatus); // expected-error {{static_cast from builtin type 'unsigned int' to enum type 'TypedEnum' in an IPC actor method}} expected-note {{consider using the enum type directly}}
}
void RecvCStyleCast(unsigned aStatus) {
ScopedEnum e = (ScopedEnum)aStatus; // expected-error {{C-style cast from builtin type 'unsigned int' to enum type 'ScopedEnum' in an IPC actor method}} expected-note {{consider using the enum type directly}}
}
void RecvFunctionalCast(unsigned aStatus) {
UnscopedEnum e = UnscopedEnum(aStatus); // expected-error {{functional cast from builtin type 'unsigned int' to enum type 'UnscopedEnum' in an IPC actor method}} expected-note {{consider using the enum type directly}}
}
// Casts inside a lambda body (e.g. a promise callback) must also be caught. void RecvInLambda(unsigned aStatus) { auto callback = [](unsigned aValue) {
ScopedEnum e = static_cast<ScopedEnum>(aValue); // expected-error {{static_cast from builtin type 'unsigned int' to enum type 'ScopedEnum' in an IPC actor method}} expected-note {{consider using the enum type directly}} return e;
};
callback(aStatus);
}
};
// Simulates a non-IPC class — no warnings expected. class RegularClass {
public: void doSomething(unsigned aValue) {
ScopedEnum e1 = static_cast<ScopedEnum>(aValue);
ScopedEnum e2 = (ScopedEnum)aValue;
UnscopedEnum e3 = UnscopedEnum(aValue);
}
};
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.