Merge "Avoid recording CHA class status for dex2oat"
diff --git a/runtime/class_linker.cc b/runtime/class_linker.cc
index a227d18..3ae8528 100644
--- a/runtime/class_linker.cc
+++ b/runtime/class_linker.cc
@@ -5431,7 +5431,8 @@
   ArtMethod* imt_data[ImTable::kSize];
   // If there are any new conflicts compared to super class.
   bool new_conflict = false;
-  std::fill_n(imt_data, arraysize(imt_data), Runtime::Current()->GetImtUnimplementedMethod());
+  Runtime* const runtime = Runtime::Current();
+  std::fill_n(imt_data, arraysize(imt_data), runtime->GetImtUnimplementedMethod());
   if (!LinkMethods(self, klass, interfaces, &new_conflict, imt_data)) {
     return false;
   }
@@ -5490,8 +5491,12 @@
     // Update CHA info based on whether we override methods.
     // Have to do this before setting the class as resolved which allows
     // instantiation of klass.
-    Runtime::Current()->GetClassHierarchyAnalysis()->UpdateAfterLoadingOf(klass);
-
+    if (!runtime->IsAotCompiler()) {
+      // AOT compiler doesn't use CHA.
+      // If this is enabled for the compiler, the cha_dependency_map_ probably needs to be
+      // cleared if unloading happens after compilation.
+      runtime->GetClassHierarchyAnalysis()->UpdateAfterLoadingOf(klass);
+    }
     // This will notify waiters on klass that saw the not yet resolved
     // class in the class_table_ during EnsureResolved.
     mirror::Class::SetStatus(klass, mirror::Class::kStatusResolved, self);
@@ -5538,7 +5543,9 @@
     // Update CHA info based on whether we override methods.
     // Have to do this before setting the class as resolved which allows
     // instantiation of klass.
-    Runtime::Current()->GetClassHierarchyAnalysis()->UpdateAfterLoadingOf(h_new_class);
+    if (!runtime->IsAotCompiler()) {
+      runtime->GetClassHierarchyAnalysis()->UpdateAfterLoadingOf(h_new_class);
+    }
 
     // This will notify waiters on temp class that saw the not yet resolved class in the
     // class_table_ during EnsureResolved.