From 44fd0e5e9cc384783398b1f3ad85937aa856651c Mon Sep 17 00:00:00 2001 From: Nicolas Geoffray Date: Wed, 16 Mar 2016 15:16:06 +0000 Subject: Fix inliner crash related to type propagation. - Do not agressively try to resolve a return type. - Deal with unresolved return type. bug:25492619 Change-Id: Idc9c96a0b376fe5ee86b411c02ce7078c7f48c84 --- compiler/optimizing/inliner.cc | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'compiler/optimizing/inliner.cc') diff --git a/compiler/optimizing/inliner.cc b/compiler/optimizing/inliner.cc index d861e39c8b..fe528a0007 100644 --- a/compiler/optimizing/inliner.cc +++ b/compiler/optimizing/inliner.cc @@ -1279,10 +1279,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) { -- cgit v1.2.3-59-g8ed1b