diff options
Diffstat (limited to 'runtime/mirror/class-alloc-inl.h')
| -rw-r--r-- | runtime/mirror/class-alloc-inl.h | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/runtime/mirror/class-alloc-inl.h b/runtime/mirror/class-alloc-inl.h index 28612443be..5627b4956e 100644 --- a/runtime/mirror/class-alloc-inl.h +++ b/runtime/mirror/class-alloc-inl.h @@ -46,13 +46,19 @@ inline void Class::CheckObjectAlloc() { DCHECK_GE(this->object_size_, sizeof(Object)); } -template<bool kIsInstrumented, bool kCheckAddFinalizer> +template<bool kIsInstrumented, Class::AddFinalizer kAddFinalizer, bool kCheckAddFinalizer> inline ObjPtr<Object> Class::Alloc(Thread* self, gc::AllocatorType allocator_type) { CheckObjectAlloc(); gc::Heap* heap = Runtime::Current()->GetHeap(); - const bool add_finalizer = kCheckAddFinalizer && IsFinalizable(); - if (!kCheckAddFinalizer) { - DCHECK(!IsFinalizable()); + bool add_finalizer; + switch (kAddFinalizer) { + case Class::AddFinalizer::kUseClassTag: + add_finalizer = IsFinalizable(); + break; + case Class::AddFinalizer::kNoAddFinalizer: + add_finalizer = false; + DCHECK(!kCheckAddFinalizer || !IsFinalizable()); + break; } // Note that the `this` pointer may be invalidated after the allocation. ObjPtr<Object> obj = |