}
};
-class ConcreteCallbackVH : public CallbackVH {
+class ConcreteCallbackVH final : public CallbackVH {
public:
ConcreteCallbackVH(Value *V) : CallbackVH(V) {}
};
}
TEST_F(ValueHandle, CallbackVH_CallbackOnDeletion) {
- class RecordingVH : public CallbackVH {
+ class RecordingVH final : public CallbackVH {
public:
int DeletedCalls;
int AURWCalls;
}
TEST_F(ValueHandle, CallbackVH_CallbackOnRAUW) {
- class RecordingVH : public CallbackVH {
+ class RecordingVH final : public CallbackVH {
public:
int DeletedCalls;
Value *AURWArgument;
}
TEST_F(ValueHandle, CallbackVH_DeletionCanRAUW) {
- class RecoveringVH : public CallbackVH {
+ class RecoveringVH final : public CallbackVH {
public:
int DeletedCalls;
Value *AURWArgument;
// arrangement of other VHs so that the bad behavior would be
// triggered in whichever order callbacks run.
- class DestroyingVH : public CallbackVH {
+ class DestroyingVH final : public CallbackVH {
public:
std::unique_ptr<WeakVH> ToClear[2];
DestroyingVH(Value *V) {
// Value deletion, the CallbackVH should get a chance to do so
// before the AssertingVHs assert.
- class ClearingVH : public CallbackVH {
+ class ClearingVH final : public CallbackVH {
public:
AssertingVH<Value> *ToClear[2];
ClearingVH(Value *V,