diff options
author | Camille GILLOT <gillot.camille@gmail.com> | 2023-05-13 10:29:05 +0000 |
---|---|---|
committer | Camille GILLOT <gillot.camille@gmail.com> | 2023-05-13 10:29:05 +0000 |
commit | 13fb0794aca868c2b73493d7e008e1b395dacea4 (patch) | |
tree | 69d878a53ce66e07b279816c7a06a6caa8067607 /compiler | |
parent | 19652377c3f056aa0db32b8586e5a707b965a90d (diff) | |
download | rust-13fb0794aca868c2b73493d7e008e1b395dacea4.tar.gz |
Do not ICE on deeply nested borrows.
Diffstat (limited to 'compiler')
-rw-r--r-- | compiler/rustc_mir_transform/src/ref_prop.rs | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/compiler/rustc_mir_transform/src/ref_prop.rs b/compiler/rustc_mir_transform/src/ref_prop.rs index b0f89393989..bbd9f76ba5c 100644 --- a/compiler/rustc_mir_transform/src/ref_prop.rs +++ b/compiler/rustc_mir_transform/src/ref_prop.rs @@ -363,8 +363,10 @@ impl<'tcx> MutVisitor<'tcx> for Replacer<'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; } |