Skip to content

Commit 2922697

Browse files
committed
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.
2 parents 482f75f + eaae0ac commit 2922697

File tree

1 file changed

+22
-11
lines changed

1 file changed

+22
-11
lines changed

src/librustc/middle/liveness.rs

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -789,21 +789,32 @@ impl Liveness {
789789
str::from_utf8_owned(io::mem::with_mem_writer(|wr| {
790790
let wr = wr as &mut io::Writer;
791791
{
792-
let lnks = self.ir.lnks.borrow();
792+
let lnks = self.ir.lnks.try_borrow();
793793
write!(wr,
794794
"[ln({}) of kind {:?} reads",
795795
*ln,
796-
lnks.get()[*ln]);
796+
lnks.and_then(|lnks| Some(lnks.get()[*ln])));
797+
}
798+
let users = self.users.try_borrow();
799+
match users {
800+
Some(users) => {
801+
self.write_vars(wr, ln, |idx| users.get()[idx].reader);
802+
write!(wr, " writes");
803+
self.write_vars(wr, ln, |idx| users.get()[idx].writer);
804+
}
805+
None => {
806+
write!(wr, " (users borrowed)");
807+
}
808+
}
809+
let successors = self.successors.try_borrow();
810+
match successors {
811+
Some(successors) => {
812+
write!(wr, " precedes {}]", successors.get()[*ln].to_str());
813+
}
814+
None => {
815+
write!(wr, " precedes (successors borrowed)]");
816+
}
797817
}
798-
let users = self.users.borrow();
799-
self.write_vars(wr, ln, |idx| users.get()[idx].reader);
800-
write!(wr, " writes");
801-
self.write_vars(wr, ln, |idx| users.get()[idx].writer);
802-
let successor = {
803-
let successors = self.successors.borrow();
804-
successors.get()[*ln]
805-
};
806-
write!(wr, " precedes {}]", successor.to_str());
807818
}))
808819
}
809820

0 commit comments

Comments
 (0)