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() {
|
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;
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user