]> git.lizzy.rs Git - rust.git/blobdiff - src/etc/gdb_rust_pretty_printing.py
Rollup merge of #67543 - JohnTitor:regression-tests, r=Centril
[rust.git] / src / etc / gdb_rust_pretty_printing.py
index a6b09722e1c9497d2d70833dfdf3a2b4802108e4..5da01b96fa5e36f392cdecad68eb448964eed219 100755 (executable)
@@ -284,10 +284,20 @@ class RustStdVecPrinter(object):
                 ("(len: %i, cap: %i)" % (length, cap)))
 
     def children(self):
+        saw_inaccessible = False
         (length, data_ptr, cap) = rustpp.extract_length_ptr_and_cap_from_std_vec(self.__val)
         gdb_ptr = data_ptr.get_wrapped_value()
         for index in xrange(0, length):
-            yield (str(index), (gdb_ptr + index).dereference())
+            if saw_inaccessible:
+                return
+            try:
+                # rust-lang/rust#64343: passing deref expr to `str` allows
+                # catching exception on garbage pointer
+                str((gdb_ptr + index).dereference())
+                yield (str(index), (gdb_ptr + index).dereference())
+            except RuntimeError:
+                saw_inaccessible = True
+                yield (str(index), "inaccessible")
 
 
 class RustStdVecDequePrinter(object):