Remove special handling of box_free
from LocalAnalyzer
The special casing of `box_free` predates the use of dominators in analyzer. It is no longer necessary now that analyzer verifies that the first assignment dominates all uses.
This commit is contained in:
parent
6a3dce99f6
commit
76695c41da
1 changed files with 0 additions and 29 deletions
|
@ -11,7 +11,6 @@ use rustc_middle::mir::visit::{
|
||||||
MutatingUseContext, NonMutatingUseContext, NonUseContext, PlaceContext, Visitor,
|
MutatingUseContext, NonMutatingUseContext, NonUseContext, PlaceContext, Visitor,
|
||||||
};
|
};
|
||||||
use rustc_middle::mir::{self, Location, TerminatorKind};
|
use rustc_middle::mir::{self, Location, TerminatorKind};
|
||||||
use rustc_middle::ty;
|
|
||||||
use rustc_middle::ty::layout::HasTyCtxt;
|
use rustc_middle::ty::layout::HasTyCtxt;
|
||||||
use rustc_target::abi::LayoutOf;
|
use rustc_target::abi::LayoutOf;
|
||||||
|
|
||||||
|
@ -228,34 +227,6 @@ impl<'mir, 'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> Visitor<'tcx>
|
||||||
self.visit_rvalue(rvalue, location);
|
self.visit_rvalue(rvalue, location);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn visit_terminator(&mut self, terminator: &mir::Terminator<'tcx>, location: Location) {
|
|
||||||
let check = match terminator.kind {
|
|
||||||
mir::TerminatorKind::Call { func: mir::Operand::Constant(ref c), ref args, .. } => {
|
|
||||||
match *c.ty().kind() {
|
|
||||||
ty::FnDef(did, _) => Some((did, args)),
|
|
||||||
_ => None,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_ => None,
|
|
||||||
};
|
|
||||||
if let Some((def_id, args)) = check {
|
|
||||||
if Some(def_id) == self.fx.cx.tcx().lang_items().box_free_fn() {
|
|
||||||
// box_free(x) shares with `drop x` the property that it
|
|
||||||
// is not guaranteed to be statically dominated by the
|
|
||||||
// definition of x, so x must always be in an alloca.
|
|
||||||
if let mir::Operand::Move(ref place) = args[0] {
|
|
||||||
self.visit_place(
|
|
||||||
place,
|
|
||||||
PlaceContext::MutatingUse(MutatingUseContext::Drop),
|
|
||||||
location,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
self.super_terminator(terminator, location);
|
|
||||||
}
|
|
||||||
|
|
||||||
fn visit_place(&mut self, place: &mir::Place<'tcx>, context: PlaceContext, location: Location) {
|
fn visit_place(&mut self, place: &mir::Place<'tcx>, context: PlaceContext, location: Location) {
|
||||||
debug!("visit_place(place={:?}, context={:?})", place, context);
|
debug!("visit_place(place={:?}, context={:?})", place, context);
|
||||||
self.process_place(&place.as_ref(), context, location);
|
self.process_place(&place.as_ref(), context, location);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue