Fix cases where std accidentally relied on inline(never)
This commit is contained in:
parent
2b399b5275
commit
e559172249
4 changed files with 37 additions and 11 deletions
|
@ -22,6 +22,18 @@ fn cross_crate_inlinable(tcx: TyCtxt<'_>, def_id: LocalDefId) -> bool {
|
|||
return false;
|
||||
}
|
||||
|
||||
// This just reproduces the logic from Instance::requires_inline.
|
||||
match tcx.def_kind(def_id) {
|
||||
DefKind::Ctor(..) | DefKind::Closure => return true,
|
||||
DefKind::Fn | DefKind::AssocFn => {}
|
||||
_ => return false,
|
||||
}
|
||||
|
||||
// From this point on, it is valid to return true or false.
|
||||
if tcx.sess.opts.unstable_opts.cross_crate_inline_threshold == InliningThreshold::Always {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Obey source annotations first; this is important because it means we can use
|
||||
// #[inline(never)] to force code generation.
|
||||
match codegen_fn_attrs.inline {
|
||||
|
@ -30,13 +42,6 @@ fn cross_crate_inlinable(tcx: TyCtxt<'_>, def_id: LocalDefId) -> bool {
|
|||
_ => {}
|
||||
}
|
||||
|
||||
// This just reproduces the logic from Instance::requires_inline.
|
||||
match tcx.def_kind(def_id) {
|
||||
DefKind::Ctor(..) | DefKind::Closure => return true,
|
||||
DefKind::Fn | DefKind::AssocFn => {}
|
||||
_ => return false,
|
||||
}
|
||||
|
||||
// Don't do any inference when incremental compilation is enabled; the additional inlining that
|
||||
// inference permits also creates more work for small edits.
|
||||
if tcx.sess.opts.incremental.is_some() {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue