diff --git a/src/rt/rust_crate_reader.cpp b/src/rt/rust_crate_reader.cpp
index ece0281c5d9..fc934b983fb 100644
--- a/src/rt/rust_crate_reader.cpp
+++ b/src/rt/rust_crate_reader.cpp
@@ -258,10 +258,16 @@ rust_crate_reader::die::die(die_reader *rdr, uintptr_t off)
     dom->get_log().outdent();
   } else {
     ab = rdr->abbrevs.get_abbrev(ab_idx);
-    dom->log(rust_log::DWARF, "DIE <0x%" PRIxPTR "> abbrev 0x%"
-             PRIxPTR, off, ab_idx);
-    dom->log(rust_log::DWARF, "  tag 0x%x, has children: %d",
-             ab->tag, ab->has_children);
+    if (!ab) {
+        dom->log(rust_log::DWARF, "  bad abbrev number: 0x%"
+                 PRIxPTR, ab_idx);
+        rdr->fail();
+    } else {
+        dom->log(rust_log::DWARF, "DIE <0x%" PRIxPTR "> abbrev 0x%"
+                 PRIxPTR, off, ab_idx);
+        dom->log(rust_log::DWARF, "  tag 0x%x, has children: %d",
+                 ab->tag, ab->has_children);
+    }
   }
 }