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.rs15
1 files changed, 12 insertions, 3 deletions
diff --git a/crates/hir-ty/src/mir/eval/shim.rs b/crates/hir-ty/src/mir/eval/shim.rs
index 38b189a517..f61ecabb7e 100644
--- a/crates/hir-ty/src/mir/eval/shim.rs
+++ b/crates/hir-ty/src/mir/eval/shim.rs
@@ -11,8 +11,10 @@ use hir_def::{
};
use hir_expand::name::Name;
use intern::{sym, Symbol};
+use stdx::never;
use crate::{
+ display::DisplayTarget,
error_lifetime,
mir::eval::{
pad16, Address, AdtId, Arc, BuiltinType, Evaluator, FunctionId, HasModule, HirDisplay,
@@ -20,6 +22,7 @@ use crate::{
LangItem, Layout, Locals, Lookup, MirEvalError, MirSpan, Mutability, Result, Substitution,
Ty, TyBuilder, TyExt,
},
+ DropGlue,
};
mod simd;
@@ -833,8 +836,7 @@ impl Evaluator<'_> {
// render full paths.
Err(_) => {
let krate = locals.body.owner.krate(self.db.upcast());
- let edition = self.db.crate_graph()[krate].edition;
- ty.display(self.db, edition).to_string()
+ ty.display(self.db, DisplayTarget::from_crate(self.db, krate)).to_string()
}
};
let len = ty_name.len();
@@ -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" => {