Use handle in one case that spans a gc-point.

Bug: 16689428

(cherry picked from commit 38eecb0f4288a374c9b0b4b4df8793eb5fc6697c)

Change-Id: Id4a1bde9012e4dd333493e46997c200537c9cf55
diff --git a/runtime/class_linker.cc b/runtime/class_linker.cc
index 4362b82..aec2ebd 100644
--- a/runtime/class_linker.cc
+++ b/runtime/class_linker.cc
@@ -4144,9 +4144,9 @@
         klass->GetSuperClass()->GetVTableLength();
     size_t actual_count = klass->GetSuperClass()->GetVTableLength();
     CHECK_LE(actual_count, max_count);
-    StackHandleScope<3> hs(self);
+    StackHandleScope<4> hs(self);
+    Handle<mirror::Class> super_class(hs.NewHandle(klass->GetSuperClass()));
     Handle<mirror::ObjectArray<mirror::ArtMethod>> vtable;
-    mirror::Class* super_class = klass->GetSuperClass();
     if (super_class->ShouldHaveEmbeddedImtAndVTable()) {
       vtable = hs.NewHandle(AllocArtMethodArray(self, max_count));
       if (UNLIKELY(vtable.Get() == nullptr)) {
@@ -4158,7 +4158,7 @@
         vtable->Set<false>(i, super_class->GetVTableEntry(i));
       }
     } else {
-      CHECK(super_class->GetVTable() != nullptr) << PrettyClass(super_class);
+      CHECK(super_class->GetVTable() != nullptr) << PrettyClass(super_class.Get());
       vtable = hs.NewHandle(super_class->GetVTable()->CopyOf(self, max_count));
       if (UNLIKELY(vtable.Get() == nullptr)) {
         CHECK(self->IsExceptionPending());  // OOME.