| use rustc_middle::mir::{Body, TerminatorKind}; |
| use rustc_middle::ty::TyCtxt; |
| |
| use crate::MirPass; |
| |
| /// Removes `FalseEdge` and `FalseUnwind` terminators from the MIR. |
| /// |
| /// These are only needed for borrow checking, and can be removed afterwards. |
| /// |
| /// FIXME: This should probably have its own MIR phase. |
| pub struct RemoveFalseEdges; |
| |
| impl<'tcx> MirPass<'tcx> for RemoveFalseEdges { |
| fn run_pass(&self, _: TyCtxt<'tcx>, body: &mut Body<'tcx>) { |
| for block in body.basic_blocks_mut() { |
| let terminator = block.terminator_mut(); |
| terminator.kind = match terminator.kind { |
| TerminatorKind::FalseEdge { real_target, .. } => { |
| TerminatorKind::Goto { target: real_target } |
| } |
| TerminatorKind::FalseUnwind { real_target, .. } => { |
| TerminatorKind::Goto { target: real_target } |
| } |
| |
| _ => continue, |
| } |
| } |
| } |
| } |