From 2d2c5e118ab624913e5cc43b2d4b6b60bf3f40a0 Mon Sep 17 00:00:00 2001 From: ouz-a Date: Sun, 17 Apr 2022 16:52:18 +0300 Subject: [PATCH] little changes --- compiler/rustc_middle/src/mir/patch.rs | 12 +++++------- compiler/rustc_mir_transform/src/deref_separator.rs | 8 ++++---- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/compiler/rustc_middle/src/mir/patch.rs b/compiler/rustc_middle/src/mir/patch.rs index 4adbe2516da..acede4e7969 100644 --- a/compiler/rustc_middle/src/mir/patch.rs +++ b/compiler/rustc_middle/src/mir/patch.rs @@ -2,7 +2,6 @@ use rustc_index::vec::{Idx, IndexVec}; use rustc_middle::mir::*; use rustc_middle::ty::Ty; use rustc_span::Span; -use std::collections::VecDeque; /// This struct represents a patch to MIR, which can add /// new statements and basic blocks and patch over block @@ -143,8 +142,7 @@ impl<'tcx> MirPatch<'tcx> { let mut delta = 0; let mut last_bb = START_BLOCK; let mut terminator_targets = Vec::new(); - let mut inf_and_stmt: VecDeque<(SourceInfo, StatementKind<'_>)> = VecDeque::new(); - + let mut statements:Vec> = Vec::new(); for (mut loc, stmt) in new_statements { if loc.block != last_bb { delta = 0; @@ -161,7 +159,7 @@ impl<'tcx> MirPatch<'tcx> { let successors = term.successors().clone(); for i in successors { - inf_and_stmt.push_back((source_info, stmt.clone())); + statements.push(Statement{source_info,kind:stmt.clone()}); terminator_targets.push(i.clone()); } delta += 1; @@ -174,11 +172,11 @@ impl<'tcx> MirPatch<'tcx> { delta += 1; } - for target in terminator_targets.iter() { - let inf_and_stmt = inf_and_stmt.pop_front().unwrap(); + for target in terminator_targets.iter().rev() { + let stmt = statements.pop().unwrap(); body[*target] .statements - .insert(0, Statement { source_info: inf_and_stmt.0, kind: inf_and_stmt.1 }); + .insert(0, stmt); } } diff --git a/compiler/rustc_mir_transform/src/deref_separator.rs b/compiler/rustc_mir_transform/src/deref_separator.rs index 6c06294d72b..7d81bb74cd6 100644 --- a/compiler/rustc_mir_transform/src/deref_separator.rs +++ b/compiler/rustc_mir_transform/src/deref_separator.rs @@ -59,8 +59,8 @@ impl<'tcx> MutVisitor<'tcx> for DerefChecker<'tcx> { } // We are destroying last temp since it's no longer used. - if prev_temp.is_some() { - self.patcher.add_statement(loc, StatementKind::StorageDead(prev_temp.unwrap())); + if let Some(prev_temp) = prev_temp { + self.patcher.add_statement(loc, StatementKind::StorageDead(prev_temp)); } prev_temp = Some(temp); @@ -68,9 +68,9 @@ impl<'tcx> MutVisitor<'tcx> for DerefChecker<'tcx> { } // Since we won't be able to reach final temp, we destroy it outside the loop. - if prev_temp.is_some() { + if let Some(prev_temp) = prev_temp { let last_loc = Location { block: loc.block, statement_index: loc.statement_index + 1 }; - self.patcher.add_statement(last_loc, StatementKind::StorageDead(prev_temp.unwrap())); + self.patcher.add_statement(last_loc, StatementKind::StorageDead(prev_temp)); } } }