@@ -10,7 +10,7 @@ use rustc_middle::middle::codegen_fn_attrs::{CodegenFnAttrFlags, CodegenFnAttrs}
10
10
use rustc_middle:: mir:: visit:: * ;
11
11
use rustc_middle:: mir:: * ;
12
12
use 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 } ;
14
14
use rustc_session:: config:: { DebugInfo , OptLevel } ;
15
15
use rustc_span:: source_map:: Spanned ;
16
16
use rustc_span:: sym;
@@ -320,6 +320,16 @@ impl<'tcx> Inliner<'tcx> {
320
320
InstanceDef :: Intrinsic ( _) | InstanceDef :: Virtual ( ..) => {
321
321
return Err ( "instance without MIR (intrinsic / virtual)" ) ;
322
322
}
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
+
323
333
// This cannot result in an immediate cycle since the callee MIR is a shim, which does
324
334
// not get any optimizations run on it. Any subsequent inlining may cause cycles, but we
325
335
// do not need to catch this here, we can wait until the inliner decides to continue
0 commit comments