diff options
Diffstat (limited to 'compiler/optimizing/inliner.cc')
| -rw-r--r-- | compiler/optimizing/inliner.cc | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/compiler/optimizing/inliner.cc b/compiler/optimizing/inliner.cc index 80835532fe..d7bb928e43 100644 --- a/compiler/optimizing/inliner.cc +++ b/compiler/optimizing/inliner.cc @@ -1283,10 +1283,14 @@ void HInliner::FixUpReturnReferenceType(HInvoke* invoke_instruction, // some functionality from the reference type propagation. DCHECK(return_replacement->IsPhi()); size_t pointer_size = Runtime::Current()->GetClassLinker()->GetImagePointerSize(); - ReferenceTypeInfo::TypeHandle return_handle = - handles_->NewHandle(resolved_method->GetReturnType(true /* resolve */, pointer_size)); - return_replacement->SetReferenceTypeInfo(ReferenceTypeInfo::Create( - return_handle, return_handle->CannotBeAssignedFromOtherTypes() /* is_exact */)); + mirror::Class* cls = resolved_method->GetReturnType(false /* resolve */, pointer_size); + if (cls != nullptr) { + ReferenceTypeInfo::TypeHandle return_handle= handles_->NewHandle(cls); + return_replacement->SetReferenceTypeInfo(ReferenceTypeInfo::Create( + return_handle, return_handle->CannotBeAssignedFromOtherTypes() /* is_exact */)); + } else { + return_replacement->SetReferenceTypeInfo(graph_->GetInexactObjectRti()); + } } if (do_rtp) { |