From 2ed76f95dd5a7edada82407a1853be803c9853a9 Mon Sep 17 00:00:00 2001 From: Sebastien Hertz Date: Tue, 22 Apr 2014 17:11:08 +0200 Subject: [PATCH] Resolve method's argument reference types Using ResolveClassAndCheckAccess allows to resolve reference types and check we have access to these types too. This also prevents from getting unresolved reference types, which has been observed during deoptimization. Bug: 13464407 Change-Id: I4c02fdff191c195f34502a4d4a20357419982eb1 --- runtime/verifier/method_verifier.cc | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/runtime/verifier/method_verifier.cc b/runtime/verifier/method_verifier.cc index 535c76dd1..4159c0848 100644 --- a/runtime/verifier/method_verifier.cc +++ b/runtime/verifier/method_verifier.cc @@ -1176,8 +1176,11 @@ bool MethodVerifier::SetTypesFromSignature() { // it's effectively considered initialized the instant we reach here (in the sense that we // can return without doing anything or call virtual methods). { - const RegType& reg_type = reg_types_.FromDescriptor(class_loader_->get(), descriptor, - false); + const RegType& reg_type = ResolveClassAndCheckAccess(iterator.GetTypeIdx()); + if (!reg_type.IsNonZeroReferenceTypes()) { + DCHECK(HasFailures()); + return false; + } reg_line->SetRegisterType(arg_start + cur_arg, reg_type); } break; -- 2.11.0