diff options
| author | 2015-10-02 17:14:53 +0100 | |
|---|---|---|
| committer | 2015-10-02 17:14:53 +0100 | |
| commit | 470d54fcd6be1aba56a4dc21f8b437168b779867 (patch) | |
| tree | 623f0abf83d943cafd882b053ac7658c948b7b33 /runtime/entrypoints/entrypoint_utils-inl.h | |
| parent | cc245eab2148547f9df37ddc5f767656dc033b81 (diff) | |
Change IllegalAccess/IncompatibleClassChange order.
This is to have the same order as ClassLinker::ResolveMethod. In
a JIT environment, hitting the dex cache would not make it to the
expected IllegalAccessError and we would throw the wrong exception.
Change-Id: Ifc70f1a93260a24e952fa7a659be1be5bdc666de
Diffstat (limited to 'runtime/entrypoints/entrypoint_utils-inl.h')
| -rw-r--r-- | runtime/entrypoints/entrypoint_utils-inl.h | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/runtime/entrypoints/entrypoint_utils-inl.h b/runtime/entrypoints/entrypoint_utils-inl.h index 8ae0b0796f..f66628d7cb 100644 --- a/runtime/entrypoints/entrypoint_utils-inl.h +++ b/runtime/entrypoints/entrypoint_utils-inl.h @@ -411,12 +411,6 @@ inline ArtMethod* FindMethodFromCode(uint32_t method_idx, mirror::Object** this_ ThrowNullPointerExceptionForMethodAccess(method_idx, type); return nullptr; // Failure. } else if (access_check) { - // Incompatible class change should have been handled in resolve method. - if (UNLIKELY(resolved_method->CheckIncompatibleClassChange(type))) { - ThrowIncompatibleClassChangeError(type, resolved_method->GetInvokeType(), resolved_method, - referrer); - return nullptr; // Failure. - } mirror::Class* methods_class = resolved_method->GetDeclaringClass(); mirror::Class* referring_class = referrer->GetDeclaringClass(); bool can_access_resolved_method = @@ -426,6 +420,12 @@ inline ArtMethod* FindMethodFromCode(uint32_t method_idx, mirror::Object** this_ DCHECK(self->IsExceptionPending()); // Throw exception and unwind. return nullptr; // Failure. } + // Incompatible class change should have been handled in resolve method. + if (UNLIKELY(resolved_method->CheckIncompatibleClassChange(type))) { + ThrowIncompatibleClassChangeError(type, resolved_method->GetInvokeType(), resolved_method, + referrer); + return nullptr; // Failure. + } } switch (type) { case kStatic: |