about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2013-12-28 14:12:01 -0800
committerbors <bors@rust-lang.org>2013-12-28 14:12:01 -0800
commit292269708701f1dfc663668aa72584617b3d9ccc (patch)
tree129e62e91472bdcd8fb0d1e36e9856cca62e4aba
parent482f75f595d5f3e89cc2c5cecd3f382828c08838 (diff)
parenteaae0ac68a6ab1a668ac4b5695aba35b571c8c00 (diff)
downloadrust-292269708701f1dfc663668aa72584617b3d9ccc.tar.gz
rust-292269708701f1dfc663668aa72584617b3d9ccc.zip
auto merge of #11175 : klutzy/rust/ice, r=alexcrichton
`ln_str` caused ICE if `RUST_LOG=rustc::middle::liveness` is given
due to borrow failure.
-rw-r--r--src/librustc/middle/liveness.rs33
1 files changed, 22 insertions, 11 deletions
diff --git a/src/librustc/middle/liveness.rs b/src/librustc/middle/liveness.rs
index 8532f959a2c..94c7efbe747 100644
--- a/src/librustc/middle/liveness.rs
+++ b/src/librustc/middle/liveness.rs
@@ -789,21 +789,32 @@ impl Liveness {
         str::from_utf8_owned(io::mem::with_mem_writer(|wr| {
             let wr = wr as &mut io::Writer;
             {
-                let lnks = self.ir.lnks.borrow();
+                let lnks = self.ir.lnks.try_borrow();
                 write!(wr,
                        "[ln({}) of kind {:?} reads",
                        *ln,
-                       lnks.get()[*ln]);
+                       lnks.and_then(|lnks| Some(lnks.get()[*ln])));
+            }
+            let users = self.users.try_borrow();
+            match users {
+                Some(users) => {
+                    self.write_vars(wr, ln, |idx| users.get()[idx].reader);
+                    write!(wr, "  writes");
+                    self.write_vars(wr, ln, |idx| users.get()[idx].writer);
+                }
+                None => {
+                    write!(wr, "  (users borrowed)");
+                }
+            }
+            let successors = self.successors.try_borrow();
+            match successors {
+                Some(successors) => {
+                    write!(wr, "  precedes {}]", successors.get()[*ln].to_str());
+                }
+                None => {
+                    write!(wr, "  precedes (successors borrowed)]");
+                }
             }
-            let users = self.users.borrow();
-            self.write_vars(wr, ln, |idx| users.get()[idx].reader);
-            write!(wr, "  writes");
-            self.write_vars(wr, ln, |idx| users.get()[idx].writer);
-            let successor = {
-                let successors = self.successors.borrow();
-                successors.get()[*ln]
-            };
-            write!(wr, "  precedes {}]", successor.to_str());
         }))
     }