From 31174e403c74194cfbe6d2ab4c1a160df6b6062f Mon Sep 17 00:00:00 2001 From: Noratrieb <48135649+Noratrieb@users.noreply.github.com> Date: Sat, 4 Oct 2025 22:15:02 +0200 Subject: [PATCH] Avoid `LocalCopy` instantiation for `#[inline]` on `-Copt-level=0` Because it is not really helpful to have downstream instantiations that we won't inline anyways (`*`) `*` This is not quite true when `#[inline]` is being used as effectively `#[likely_unused]` --- compiler/rustc_mir_transform/src/cross_crate_inline.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/compiler/rustc_mir_transform/src/cross_crate_inline.rs b/compiler/rustc_mir_transform/src/cross_crate_inline.rs index df98c07f54958..9a0e4c432b43b 100644 --- a/compiler/rustc_mir_transform/src/cross_crate_inline.rs +++ b/compiler/rustc_mir_transform/src/cross_crate_inline.rs @@ -46,7 +46,9 @@ fn cross_crate_inlinable(tcx: TyCtxt<'_>, def_id: LocalDefId) -> bool { // #[inline(never)] to force code generation. match codegen_fn_attrs.inline { InlineAttr::Never => return false, - InlineAttr::Hint | InlineAttr::Always | InlineAttr::Force { .. } => return true, + // For -Copt-level=0, we won't inline functions anyways, so there's no reason to codegen them as LocalCopy. + InlineAttr::Hint if tcx.sess.opts.optimize != OptLevel::No => return true, + InlineAttr::Always | InlineAttr::Force { .. } => return true, _ => {} }