diff options
| author | bjorn3 <17426603+bjorn3@users.noreply.github.com> | 2024-12-12 19:51:37 +0000 | 
|---|---|---|
| committer | bjorn3 <17426603+bjorn3@users.noreply.github.com> | 2025-04-14 09:38:02 +0000 | 
| commit | a73eba99f7811fb0aec548ccf382ae7a2c77135f (patch) | |
| tree | 5682e85e7c9f111687f743954aaa2ffe5e17b516 | |
| parent | 764d3a50a318c22fd0145b1837ad32cf69bf7d28 (diff) | |
| download | rust-a73eba99f7811fb0aec548ccf382ae7a2c77135f.tar.gz rust-a73eba99f7811fb0aec548ccf382ae7a2c77135f.zip  | |
Move codegen_naked_asm call up into MonoItem::define
| -rw-r--r-- | compiler/rustc_codegen_ssa/src/mir/mod.rs | 7 | ||||
| -rw-r--r-- | compiler/rustc_codegen_ssa/src/mir/naked_asm.rs | 3 | ||||
| -rw-r--r-- | compiler/rustc_codegen_ssa/src/mono_item.rs | 12 | 
3 files changed, 14 insertions, 8 deletions
diff --git a/compiler/rustc_codegen_ssa/src/mir/mod.rs b/compiler/rustc_codegen_ssa/src/mir/mod.rs index 9c89b284104..8c90d764f29 100644 --- a/compiler/rustc_codegen_ssa/src/mir/mod.rs +++ b/compiler/rustc_codegen_ssa/src/mir/mod.rs @@ -20,7 +20,7 @@ mod coverageinfo; pub mod debuginfo; mod intrinsic; mod locals; -mod naked_asm; +pub(crate) mod naked_asm; pub mod operand; pub mod place; mod rvalue; @@ -170,11 +170,6 @@ pub fn codegen_mir<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>>( ) { assert!(!instance.args.has_infer()); - if cx.tcx().codegen_fn_attrs(instance.def_id()).flags.contains(CodegenFnAttrFlags::NAKED) { - crate::mir::naked_asm::codegen_naked_asm::<Bx::CodegenCx>(cx, instance); - return; - } - let tcx = cx.tcx(); let llfn = cx.get_fn(instance); diff --git a/compiler/rustc_codegen_ssa/src/mir/naked_asm.rs b/compiler/rustc_codegen_ssa/src/mir/naked_asm.rs index 7490fdf7166..f25c9195415 100644 --- a/compiler/rustc_codegen_ssa/src/mir/naked_asm.rs +++ b/compiler/rustc_codegen_ssa/src/mir/naked_asm.rs @@ -4,7 +4,7 @@ use rustc_hir::def_id::DefId; use rustc_middle::mir::mono::{Linkage, MonoItem, MonoItemData, Visibility}; use rustc_middle::mir::{InlineAsmOperand, START_BLOCK}; use rustc_middle::ty::layout::{FnAbiOf, LayoutOf, TyAndLayout}; -use rustc_middle::ty::{Instance, Ty, TyCtxt}; +use rustc_middle::ty::{Instance, Ty, TyCtxt, TypeVisitableExt}; use rustc_middle::{bug, span_bug, ty}; use rustc_span::sym; use rustc_target::callconv::{ArgAbi, FnAbi, PassMode}; @@ -25,6 +25,7 @@ pub(crate) fn codegen_naked_asm< cx: &'a Cx, instance: Instance<'tcx>, ) { + assert!(!instance.args.has_infer()); let mir = cx.tcx().instance_mir(instance.def); let rustc_middle::mir::TerminatorKind::InlineAsm { diff --git a/compiler/rustc_codegen_ssa/src/mono_item.rs b/compiler/rustc_codegen_ssa/src/mono_item.rs index f6af889fd6e..57e7b02196e 100644 --- a/compiler/rustc_codegen_ssa/src/mono_item.rs +++ b/compiler/rustc_codegen_ssa/src/mono_item.rs @@ -7,6 +7,7 @@ use rustc_middle::ty::layout::{HasTyCtxt, LayoutOf}; use rustc_middle::{span_bug, ty}; use tracing::debug; +use crate::mir::naked_asm; use crate::traits::*; use crate::{base, common}; @@ -99,7 +100,16 @@ impl<'a, 'tcx: 'a> MonoItemExt<'a, 'tcx> for MonoItem<'tcx> { } } MonoItem::Fn(instance) => { - base::codegen_instance::<Bx>(cx, instance); + if cx + .tcx() + .codegen_fn_attrs(instance.def_id()) + .flags + .contains(CodegenFnAttrFlags::NAKED) + { + naked_asm::codegen_naked_asm::<Bx::CodegenCx>(cx, instance); + } else { + base::codegen_instance::<Bx>(cx, instance); + } } }  | 
