test "needs drop" on region-erased, lifted types
This will be important in next commit, since the input types will be tagged not with `'gcx` but rather `'tcx`. Also, using the region-erased, lifted types enables better caching.
This commit is contained in:
parent
b2c248efea
commit
82b287a8c8
@ -151,7 +151,9 @@ pub(crate) fn on_all_drop_children_bits<'a, 'tcx, F>(
|
||||
let ty = lvalue.ty(mir, tcx).to_ty(tcx);
|
||||
debug!("on_all_drop_children_bits({:?}, {:?} : {:?})", path, lvalue, ty);
|
||||
|
||||
if ty.needs_drop(tcx, ctxt.param_env) {
|
||||
let gcx = tcx.global_tcx();
|
||||
let erased_ty = gcx.lift(&tcx.erase_regions(&ty)).unwrap();
|
||||
if erased_ty.needs_drop(gcx, ctxt.param_env) {
|
||||
each_child(child);
|
||||
} else {
|
||||
debug!("on_all_drop_children_bits - skipping")
|
||||
@ -196,7 +198,9 @@ pub(crate) fn drop_flag_effects_for_location<'a, 'tcx, F>(
|
||||
// don't move out of non-Copy things
|
||||
let lvalue = &move_data.move_paths[path].lvalue;
|
||||
let ty = lvalue.ty(mir, tcx).to_ty(tcx);
|
||||
if !ty.moves_by_default(tcx, param_env, DUMMY_SP) {
|
||||
let gcx = tcx.global_tcx();
|
||||
let erased_ty = gcx.lift(&tcx.erase_regions(&ty)).unwrap();
|
||||
if !erased_ty.moves_by_default(gcx, param_env, DUMMY_SP) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -352,8 +352,10 @@ impl<'b, 'a, 'tcx> Gatherer<'b, 'a, 'tcx> {
|
||||
debug!("gather_move({:?}, {:?})", self.loc, lval);
|
||||
|
||||
let tcx = self.builder.tcx;
|
||||
let gcx = tcx.global_tcx();
|
||||
let lv_ty = lval.ty(self.builder.mir, tcx).to_ty(tcx);
|
||||
if !lv_ty.moves_by_default(tcx, self.builder.param_env, DUMMY_SP) {
|
||||
let erased_ty = gcx.lift(&tcx.erase_regions(&lv_ty)).unwrap();
|
||||
if !erased_ty.moves_by_default(gcx, self.builder.param_env, DUMMY_SP) {
|
||||
debug!("gather_move({:?}, {:?}) - {:?} is Copy. skipping", self.loc, lval, lv_ty);
|
||||
return
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user