Fix class initialization checks in interpreter

Check field's class initialization after handling null pointer exception.

Bug: 16324235

(cherry picked from commit 1edbd8e5405486a96d69481f5f30a8ca16d510b5)

Change-Id: I31ef07a08ff70c5695dda1079afea5b2579bb8e3
diff --git a/runtime/interpreter/interpreter_common.cc b/runtime/interpreter/interpreter_common.cc
index 5a03601..b552909 100644
--- a/runtime/interpreter/interpreter_common.cc
+++ b/runtime/interpreter/interpreter_common.cc
@@ -35,7 +35,6 @@
     CHECK(self->IsExceptionPending());
     return false;
   }
-  f->GetDeclaringClass()->AssertInitializedOrInitializingInThread(self);
   Object* obj;
   if (is_static) {
     obj = f->GetDeclaringClass();
@@ -46,6 +45,7 @@
       return false;
     }
   }
+  f->GetDeclaringClass()->AssertInitializedOrInitializingInThread(self);
   // Report this field access to instrumentation if needed.
   instrumentation::Instrumentation* instrumentation = Runtime::Current()->GetInstrumentation();
   if (UNLIKELY(instrumentation->HasFieldReadListeners())) {
@@ -211,7 +211,6 @@
     CHECK(self->IsExceptionPending());
     return false;
   }
-  f->GetDeclaringClass()->AssertInitializedOrInitializingInThread(self);
   Object* obj;
   if (is_static) {
     obj = f->GetDeclaringClass();
@@ -223,6 +222,7 @@
       return false;
     }
   }
+  f->GetDeclaringClass()->AssertInitializedOrInitializingInThread(self);
   uint32_t vregA = is_static ? inst->VRegA_21c(inst_data) : inst->VRegA_22c(inst_data);
   // Report this field access to instrumentation if needed. Since we only have the offset of
   // the field from the base of the object, we need to look for it first.