VarHandle: add StaticFieldVarHandle class
Add StaticFieldVarHandle class to keep a live reference to the
declaring class for the target field of VarHandle's targeting static
fields.
Bug: 191980149
Test: art/test.py --host -r -g
Change-Id: I3a1cada6591d146b8f9fc9066105e3b617290185
diff --git a/runtime/gc/heap.cc b/runtime/gc/heap.cc
index 4676ded..21e9c31 100644
--- a/runtime/gc/heap.cc
+++ b/runtime/gc/heap.cc
@@ -4507,6 +4507,8 @@
down_cast<mirror::Field*>(ref)->VisitTarget(visit);
} else if (art::GetClassRoot<art::mirror::MethodHandle>()->IsAssignableFrom(klass)) {
down_cast<mirror::MethodHandle*>(ref)->VisitTarget(visit);
+ } else if (art::GetClassRoot<art::mirror::StaticFieldVarHandle>()->IsAssignableFrom(klass)) {
+ down_cast<mirror::StaticFieldVarHandle*>(ref)->VisitTarget(visit);
} else if (art::GetClassRoot<art::mirror::FieldVarHandle>()->IsAssignableFrom(klass)) {
down_cast<mirror::FieldVarHandle*>(ref)->VisitTarget(visit);
} else if (art::GetClassRoot<art::mirror::DexCache>()->IsAssignableFrom(klass)) {