nit: Inline may_need_drop

This commit is contained in:
Michael Goulet 2022-10-19 05:33:02 +00:00
parent 5b06898d21
commit 134de38e4d

View File

@ -377,19 +377,6 @@ fn visit_expr(&mut self, expr: &'tcx Expr<'tcx>) {
debug!("is_borrowed_temporary: {:?}", self.drop_ranges.is_borrowed_temporary(expr)); debug!("is_borrowed_temporary: {:?}", self.drop_ranges.is_borrowed_temporary(expr));
let ty = self.fcx.typeck_results.borrow().expr_ty_adjusted_opt(expr); let ty = self.fcx.typeck_results.borrow().expr_ty_adjusted_opt(expr);
let may_need_drop = |ty: Ty<'tcx>| {
// Avoid ICEs in needs_drop.
let ty = self.fcx.resolve_vars_if_possible(ty);
let ty = self.fcx.tcx.erase_regions(ty);
if ty.needs_infer() {
self.fcx
.tcx
.sess
.delay_span_bug(expr.span, &format!("inference variables in {ty}"));
return true;
}
ty.needs_drop(self.fcx.tcx, self.fcx.param_env)
};
// Typically, the value produced by an expression is consumed by its parent in some way, // Typically, the value produced by an expression is consumed by its parent in some way,
// so we only have to check if the parent contains a yield (note that the parent may, for // so we only have to check if the parent contains a yield (note that the parent may, for
@ -407,9 +394,18 @@ fn visit_expr(&mut self, expr: &'tcx Expr<'tcx>) {
// src/test/ui/generator/drop-tracking-parent-expression.rs. // src/test/ui/generator/drop-tracking-parent-expression.rs.
let scope = if self.drop_ranges.is_borrowed_temporary(expr) let scope = if self.drop_ranges.is_borrowed_temporary(expr)
|| ty.map_or(true, |ty| { || ty.map_or(true, |ty| {
let needs_drop = may_need_drop(ty); // Avoid ICEs in needs_drop.
debug!(?needs_drop, ?ty); let ty = self.fcx.resolve_vars_if_possible(ty);
needs_drop let ty = self.fcx.tcx.erase_regions(ty);
if ty.needs_infer() {
self.fcx
.tcx
.sess
.delay_span_bug(expr.span, &format!("inference variables in {ty}"));
true
} else {
ty.needs_drop(self.fcx.tcx, self.fcx.param_env)
}
}) { }) {
self.rvalue_scopes.temporary_scope(self.region_scope_tree, expr.hir_id.local_id) self.rvalue_scopes.temporary_scope(self.region_scope_tree, expr.hir_id.local_id)
} else { } else {