summaryrefslogtreecommitdiff
path: root/compiler
diff options
context:
space:
mode:
authorCamille GILLOT <gillot.camille@gmail.com>2023-05-13 10:29:05 +0000
committerCamille GILLOT <gillot.camille@gmail.com>2023-05-13 10:29:05 +0000
commit13fb0794aca868c2b73493d7e008e1b395dacea4 (patch)
tree69d878a53ce66e07b279816c7a06a6caa8067607 /compiler
parent19652377c3f056aa0db32b8586e5a707b965a90d (diff)
downloadrust-13fb0794aca868c2b73493d7e008e1b395dacea4.tar.gz
Do not ICE on deeply nested borrows.
Diffstat (limited to 'compiler')
-rw-r--r--compiler/rustc_mir_transform/src/ref_prop.rs6
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;
}