From eaae0ac68a6ab1a668ac4b5695aba35b571c8c00 Mon Sep 17 00:00:00 2001 From: klutzy Date: Sun, 29 Dec 2013 02:47:12 +0900 Subject: [PATCH] rustc: Fix a borrow failure in `.ln_str()` `ln_str` caused ICE if `RUST_LOG=rustc::middle::liveness` is given due to borrow failure. --- src/librustc/middle/liveness.rs | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/src/librustc/middle/liveness.rs b/src/librustc/middle/liveness.rs index 8532f959a2cd1..94c7efbe7474b 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()); })) }