Skip to content

Commit 881249a

Browse files
committed
use the FulfillmentContext and InferCtxt more correctly
1 parent a61963a commit 881249a

File tree

9 files changed

+117
-77
lines changed

9 files changed

+117
-77
lines changed

src/librustc/mir/mir_map.rs

+8-2
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,22 @@ use util::nodemap::NodeMap;
1212
use mir::repr::Mir;
1313
use mir::transform::MirPass;
1414
use middle::ty;
15+
use middle::infer;
1516

1617
pub struct MirMap<'tcx> {
1718
pub map: NodeMap<Mir<'tcx>>,
1819
}
1920

2021
impl<'tcx> MirMap<'tcx> {
2122
pub fn run_passes(&mut self, passes: &mut [Box<MirPass>], tcx: &ty::ctxt<'tcx>) {
22-
for (_, ref mut mir) in &mut self.map {
23+
if passes.is_empty() { return; }
24+
25+
for (&id, mir) in &mut self.map {
26+
let param_env = ty::ParameterEnvironment::for_item(tcx, id);
27+
let infcx = infer::new_infer_ctxt(tcx, &tcx.tables, Some(param_env));
28+
2329
for pass in &mut *passes {
24-
pass.run_on_mir(mir, tcx)
30+
pass.run_on_mir(mir, &infcx)
2531
}
2632
}
2733
}

src/librustc/mir/transform.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99
// except according to those terms.
1010

1111
use mir::repr::Mir;
12-
use middle::ty::ctxt;
12+
use middle::infer::InferCtxt;
1313

1414
pub trait MirPass {
15-
fn run_on_mir<'tcx>(&mut self, mir: &mut Mir<'tcx>, tcx: &ctxt<'tcx>);
15+
fn run_on_mir<'a, 'tcx>(&mut self, mir: &mut Mir<'tcx>, infcx: &InferCtxt<'a, 'tcx>);
1616
}

src/librustc_mir/mir_map.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -149,11 +149,11 @@ impl<'a, 'm, 'tcx> Visitor<'tcx> for InnerDump<'a,'m,'tcx> {
149149

150150
match build_mir(Cx::new(&infcx), implicit_arg_tys, id, span, decl, body) {
151151
Ok(mut mir) => {
152-
clear_dead_blocks::ClearDeadBlocks::new().run_on_mir(&mut mir, self.tcx);
153-
type_check::TypeckMir::new(&infcx).run_on_mir(&mut mir, self.tcx);
154-
no_landing_pads::NoLandingPads.run_on_mir(&mut mir, self.tcx);
152+
clear_dead_blocks::ClearDeadBlocks::new().run_on_mir(&mut mir, &infcx);
153+
type_check::TypeckMir::new().run_on_mir(&mut mir, &infcx);
154+
no_landing_pads::NoLandingPads.run_on_mir(&mut mir, &infcx);
155155
if self.tcx.sess.opts.mir_opt_level > 0 {
156-
simplify_cfg::SimplifyCfg::new().run_on_mir(&mut mir, self.tcx);
156+
simplify_cfg::SimplifyCfg::new().run_on_mir(&mut mir, &infcx);
157157
}
158158
let meta_item_list = self.attr
159159
.iter()

src/librustc_mir/transform/clear_dead_blocks.rs

+3-2
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
//! This pass does not renumber or remove the blocks, to have the
1616
//! MIR better match the source.
1717
18-
use rustc::middle::ty;
18+
use rustc::middle::infer;
1919
use rustc::mir::repr::*;
2020
use rustc::mir::transform::MirPass;
2121

@@ -56,7 +56,8 @@ impl ClearDeadBlocks {
5656
}
5757

5858
impl MirPass for ClearDeadBlocks {
59-
fn run_on_mir<'tcx>(&mut self, mir: &mut Mir<'tcx>, _tcx: &ty::ctxt<'tcx>) {
59+
fn run_on_mir<'a, 'tcx>(&mut self, mir: &mut Mir<'tcx>, _: &infer::InferCtxt<'a, 'tcx>)
60+
{
6061
self.clear_dead_blocks(mir);
6162
}
6263
}

src/librustc_mir/transform/erase_regions.rs

+1-12
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,13 @@ use rustc::middle::ty;
1616
use rustc::mir::repr::*;
1717
use rustc::mir::visit::MutVisitor;
1818
use rustc::mir::mir_map::MirMap;
19-
use rustc::mir::transform::MirPass;
2019

2120
pub fn erase_regions<'tcx>(tcx: &ty::ctxt<'tcx>, mir_map: &mut MirMap<'tcx>) {
22-
let mut eraser = EraseRegions;
23-
2421
for (_, mir) in &mut mir_map.map {
25-
eraser.run_on_mir(mir, tcx);
22+
EraseRegionsVisitor::new(tcx).visit_mir(mir);
2623
}
2724
}
2825

29-
pub struct EraseRegions;
30-
3126
struct EraseRegionsVisitor<'a, 'tcx: 'a> {
3227
tcx: &'a ty::ctxt<'tcx>,
3328
}
@@ -58,12 +53,6 @@ impl<'a, 'tcx> EraseRegionsVisitor<'a, 'tcx> {
5853
}
5954
}
6055

61-
impl MirPass for EraseRegions {
62-
fn run_on_mir<'tcx>(&mut self, mir: &mut Mir<'tcx>, tcx: &ty::ctxt<'tcx>) {
63-
EraseRegionsVisitor::new(tcx).visit_mir(mir);
64-
}
65-
}
66-
6756
impl<'a, 'tcx> MutVisitor<'tcx> for EraseRegionsVisitor<'a, 'tcx> {
6857
fn visit_mir(&mut self, mir: &mut Mir<'tcx>) {
6958
self.erase_regions_return_ty(&mut mir.return_ty);

src/librustc_mir/transform/no_landing_pads.rs

+4-3
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
//! This pass removes the unwind branch of all the terminators when the no-landing-pads option is
1212
//! specified.
1313
14-
use rustc::middle::ty;
14+
use rustc::middle::infer;
1515
use rustc::mir::repr::*;
1616
use rustc::mir::visit::MutVisitor;
1717
use rustc::mir::transform::MirPass;
@@ -41,8 +41,9 @@ impl<'tcx> MutVisitor<'tcx> for NoLandingPads {
4141
}
4242

4343
impl MirPass for NoLandingPads {
44-
fn run_on_mir<'tcx>(&mut self, mir: &mut Mir<'tcx>, tcx: &ty::ctxt<'tcx>) {
45-
if tcx.sess.no_landing_pads() {
44+
fn run_on_mir<'a, 'tcx>(&mut self, mir: &mut Mir<'tcx>,
45+
infcx: &infer::InferCtxt<'a, 'tcx>) {
46+
if infcx.tcx.sess.no_landing_pads() {
4647
self.visit_mir(mir);
4748
}
4849
}

src/librustc_mir/transform/simplify_cfg.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
// except according to those terms.
1010

1111
use rustc::middle::const_eval::ConstVal;
12+
use rustc::middle::infer;
1213
use rustc::mir::repr::*;
1314
use transform::util;
1415
use rustc::mir::transform::MirPass;
@@ -119,7 +120,7 @@ impl SimplifyCfg {
119120
}
120121

121122
impl MirPass for SimplifyCfg {
122-
fn run_on_mir<'tcx>(&mut self, mir: &mut Mir<'tcx>, _: &::rustc::middle::ty::ctxt<'tcx>) {
123+
fn run_on_mir<'a, 'tcx>(&mut self, mir: &mut Mir<'tcx>, _: &infer::InferCtxt<'a, 'tcx>) {
123124
let mut changed = true;
124125
while changed {
125126
changed = self.simplify_branches(mir);

0 commit comments

Comments
 (0)