From 7eb1a1afcfd5564f0d78f37c9c6397a070d794c2 Mon Sep 17 00:00:00 2001 From: Camelid Date: Fri, 13 Nov 2020 11:23:12 -0800 Subject: [PATCH] Validate that locals have a corresponding `LocalDecl` --- compiler/rustc_mir/src/transform/validate.rs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/compiler/rustc_mir/src/transform/validate.rs b/compiler/rustc_mir/src/transform/validate.rs index e1e6e71acb5a8..919e4a90a1716 100644 --- a/compiler/rustc_mir/src/transform/validate.rs +++ b/compiler/rustc_mir/src/transform/validate.rs @@ -183,6 +183,13 @@ impl<'a, 'tcx> TypeChecker<'a, 'tcx> { impl<'a, 'tcx> Visitor<'tcx> for TypeChecker<'a, 'tcx> { fn visit_local(&mut self, local: &Local, context: PlaceContext, location: Location) { + if self.body.local_decls.get(*local).is_none() { + self.fail( + location, + format!("local {:?} has no corresponding declaration in `body.local_decls`", local), + ); + } + if self.reachable_blocks.contains(location.block) && context.is_use() { // Uses of locals must occur while the local's storage is allocated. self.storage_liveness.seek_after_primary_effect(location);