diff options
| author | 2016-03-16 16:58:22 +0000 | |
|---|---|---|
| committer | 2016-03-16 16:58:22 +0000 | |
| commit | 8b5e04b3573f430dc0475c17f4b3c6ada8aaccf5 (patch) | |
| tree | 584efbc108d09817c62e45dbf5638a50bce58e00 /compiler/optimizing/inliner.cc | |
| parent | 713c519db15aaa8d6f33b744fd28adddb97a07c2 (diff) | |
| parent | 44fd0e5e9cc384783398b1f3ad85937aa856651c (diff) | |
Merge "Fix inliner crash related to type propagation."
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) { |