diff options
author | Sebastien Hertz <shertz@google.com> | 2014-04-22 17:11:08 +0200 |
---|---|---|
committer | Sebastien Hertz <shertz@google.com> | 2014-04-25 10:10:07 +0200 |
commit | 2ed76f95dd5a7edada82407a1853be803c9853a9 (patch) | |
tree | 1ff07ef9ef905e943480a808e69fd61a7645e667 | |
parent | ec83aacf669165eeeb1c30aee402001394982fd3 (diff) | |
download | art-2ed76f95dd5a7edada82407a1853be803c9853a9.zip art-2ed76f95dd5a7edada82407a1853be803c9853a9.tar.gz art-2ed76f95dd5a7edada82407a1853be803c9853a9.tar.bz2 |
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
-rw-r--r-- | runtime/verifier/method_verifier.cc | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/runtime/verifier/method_verifier.cc b/runtime/verifier/method_verifier.cc index 535c76d..4159c08 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; |