]> git.lizzy.rs Git - rust.git/commitdiff
rustc: Fix a borrow failure in `.ln_str()`
authorklutzy <klutzytheklutzy@gmail.com>
Sat, 28 Dec 2013 17:47:12 +0000 (02:47 +0900)
committerklutzy <klutzytheklutzy@gmail.com>
Sat, 28 Dec 2013 17:47:12 +0000 (02:47 +0900)
`ln_str` caused ICE if `RUST_LOG=rustc::middle::liveness` is given
due to borrow failure.

src/librustc/middle/liveness.rs

index 8532f959a2cd11e1c43a383f48e561a679a38cf9..94c7efbe7474be4f272216b3efe0914219cedccf 100644 (file)
@@ -789,21 +789,32 @@ pub fn ln_str(&self, ln: LiveNode) -> ~str {
         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());
         }))
     }