Fix remaining Body -> (ReadOnly)BodyCache type errors in librustc_mir outside of librustc_mir/transform
This commit is contained in:
parent
3642a71da2
commit
38c0887c76
2 changed files with 16 additions and 14 deletions
|
@ -202,12 +202,14 @@ fn build_drop_shim<'tcx>(tcx: TyCtxt<'tcx>, def_id: DefId, ty: Option<Ty<'tcx>>)
|
||||||
sig.inputs().len(),
|
sig.inputs().len(),
|
||||||
span);
|
span);
|
||||||
|
|
||||||
|
let mut body_cache = BodyCache::new(&mut body);
|
||||||
|
|
||||||
if let Some(..) = ty {
|
if let Some(..) = ty {
|
||||||
// The first argument (index 0), but add 1 for the return value.
|
// The first argument (index 0), but add 1 for the return value.
|
||||||
let dropee_ptr = Place::from(Local::new(1+0));
|
let dropee_ptr = Place::from(Local::new(1+0));
|
||||||
if tcx.sess.opts.debugging_opts.mir_emit_retag {
|
if tcx.sess.opts.debugging_opts.mir_emit_retag {
|
||||||
// Function arguments should be retagged, and we make this one raw.
|
// Function arguments should be retagged, and we make this one raw.
|
||||||
body.basic_blocks_mut()[START_BLOCK].statements.insert(0, Statement {
|
body_cache.basic_blocks_mut()[START_BLOCK].statements.insert(0, Statement {
|
||||||
source_info,
|
source_info,
|
||||||
kind: StatementKind::Retag(RetagKind::Raw, box(dropee_ptr.clone())),
|
kind: StatementKind::Retag(RetagKind::Raw, box(dropee_ptr.clone())),
|
||||||
});
|
});
|
||||||
|
@ -215,8 +217,8 @@ fn build_drop_shim<'tcx>(tcx: TyCtxt<'tcx>, def_id: DefId, ty: Option<Ty<'tcx>>)
|
||||||
let patch = {
|
let patch = {
|
||||||
let param_env = tcx.param_env(def_id).with_reveal_all();
|
let param_env = tcx.param_env(def_id).with_reveal_all();
|
||||||
let mut elaborator = DropShimElaborator {
|
let mut elaborator = DropShimElaborator {
|
||||||
body: &body,
|
body: body_cache.body(),
|
||||||
patch: MirPatch::new(&body),
|
patch: MirPatch::new(body_cache.body()),
|
||||||
tcx,
|
tcx,
|
||||||
param_env
|
param_env
|
||||||
};
|
};
|
||||||
|
@ -233,9 +235,10 @@ fn build_drop_shim<'tcx>(tcx: TyCtxt<'tcx>, def_id: DefId, ty: Option<Ty<'tcx>>)
|
||||||
);
|
);
|
||||||
elaborator.patch
|
elaborator.patch
|
||||||
};
|
};
|
||||||
patch.apply(&mut body);
|
patch.apply(&mut body_cache);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO(pfaia) return owning body cache...
|
||||||
body
|
body
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
//! Def-use analysis.
|
//! Def-use analysis.
|
||||||
|
|
||||||
use rustc::mir::{Body, Local, Location, PlaceElem, VarDebugInfo};
|
use rustc::mir::{Body, BodyCache, Local, Location, PlaceElem, ReadOnlyBodyCache, VarDebugInfo};
|
||||||
use rustc::mir::visit::{PlaceContext, MutVisitor, Visitor};
|
use rustc::mir::visit::{PlaceContext, MutVisitor, Visitor};
|
||||||
use rustc::ty::TyCtxt;
|
use rustc::ty::TyCtxt;
|
||||||
use rustc_index::vec::IndexVec;
|
use rustc_index::vec::IndexVec;
|
||||||
|
@ -30,7 +30,7 @@ impl DefUseAnalysis {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn analyze(&mut self, body: &Body<'_>) {
|
pub fn analyze(&mut self, body_cache: &ReadOnlyBodyCache<'_, '_>) {
|
||||||
self.clear();
|
self.clear();
|
||||||
|
|
||||||
let mut finder = DefUseFinder {
|
let mut finder = DefUseFinder {
|
||||||
|
@ -38,7 +38,7 @@ impl DefUseAnalysis {
|
||||||
var_debug_info_index: 0,
|
var_debug_info_index: 0,
|
||||||
in_var_debug_info: false,
|
in_var_debug_info: false,
|
||||||
};
|
};
|
||||||
finder.visit_body(body);
|
finder.visit_body(body_cache);
|
||||||
self.info = finder.info
|
self.info = finder.info
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,28 +55,28 @@ impl DefUseAnalysis {
|
||||||
fn mutate_defs_and_uses(
|
fn mutate_defs_and_uses(
|
||||||
&self,
|
&self,
|
||||||
local: Local,
|
local: Local,
|
||||||
body: &mut Body<'tcx>,
|
body_cache: &mut BodyCache<&mut Body<'tcx>>,
|
||||||
new_local: Local,
|
new_local: Local,
|
||||||
tcx: TyCtxt<'tcx>,
|
tcx: TyCtxt<'tcx>,
|
||||||
) {
|
) {
|
||||||
let mut visitor = MutateUseVisitor::new(local, new_local, body, tcx);
|
let mut visitor = MutateUseVisitor::new(local, new_local, tcx);
|
||||||
let info = &self.info[local];
|
let info = &self.info[local];
|
||||||
for place_use in &info.defs_and_uses {
|
for place_use in &info.defs_and_uses {
|
||||||
visitor.visit_location(body, place_use.location)
|
visitor.visit_location(body_cache, place_use.location)
|
||||||
}
|
}
|
||||||
// Update debuginfo as well, alongside defs/uses.
|
// Update debuginfo as well, alongside defs/uses.
|
||||||
for &i in &info.var_debug_info_indices {
|
for &i in &info.var_debug_info_indices {
|
||||||
visitor.visit_var_debug_info(&mut body.var_debug_info[i]);
|
visitor.visit_var_debug_info(&mut body_cache.var_debug_info[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME(pcwalton): this should update the def-use chains.
|
// FIXME(pcwalton): this should update the def-use chains.
|
||||||
pub fn replace_all_defs_and_uses_with(&self,
|
pub fn replace_all_defs_and_uses_with(&self,
|
||||||
local: Local,
|
local: Local,
|
||||||
body: &mut Body<'tcx>,
|
body_cache: &mut BodyCache<&mut Body<'tcx>>,
|
||||||
new_local: Local,
|
new_local: Local,
|
||||||
tcx: TyCtxt<'tcx>) {
|
tcx: TyCtxt<'tcx>) {
|
||||||
self.mutate_defs_and_uses(local, body, new_local, tcx)
|
self.mutate_defs_and_uses(local, body_cache, new_local, tcx)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -156,7 +156,6 @@ impl MutateUseVisitor<'tcx> {
|
||||||
fn new(
|
fn new(
|
||||||
query: Local,
|
query: Local,
|
||||||
new_local: Local,
|
new_local: Local,
|
||||||
_: &Body<'tcx>,
|
|
||||||
tcx: TyCtxt<'tcx>,
|
tcx: TyCtxt<'tcx>,
|
||||||
) -> MutateUseVisitor<'tcx> {
|
) -> MutateUseVisitor<'tcx> {
|
||||||
MutateUseVisitor { query, new_local, tcx }
|
MutateUseVisitor { query, new_local, tcx }
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue