1
Fork 0

Pass correct closure type to Qualif methods

This commit is contained in:
Dylan MacKenzie 2020-02-03 10:32:54 -08:00
parent 49ef3dac69
commit 4c5ca44b92
2 changed files with 11 additions and 5 deletions

View file

@ -71,8 +71,13 @@ where
return_place: &mir::Place<'tcx>,
) {
let return_ty = return_place.ty(*self.item.body, self.item.tcx).ty;
let qualif =
Q::in_call(self.item, &|l| self.qualifs_per_local.contains(l), func, args, return_ty);
let qualif = Q::in_call(
self.item,
&mut |l| self.qualifs_per_local.contains(l),
func,
args,
return_ty,
);
if !return_place.is_indirect() {
self.assign_qualif_direct(return_place, qualif);
}
@ -105,7 +110,7 @@ where
rvalue: &mir::Rvalue<'tcx>,
location: Location,
) {
let qualif = Q::in_rvalue(self.item, &|l| self.qualifs_per_local.contains(l), rvalue);
let qualif = Q::in_rvalue(self.item, &mut |l| self.qualifs_per_local.contains(l), rvalue);
if !place.is_indirect() {
self.assign_qualif_direct(place, qualif);
}
@ -120,7 +125,8 @@ where
// here; that occurs in `apply_call_return_effect`.
if let mir::TerminatorKind::DropAndReplace { value, location: dest, .. } = kind {
let qualif = Q::in_operand(self.item, &|l| self.qualifs_per_local.contains(l), value);
let qualif =
Q::in_operand(self.item, &mut |l| self.qualifs_per_local.contains(l), value);
if !dest.is_indirect() {
self.assign_qualif_direct(dest, qualif);
}

View file

@ -407,7 +407,7 @@ impl<'tcx> Validator<'_, 'tcx> {
// FIXME(eddyb) maybe cache this?
fn qualif_local<Q: qualifs::Qualif>(&self, local: Local) -> bool {
let per_local = &|l| self.qualif_local::<Q>(l);
let per_local = &mut |l| self.qualif_local::<Q>(l);
if let TempState::Defined { location: loc, .. } = self.temps[local] {
let num_stmts = self.body[loc.block].statements.len();