Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-ty/src/drop.rs')
-rw-r--r--crates/hir-ty/src/drop.rs13
1 files changed, 10 insertions, 3 deletions
diff --git a/crates/hir-ty/src/drop.rs b/crates/hir-ty/src/drop.rs
index 413f70532a..0618fd17d5 100644
--- a/crates/hir-ty/src/drop.rs
+++ b/crates/hir-ty/src/drop.rs
@@ -8,7 +8,7 @@ use stdx::never;
use triomphe::Arc;
use crate::next_solver::DbInterner;
-use crate::next_solver::mapping::NextSolverToChalk;
+use crate::next_solver::mapping::{ChalkToNextSolver, NextSolverToChalk};
use crate::{
AliasTy, Canonical, CanonicalVarKinds, ConcreteConst, ConstScalar, ConstValue, InEnvironment,
Interner, ProjectionTy, TraitEnvironment, Ty, TyBuilder, TyKind, db::HirDatabase,
@@ -120,13 +120,20 @@ pub(crate) fn has_drop_glue(
}
TyKind::Slice(ty) => db.has_drop_glue(ty.clone(), env),
TyKind::Closure(closure_id, subst) => {
- let owner = db.lookup_intern_closure((*closure_id).into()).0;
+ let closure_id = (*closure_id).into();
+ let owner = db.lookup_intern_closure(closure_id).0;
let infer = db.infer(owner);
let (captures, _) = infer.closure_info(closure_id);
let env = db.trait_environment_for_body(owner);
+ let interner = DbInterner::conjure();
captures
.iter()
- .map(|capture| db.has_drop_glue(capture.ty(db, subst), env.clone()))
+ .map(|capture| {
+ db.has_drop_glue(
+ capture.ty(db, subst.to_nextsolver(interner)).to_chalk(interner),
+ env.clone(),
+ )
+ })
.max()
.unwrap_or(DropGlue::None)
}