Skip to content

Commit e081b7b

Browse files
Better reasons for inline failure
1 parent e16a049 commit e081b7b

File tree

1 file changed

+8
-9
lines changed

1 file changed

+8
-9
lines changed

compiler/rustc_mir_transform/src/inline.rs

+8-9
Original file line numberDiff line numberDiff line change
@@ -606,14 +606,14 @@ fn try_inlining<'tcx, I: Inliner<'tcx>>(
606606
ty::EarlyBinder::bind(callee_body.clone()),
607607
) else {
608608
debug!("failed to normalize callee body");
609-
return Err("implementation limitation");
609+
return Err("implementation limitation -- could not normalize callee body");
610610
};
611611

612612
// Normally, this shouldn't be required, but trait normalization failure can create a
613613
// validation ICE.
614614
if !validate_types(tcx, inliner.typing_env(), &callee_body, &caller_body).is_empty() {
615615
debug!("failed to validate callee body");
616-
return Err("implementation limitation");
616+
return Err("implementation limitation -- callee body failed validation");
617617
}
618618

619619
// Check call signature compatibility.
@@ -622,8 +622,7 @@ fn try_inlining<'tcx, I: Inliner<'tcx>>(
622622
let output_type = callee_body.return_ty();
623623
if !util::sub_types(tcx, inliner.typing_env(), output_type, destination_ty) {
624624
trace!(?output_type, ?destination_ty);
625-
debug!("failed to normalize return type");
626-
return Err("implementation limitation");
625+
return Err("implementation limitation -- return type mismatch");
627626
}
628627
if callsite.fn_sig.abi() == ExternAbi::RustCall {
629628
// FIXME: Don't inline user-written `extern "rust-call"` functions,
@@ -653,7 +652,7 @@ fn try_inlining<'tcx, I: Inliner<'tcx>>(
653652
if !util::sub_types(tcx, inliner.typing_env(), input_type, arg_ty) {
654653
trace!(?arg_ty, ?input_type);
655654
debug!("failed to normalize tuple argument type");
656-
return Err("implementation limitation");
655+
return Err("implementation limitation -- arg mismatch");
657656
}
658657
}
659658
} else {
@@ -663,7 +662,7 @@ fn try_inlining<'tcx, I: Inliner<'tcx>>(
663662
if !util::sub_types(tcx, inliner.typing_env(), input_type, arg_ty) {
664663
trace!(?arg_ty, ?input_type);
665664
debug!("failed to normalize argument type");
666-
return Err("implementation limitation");
665+
return Err("implementation limitation -- arg mismatch");
667666
}
668667
}
669668
}
@@ -693,13 +692,13 @@ fn check_mir_is_available<'tcx, I: Inliner<'tcx>>(
693692
// won't cause cycles on this.
694693
if !inliner.tcx().is_mir_available(callee_def_id) {
695694
debug!("item MIR unavailable");
696-
return Err("implementation limitation");
695+
return Err("implementation limitation -- MIR unavailable");
697696
}
698697
}
699698
// These have no own callable MIR.
700699
InstanceKind::Intrinsic(_) | InstanceKind::Virtual(..) => {
701700
debug!("instance without MIR (intrinsic / virtual)");
702-
return Err("implementation limitation");
701+
return Err("implementation limitation -- cannot inline intrinsic");
703702
}
704703

705704
// FIXME(#127030): `ConstParamHasTy` has bad interactions with
@@ -709,7 +708,7 @@ fn check_mir_is_available<'tcx, I: Inliner<'tcx>>(
709708
// substituted.
710709
InstanceKind::DropGlue(_, Some(ty)) if ty.has_type_flags(TypeFlags::HAS_CT_PARAM) => {
711710
debug!("still needs substitution");
712-
return Err("implementation limitation");
711+
return Err("implementation limitation -- HACK for dropping polymorphic type");
713712
}
714713

715714
// This cannot result in an immediate cycle since the callee MIR is a shim, which does

0 commit comments

Comments
 (0)