Skip to content

Commit e30ff06

Browse files
committed
Change MirPass to also take NodeId
1 parent 27d91d7 commit e30ff06

File tree

7 files changed

+34
-31
lines changed

7 files changed

+34
-31
lines changed

src/librustc/mir/transform.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@
88
// option. This file may not be copied, modified, or distributed
99
// except according to those terms.
1010

11-
use dep_graph::DepNode;
1211
use mir::mir_map::MirMap;
1312
use mir::repr::Mir;
1413
use middle::ty::TyCtxt;
14+
use syntax::ast::NodeId;
1515

1616
/// Various information about pass.
1717
pub trait Pass {
@@ -26,13 +26,13 @@ pub trait MirMapPass<'tcx>: Pass {
2626

2727
/// A pass which inspects Mir of functions in isolation.
2828
pub trait MirPass<'tcx>: Pass {
29-
fn run_pass(&mut self, cx: &TyCtxt<'tcx>, mir: &mut Mir<'tcx>);
29+
fn run_pass(&mut self, cx: &TyCtxt<'tcx>, id: NodeId, mir: &mut Mir<'tcx>);
3030
}
3131

3232
impl<'tcx, T: MirPass<'tcx>> MirMapPass<'tcx> for T {
3333
fn run_pass(&mut self, tcx: &TyCtxt<'tcx>, map: &mut MirMap<'tcx>) {
34-
for (_, mir) in &mut map.map {
35-
MirPass::run_pass(self, tcx, mir);
34+
for (&id, mir) in &mut map.map {
35+
MirPass::run_pass(self, tcx, id, mir);
3636
}
3737
}
3838
}

src/librustc_mir/transform/erase_regions.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ use rustc::middle::ty::{self, TyCtxt};
1616
use rustc::mir::repr::*;
1717
use rustc::mir::visit::MutVisitor;
1818
use rustc::mir::transform::{MirPass, Pass};
19+
use syntax::ast::NodeId;
1920

2021
struct EraseRegionsVisitor<'a, 'tcx: 'a> {
2122
tcx: &'a TyCtxt<'tcx>,
@@ -123,7 +124,7 @@ pub struct EraseRegions;
123124
impl Pass for EraseRegions {}
124125

125126
impl<'tcx> MirPass<'tcx> for EraseRegions {
126-
fn run_pass(&mut self, tcx: &TyCtxt<'tcx>, mir: &mut Mir<'tcx>) {
127+
fn run_pass(&mut self, tcx: &TyCtxt<'tcx>, _: NodeId, mir: &mut Mir<'tcx>) {
127128
EraseRegionsVisitor::new(tcx).visit_mir(mir);
128129
}
129130
}

src/librustc_mir/transform/no_landing_pads.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ use rustc::middle::ty::TyCtxt;
1515
use rustc::mir::repr::*;
1616
use rustc::mir::visit::MutVisitor;
1717
use rustc::mir::transform::{Pass, MirPass};
18+
use syntax::ast::NodeId;
1819

1920
pub struct NoLandingPads;
2021

@@ -41,7 +42,7 @@ impl<'tcx> MutVisitor<'tcx> for NoLandingPads {
4142
}
4243

4344
impl<'tcx> MirPass<'tcx> for NoLandingPads {
44-
fn run_pass(&mut self, tcx: &TyCtxt<'tcx>, mir: &mut Mir<'tcx>) {
45+
fn run_pass(&mut self, tcx: &TyCtxt<'tcx>, _: NodeId, mir: &mut Mir<'tcx>) {
4546
if tcx.sess.no_landing_pads() {
4647
self.visit_mir(mir);
4748
}

src/librustc_mir/transform/remove_dead_blocks.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,12 @@ use rustc_data_structures::bitvec::BitVector;
3636
use rustc::middle::ty::TyCtxt;
3737
use rustc::mir::repr::*;
3838
use rustc::mir::transform::{Pass, MirPass};
39+
use syntax::ast::NodeId;
3940

4041
pub struct RemoveDeadBlocks;
4142

4243
impl<'tcx> MirPass<'tcx> for RemoveDeadBlocks {
43-
fn run_pass(&mut self, _: &TyCtxt<'tcx>, mir: &mut Mir<'tcx>) {
44+
fn run_pass(&mut self, _: &TyCtxt<'tcx>, _: NodeId, mir: &mut Mir<'tcx>) {
4445
let mut seen = BitVector::new(mir.basic_blocks.len());
4546
// These blocks are always required.
4647
seen.insert(START_BLOCK.index());

src/librustc_mir/transform/simplify_cfg.rs

+3-2
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ use rustc::middle::const_eval::ConstVal;
1212
use rustc::middle::ty::TyCtxt;
1313
use rustc::mir::repr::*;
1414
use rustc::mir::transform::{MirPass, Pass};
15+
use syntax::ast::NodeId;
1516

1617
use super::remove_dead_blocks::RemoveDeadBlocks;
1718

@@ -101,12 +102,12 @@ impl SimplifyCfg {
101102
}
102103

103104
impl<'tcx> MirPass<'tcx> for SimplifyCfg {
104-
fn run_pass(&mut self, tcx: &TyCtxt<'tcx>, mir: &mut Mir<'tcx>) {
105+
fn run_pass(&mut self, tcx: &TyCtxt<'tcx>, id: NodeId, mir: &mut Mir<'tcx>) {
105106
let mut changed = true;
106107
while changed {
107108
changed = self.simplify_branches(mir);
108109
changed |= self.remove_goto_chains(mir);
109-
RemoveDeadBlocks.run_pass(tcx, mir);
110+
RemoveDeadBlocks.run_pass(tcx, id, mir);
110111
}
111112
// FIXME: Should probably be moved into some kind of pass manager
112113
mir.basic_blocks.shrink_to_fit();

src/librustc_mir/transform/type_check.rs

+18-21
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,15 @@
1414
use rustc::dep_graph::DepNode;
1515
use rustc::middle::infer::{self, InferCtxt};
1616
use rustc::middle::traits;
17-
use rustc::middle::ty::{self, Ty, TyCtxt};
1817
use rustc::middle::ty::fold::TypeFoldable;
18+
use rustc::middle::ty::{self, Ty, TyCtxt};
1919
use rustc::mir::repr::*;
20-
use rustc::mir::mir_map::MirMap;
2120
use rustc::mir::tcx::LvalueTy;
22-
use rustc::mir::transform::{MirMapPass, Pass};
21+
use rustc::mir::transform::{MirPass, Pass};
2322
use rustc::mir::visit::{self, Visitor};
24-
25-
use syntax::codemap::{Span, DUMMY_SP};
2623
use std::fmt;
24+
use syntax::ast::NodeId;
25+
use syntax::codemap::{Span, DUMMY_SP};
2726

2827
macro_rules! span_mirbug {
2928
($context:expr, $elem:expr, $($message:tt)*) => ({
@@ -574,29 +573,27 @@ impl TypeckMir {
574573
}
575574
}
576575

577-
impl<'tcx> MirMapPass<'tcx> for TypeckMir {
578-
fn run_pass(&mut self, tcx: &TyCtxt<'tcx>, map: &mut MirMap<'tcx>) {
576+
impl<'tcx> MirPass<'tcx> for TypeckMir {
577+
fn run_pass(&mut self, tcx: &TyCtxt<'tcx>, id: NodeId, mir: &mut Mir<'tcx>) {
579578
if tcx.sess.err_count() > 0 {
580579
// compiling a broken program can obviously result in a
581580
// broken MIR, so try not to report duplicate errors.
582581
return;
583582
}
584-
for (&id, mir) in &mut map.map {
585-
let _task = tcx.dep_graph.in_task(DepNode::MirTypeck(id));
586-
let param_env = ty::ParameterEnvironment::for_item(tcx, id);
587-
let infcx = infer::new_infer_ctxt(tcx, &tcx.tables, Some(param_env));
588-
let mut checker = TypeChecker::new(&infcx);
589-
{
590-
let mut verifier = TypeVerifier::new(&mut checker, mir);
591-
verifier.visit_mir(mir);
592-
if verifier.errors_reported {
593-
// don't do further checks to avoid ICEs
594-
continue;
595-
}
583+
let _task = tcx.dep_graph.in_task(DepNode::MirTypeck(id));
584+
let param_env = ty::ParameterEnvironment::for_item(tcx, id);
585+
let infcx = infer::new_infer_ctxt(tcx, &tcx.tables, Some(param_env));
586+
let mut checker = TypeChecker::new(&infcx);
587+
{
588+
let mut verifier = TypeVerifier::new(&mut checker, mir);
589+
verifier.visit_mir(mir);
590+
if verifier.errors_reported {
591+
// don't do further checks to avoid ICEs
592+
return;
596593
}
597-
checker.typeck_mir(mir);
598-
checker.verify_obligations(mir);
599594
}
595+
checker.typeck_mir(mir);
596+
checker.verify_obligations(mir);
600597
}
601598
}
602599

src/test/auxiliary/dummy_mir_pass.rs

+3-1
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,13 @@ use rustc::middle::ty;
2525
use rustc::middle::const_eval::ConstVal;
2626
use rustc_plugin::Registry;
2727

28+
use syntax::ast::NodeId;
29+
2830
struct Pass;
2931

3032
impl transform::Pass for Pass {}
3133
impl<'tcx> MirPass<'tcx> for Pass {
32-
fn run_pass(&mut self, _: &ty::ctxt<'tcx>, mir: &mut Mir<'tcx>) {
34+
fn run_pass(&mut self, _: &ty::TyCtxt<'tcx>, _: NodeId, mir: &mut Mir<'tcx>) {
3335
Visitor.visit_mir(mir)
3436
}
3537
}

0 commit comments

Comments
 (0)