Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-ty/src/mir/eval/shim.rs')
-rw-r--r--crates/hir-ty/src/mir/eval/shim.rs11
1 files changed, 10 insertions, 1 deletions
diff --git a/crates/hir-ty/src/mir/eval/shim.rs b/crates/hir-ty/src/mir/eval/shim.rs
index 38b189a517..7d3376f56b 100644
--- a/crates/hir-ty/src/mir/eval/shim.rs
+++ b/crates/hir-ty/src/mir/eval/shim.rs
@@ -11,6 +11,7 @@ use hir_def::{
};
use hir_expand::name::Name;
use intern::{sym, Symbol};
+use stdx::never;
use crate::{
error_lifetime,
@@ -20,6 +21,7 @@ use crate::{
LangItem, Layout, Locals, Lookup, MirEvalError, MirSpan, Mutability, Result, Substitution,
Ty, TyBuilder, TyExt,
},
+ DropGlue,
};
mod simd;
@@ -853,7 +855,14 @@ impl Evaluator<'_> {
"size_of generic arg is not provided".into(),
));
};
- let result = !ty.clone().is_copy(self.db, locals.body.owner);
+ let result = match self.db.has_drop_glue(ty.clone(), self.trait_env.clone()) {
+ DropGlue::HasDropGlue => true,
+ DropGlue::None => false,
+ DropGlue::DependOnParams => {
+ never!("should be fully monomorphized now");
+ true
+ }
+ };
destination.write_from_bytes(self, &[u8::from(result)])
}
"ptr_guaranteed_cmp" => {