diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
index fca83aed5f7..6f218f172a9 100644
--- a/gdb/dwarf2/read.c
+++ b/gdb/dwarf2/read.c
@@ -4701,6 +4701,12 @@ class cooked_index_storage
     m_index->set_parent_valid (start, end);
   }
 
+  /* Return true if find_parents can be relied upon.  */
+  bool parent_valid (CORE_ADDR addr)
+  {
+    return m_index->parent_valid (addr);
+  }
+
 private:
 
   /* Hash function for a cutu_reader.  */
@@ -4855,6 +4861,12 @@ class cooked_indexer
   {
     m_index_storage->set_parent_valid (start, end);
   }
+
+  /* Return true if find_parents can be relied upon.  */
+  bool parent_valid (CORE_ADDR addr)
+  {
+    return m_index_storage->parent_valid (addr);
+  }
 };
 
 /* Subroutine of dwarf2_build_psymtabs_hard to simplify it.
@@ -16391,7 +16403,11 @@ cooked_indexer::scan_attributes (dwarf2_per_cu_data *scanning_per_cu,
 	  const gdb_byte *new_info_ptr = (new_reader->buffer
 					  + to_underlying (origin_offset));
 
-	  if ((new_reader->cu != reader->cu
+	  CORE_ADDR origin_addr = form_addr (origin_offset, origin_is_dwz,
+					     reader->cu->per_cu->is_debug_types);
+
+	  if (((new_reader->cu != reader->cu
+		&& !parent_valid (origin_addr))
 	       || (new_reader->cu == reader->cu
 		   && new_info_ptr > watermark_ptr))
 	      && *parent_entry == nullptr)
