about summary refs log tree commit diff
diff options
context:
space:
mode:
authorb-naber <bn263@gmx.de>2022-06-28 17:38:01 +0200
committerb-naber <bn263@gmx.de>2022-09-13 17:41:02 +0200
commit2554fa1c8e14f2b34f10e87c115388d5498ffc0c (patch)
tree5f15079b68a4f4cf732eb8ca10aec7a327c93337
parenta4bbb8db5c4c702265b8afcc1313684a127ddd6a (diff)
downloadrust-2554fa1c8e14f2b34f10e87c115388d5498ffc0c.tar.gz
rust-2554fa1c8e14f2b34f10e87c115388d5498ffc0c.zip
renumber regions in mir constants correctly
-rw-r--r--compiler/rustc_borrowck/src/renumber.rs34
1 files changed, 32 insertions, 2 deletions
diff --git a/compiler/rustc_borrowck/src/renumber.rs b/compiler/rustc_borrowck/src/renumber.rs
index 7a8ce621c5d..d8fa18e2ebb 100644
--- a/compiler/rustc_borrowck/src/renumber.rs
+++ b/compiler/rustc_borrowck/src/renumber.rs
@@ -2,6 +2,7 @@ use rustc_index::vec::IndexVec;
 use rustc_infer::infer::{InferCtxt, NllRegionVariableOrigin};
 use rustc_middle::mir::visit::{MutVisitor, TyContext};
 use rustc_middle::mir::{Body, Location, Promoted};
+use rustc_middle::mir::{Constant, ConstantKind};
 use rustc_middle::ty::subst::SubstsRef;
 use rustc_middle::ty::{self, Ty, TyCtxt, TypeFoldable};
 
@@ -77,7 +78,36 @@ impl<'a, 'tcx> MutVisitor<'tcx> for NllVisitor<'a, 'tcx> {
         debug!(?region);
     }
 
-    fn visit_const(&mut self, constant: &mut ty::Const<'tcx>, _location: Location) {
-        *constant = self.renumber_regions(*constant);
+    #[instrument(skip(self), level = "debug")]
+    fn visit_constant(&mut self, constant: &mut Constant<'tcx>, _location: Location) {
+        let literal = constant.literal;
+        debug!("{:#?}", literal);
+
+        match literal {
+            ConstantKind::Ty(ct) => {
+                let ct = self.renumber_regions(ct);
+                debug!("renumbered ct {:#?}", ct);
+
+                constant.literal = ConstantKind::Ty(ct);
+            }
+            ConstantKind::Unevaluated(uv, ty) => {
+                debug!("uv: {:#?}, ty: {:#?}", uv, ty);
+                let uv = self.renumber_regions(uv);
+                debug!("uv: {:#?}", uv);
+                let ty = self.renumber_regions(ty);
+                debug!("{:#?}", ty);
+                constant.literal = ConstantKind::Unevaluated(uv, ty);
+            }
+            ConstantKind::Val(val, ty) => {
+                let ty = self.renumber_regions(ty);
+                constant.literal = ConstantKind::Val(val, ty);
+            }
+        }
+
+        debug!("constant: {:#?}", constant);
+    }
+
+    fn visit_const(&mut self, _constant: &mut ty::Const<'tcx>, _location: Location) {
+        bug!("should never be called");
     }
 }