Do not DCHECK intrinsics with hidden API flags

Switching an ArtMethod into an intrinsic wipes its hidden API flags.
Those with flags therefore need to be special cased. Disable the
DCHECK for these for the moment.

Bug: 64382372
Test: make
Change-Id: I8ea3f53a1a86fd7a2f82b215ca068eeafec88c49
diff --git a/runtime/art_method-inl.h b/runtime/art_method-inl.h
index 17ac7fc..e6e35c8 100644
--- a/runtime/art_method-inl.h
+++ b/runtime/art_method-inl.h
@@ -377,6 +377,22 @@
   return (GetAccessFlags() & kAccSingleImplementation) != 0;
 }
 
+inline bool ArtMethod::IsHiddenIntrinsic(uint32_t ordinal) {
+  switch (static_cast<Intrinsics>(ordinal)) {
+    case Intrinsics::kReferenceGetReferent:
+    case Intrinsics::kSystemArrayCopyChar:
+    case Intrinsics::kStringGetCharsNoCheck:
+    case Intrinsics::kVarHandleFullFence:
+    case Intrinsics::kVarHandleAcquireFence:
+    case Intrinsics::kVarHandleReleaseFence:
+    case Intrinsics::kVarHandleLoadLoadFence:
+    case Intrinsics::kVarHandleStoreStoreFence:
+      return true;
+    default:
+      return false;
+  }
+}
+
 inline void ArtMethod::SetIntrinsic(uint32_t intrinsic) {
   // Currently we only do intrinsics for static/final methods or methods of final
   // classes. We don't set kHasSingleImplementation for those methods.
@@ -413,10 +429,14 @@
     DCHECK_EQ(is_default_conflict, IsDefaultConflicting());
     DCHECK_EQ(is_compilable, IsCompilable());
     DCHECK_EQ(must_count_locks, MustCountLocks());
-    // We need to special case java.lang.ref.Reference.getRefererent. The Java method
-    // is hidden but we do not yet have a way of making intrinsics hidden.
-    if (intrinsic != static_cast<uint32_t>(Intrinsics::kReferenceGetReferent)) {
-      DCHECK_EQ(hidden_api_list, GetHiddenApiAccessFlags());
+    if (kIsDebugBuild) {
+      if (IsHiddenIntrinsic(intrinsic)) {
+        // Special case some of our intrinsics because the access flags clash
+        // with the intrinsics ordinal.
+        DCHECK_EQ(HiddenApiAccessFlags::kWhitelist, GetHiddenApiAccessFlags());
+      } else {
+        DCHECK_EQ(hidden_api_list, GetHiddenApiAccessFlags());
+      }
     }
   } else {
     SetAccessFlags(new_value);