Do not allow read barriers with null Thread::Current().

Test: m test-art-host-gtest
Test: testrunner.py --host --optimizing
Bug: 263926990
Change-Id: Ic78cf3d72b97b3b0f2dae0c29c19a82100ca7ed8
diff --git a/runtime/gc/space/image_space.cc b/runtime/gc/space/image_space.cc
index 22c07a7..72fce00 100644
--- a/runtime/gc/space/image_space.cc
+++ b/runtime/gc/space/image_space.cc
@@ -2638,6 +2638,14 @@
       DCHECK_EQ(base_diff64, 0);
     }
 
+    // While `Thread::Current()` is null, the `ScopedDebugDisallowReadBarriers`
+    // cannot be used but the class `ReadBarrier` shall not allow read barriers anyway.
+    // For some gtests we actually have an initialized `Thread:Current()`.
+    std::optional<ScopedDebugDisallowReadBarriers> sddrb(std::nullopt);
+    if (kCheckDebugDisallowReadBarrierCount && Thread::Current() != nullptr) {
+      sddrb.emplace(Thread::Current());
+    }
+
     ArrayRef<const std::unique_ptr<ImageSpace>> spaces_ref(spaces);
     PointerSize pointer_size = first_space_header.GetPointerSize();
     if (pointer_size == PointerSize::k64) {
diff --git a/runtime/read_barrier-inl.h b/runtime/read_barrier-inl.h
index ff4693f..36c6f44 100644
--- a/runtime/read_barrier-inl.h
+++ b/runtime/read_barrier-inl.h
@@ -38,9 +38,8 @@
   if (gUseReadBarrier && with_read_barrier) {
     if (kCheckDebugDisallowReadBarrierCount) {
       Thread* const self = Thread::Current();
-      if (self != nullptr) {
-        CHECK_EQ(self->GetDebugDisallowReadBarrierCount(), 0u);
-      }
+      CHECK(self != nullptr);
+      CHECK_EQ(self->GetDebugDisallowReadBarrierCount(), 0u);
     }
     if (kUseBakerReadBarrier) {
       // fake_address_dependency (must be zero) is used to create artificial data dependency from
@@ -112,9 +111,8 @@
   if (gUseReadBarrier && with_read_barrier) {
     if (kCheckDebugDisallowReadBarrierCount) {
       Thread* const self = Thread::Current();
-      if (self != nullptr) {
-        CHECK_EQ(self->GetDebugDisallowReadBarrierCount(), 0u);
-      }
+      CHECK(self != nullptr);
+      CHECK_EQ(self->GetDebugDisallowReadBarrierCount(), 0u);
     }
     if (kUseBakerReadBarrier) {
       // TODO: separate the read barrier code from the collector code more.
@@ -157,9 +155,8 @@
   if (gUseReadBarrier && with_read_barrier) {
     if (kCheckDebugDisallowReadBarrierCount) {
       Thread* const self = Thread::Current();
-      if (self != nullptr) {
-        CHECK_EQ(self->GetDebugDisallowReadBarrierCount(), 0u);
-      }
+      CHECK(self != nullptr);
+      CHECK_EQ(self->GetDebugDisallowReadBarrierCount(), 0u);
     }
     if (kUseBakerReadBarrier) {
       // TODO: separate the read barrier code from the collector code more.