Do not ICE on deeply nested borrows.
This commit is contained in:
parent
19652377c3
commit
13fb0794ac
@ -363,8 +363,10 @@ fn visit_var_debug_info(&mut self, debuginfo: &mut VarDebugInfo<'tcx>) {
|
||||
if let Some((&PlaceElem::Deref, rest)) = target.projection.split_last() {
|
||||
*place = Place::from(target.local).project_deeper(rest, self.tcx);
|
||||
self.any_replacement = true;
|
||||
} else if self.fully_replacable_locals.contains(place.local) {
|
||||
debuginfo.references += 1;
|
||||
} else if self.fully_replacable_locals.contains(place.local)
|
||||
&& let Some(references) = debuginfo.references.checked_add(1)
|
||||
{
|
||||
debuginfo.references = references;
|
||||
*place = target;
|
||||
self.any_replacement = true;
|
||||
}
|
||||
|
@ -548,6 +548,18 @@ fn debuginfo() {
|
||||
}
|
||||
}
|
||||
|
||||
fn many_debuginfo() {
|
||||
let a = 0;
|
||||
|
||||
// Verify that we do not ICE on deeply nested borrows.
|
||||
let many_borrow =
|
||||
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
|
||||
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
|
||||
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
|
||||
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
|
||||
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&a;
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let mut x = 5_usize;
|
||||
let mut y = 7_usize;
|
||||
@ -562,6 +574,7 @@ fn main() {
|
||||
mut_raw_then_mut_shr();
|
||||
unique_with_copies();
|
||||
debuginfo();
|
||||
many_debuginfo();
|
||||
}
|
||||
|
||||
// EMIT_MIR reference_prop.reference_propagation.ReferencePropagation.diff
|
||||
|
Loading…
Reference in New Issue
Block a user