Do not ICE on deeply nested borrows.

This commit is contained in:
Camille GILLOT 2023-05-13 10:29:05 +00:00
parent 19652377c3
commit 13fb0794ac
2 changed files with 17 additions and 2 deletions

View File

@ -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() { if let Some((&PlaceElem::Deref, rest)) = target.projection.split_last() {
*place = Place::from(target.local).project_deeper(rest, self.tcx); *place = Place::from(target.local).project_deeper(rest, self.tcx);
self.any_replacement = true; self.any_replacement = true;
} else if self.fully_replacable_locals.contains(place.local) { } else if self.fully_replacable_locals.contains(place.local)
debuginfo.references += 1; && let Some(references) = debuginfo.references.checked_add(1)
{
debuginfo.references = references;
*place = target; *place = target;
self.any_replacement = true; self.any_replacement = true;
} }

View File

@ -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() { fn main() {
let mut x = 5_usize; let mut x = 5_usize;
let mut y = 7_usize; let mut y = 7_usize;
@ -562,6 +574,7 @@ fn main() {
mut_raw_then_mut_shr(); mut_raw_then_mut_shr();
unique_with_copies(); unique_with_copies();
debuginfo(); debuginfo();
many_debuginfo();
} }
// EMIT_MIR reference_prop.reference_propagation.ReferencePropagation.diff // EMIT_MIR reference_prop.reference_propagation.ReferencePropagation.diff