@@ -3046,7 +3046,7 @@ impl<'a, 'db: 'a> Evaluator<'a, 'db> {
30463046 ty : Ty < ' db > ,
30473047 locals : & Locals < ' a > ,
30483048 addr : Address ,
3049- _metadata : & [ u8 ] ,
3049+ metadata : & [ u8 ] ,
30503050 span : MirSpan ,
30513051 ) -> Result < ' db , ( ) > {
30523052 let Some ( drop_fn) = self . lang_items ( ) . Drop_drop else {
@@ -3056,13 +3056,23 @@ impl<'a, 'db: 'a> Evaluator<'a, 'db> {
30563056 } ;
30573057
30583058 let generic_args = GenericArgs :: new_from_slice ( & [ ty. into ( ) ] ) ;
3059- if let Ok ( MirOrDynIndex :: Mir ( body) ) =
3060- self . get_mir_or_dyn_index ( drop_fn, generic_args, locals, span)
3059+ let ( drop_impl, drop_args) = self . db . lookup_impl_method (
3060+ ParamEnvAndCrate { param_env : self . param_env . param_env , krate : self . crate_id } ,
3061+ drop_fn,
3062+ generic_args,
3063+ ) ;
3064+ if let Either :: Left ( drop_impl) = drop_impl
3065+ && matches ! ( drop_impl. lookup( self . db) . container, ItemContainerId :: ImplId ( _) )
3066+ && let Ok ( body) = self . db . monomorphized_mir_body (
3067+ drop_impl. into ( ) ,
3068+ drop_args. store ( ) ,
3069+ self . param_env . store ( ) ,
3070+ )
30613071 {
30623072 self . exec_looked_up_function (
30633073 body,
30643074 locals,
3065- drop_fn ,
3075+ drop_impl ,
30663076 iter:: once ( IntervalOrOwned :: Owned ( addr. to_bytes ( ) . to_vec ( ) ) ) ,
30673077 span,
30683078 Interval { addr : Address :: Invalid ( 0 ) , size : 0 } ,
@@ -3103,6 +3113,12 @@ impl<'a, 'db: 'a> Evaluator<'a, 'db> {
31033113 AdtId :: EnumId ( _) => ( ) ,
31043114 }
31053115 }
3116+ TyKind :: Dynamic ( ..) => {
3117+ if !metadata. is_empty ( ) {
3118+ let concrete_ty = self . vtable_map . ty_of_bytes ( metadata) ?;
3119+ self . run_drop_glue_deep ( concrete_ty, locals, addr, & [ ] , span) ?;
3120+ }
3121+ }
31063122 TyKind :: Bool
31073123 | TyKind :: Char
31083124 | TyKind :: Int ( _)
@@ -3125,7 +3141,6 @@ impl<'a, 'db: 'a> Evaluator<'a, 'db> {
31253141 | TyKind :: Error ( _)
31263142 | TyKind :: Param ( _)
31273143 | TyKind :: Placeholder ( _)
3128- | TyKind :: Dynamic ( ..)
31293144 | TyKind :: FnPtr ( ..)
31303145 | TyKind :: Bound ( ..)
31313146 | TyKind :: Infer ( ..)
0 commit comments