From 7216012878f32a343b82fc243c7b692b41104691 Mon Sep 17 00:00:00 2001 From: Remy Rakic Date: Wed, 12 Sep 2018 15:09:28 +0200 Subject: [PATCH] Inject fake read in binding pattern --- src/librustc_mir/build/matches/mod.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/librustc_mir/build/matches/mod.rs b/src/librustc_mir/build/matches/mod.rs index 49c4ed874bbe..6a84658a7a98 100644 --- a/src/librustc_mir/build/matches/mod.rs +++ b/src/librustc_mir/build/matches/mod.rs @@ -264,6 +264,19 @@ impl<'a, 'gcx, 'tcx> Builder<'a, 'gcx, 'tcx> { let place = self.storage_live_binding(block, var, irrefutable_pat.span, OutsideGuard); unpack!(block = self.into(&place, block, initializer)); + + // Inject a fake read of the newly created binding + // to test the fallout of fixing issue #53695 where NLL + // allows to create variables that are immediately unusable. + let source_info = self.source_info(irrefutable_pat.span); + self.cfg.push( + block, + Statement { + source_info, + kind: StatementKind::ReadForMatch(place.clone()), + }, + ); + self.schedule_drop_for_binding(var, irrefutable_pat.span, OutsideGuard); block.unit() }