@@ -10,7 +10,7 @@ use rustc_middle::middle::codegen_fn_attrs::{CodegenFnAttrFlags, CodegenFnAttrs}
1010use rustc_middle:: mir:: visit:: * ;
1111use rustc_middle:: mir:: * ;
1212use rustc_middle:: ty:: TypeVisitableExt ;
13- use rustc_middle:: ty:: { self , Instance , InstanceDef , ParamEnv , Ty , TyCtxt } ;
13+ use rustc_middle:: ty:: { self , Instance , InstanceDef , ParamEnv , Ty , TyCtxt , TypeFlags } ;
1414use rustc_session:: config:: { DebugInfo , OptLevel } ;
1515use rustc_span:: source_map:: Spanned ;
1616use rustc_span:: sym;
@@ -320,6 +320,16 @@ impl<'tcx> Inliner<'tcx> {
320320 InstanceDef :: Intrinsic ( _) | InstanceDef :: Virtual ( ..) => {
321321 return Err ( "instance without MIR (intrinsic / virtual)" ) ;
322322 }
323+
324+ // FIXME(#127030): `ConstParamHasTy` has bad interactions with
325+ // the drop shim builder, which does not evaluate predicates in
326+ // the correct param-env for types being dropped. Stall resolving
327+ // the MIR for this instance until all of its const params are
328+ // substituted.
329+ InstanceDef :: DropGlue ( _, Some ( ty) ) if ty. has_type_flags ( TypeFlags :: HAS_CT_PARAM ) => {
330+ return Err ( "still needs substitution" ) ;
331+ }
332+
323333 // This cannot result in an immediate cycle since the callee MIR is a shim, which does
324334 // not get any optimizations run on it. Any subsequent inlining may cause cycles, but we
325335 // do not need to catch this here, we can wait until the inliner decides to continue
0 commit comments