summaryrefslogtreecommitdiff
path: root/runtime/class_linker.cc
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/class_linker.cc')
-rw-r--r--runtime/class_linker.cc9
1 files changed, 2 insertions, 7 deletions
diff --git a/runtime/class_linker.cc b/runtime/class_linker.cc
index c2926ac263..1488cc6450 100644
--- a/runtime/class_linker.cc
+++ b/runtime/class_linker.cc
@@ -5808,7 +5808,7 @@ bool ClassLinker::InitializeClass(Thread* self,
if (num_static_fields > 0) {
const dex::ClassDef* dex_class_def = klass->GetClassDef();
CHECK(dex_class_def != nullptr);
- StackHandleScope<3> hs(self);
+ StackHandleScope<2> hs(self);
Handle<mirror::ClassLoader> class_loader(hs.NewHandle(klass->GetClassLoader()));
Handle<mirror::DexCache> dex_cache(hs.NewHandle(klass->GetDexCache()));
@@ -10348,18 +10348,13 @@ ObjPtr<mirror::MethodHandle> ClassLinker::ResolveMethodHandleForField(
ArtField* target_field =
ResolveField(method_handle.field_or_method_idx_, referrer, is_static);
if (LIKELY(target_field != nullptr)) {
+ DCHECK_EQ(is_static, target_field->IsStatic());
ObjPtr<mirror::Class> target_class = target_field->GetDeclaringClass();
ObjPtr<mirror::Class> referring_class = referrer->GetDeclaringClass();
if (UNLIKELY(!referring_class->CanAccessMember(target_class, target_field->GetAccessFlags()))) {
ThrowIllegalAccessErrorField(referring_class, target_field);
return nullptr;
}
- // TODO(b/364876321): ResolveField might return instance field when is_static is true and
- // vice versa.
- if (UNLIKELY(is_static != target_field->IsStatic())) {
- ThrowIncompatibleClassChangeErrorField(target_field, is_static, referrer);
- return nullptr;
- }
if (UNLIKELY(is_put && target_field->IsFinal())) {
ThrowIllegalAccessErrorField(referring_class, target_field);
return nullptr;