Skip to content

Commit 4e9b107

Browse files
committed
use codegen_instance_attrs where an instance is (easily) available
1 parent 8d83f6c commit 4e9b107

File tree

15 files changed

+31
-24
lines changed

15 files changed

+31
-24
lines changed

compiler/rustc_codegen_cranelift/src/driver/jit.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ fn codegen_and_compile_fn<'tcx>(
127127
module: &mut dyn Module,
128128
instance: Instance<'tcx>,
129129
) {
130-
if tcx.codegen_fn_attrs(instance.def_id()).flags.contains(CodegenFnAttrFlags::NAKED) {
130+
if tcx.codegen_instance_attrs(instance.def).flags.contains(CodegenFnAttrFlags::NAKED) {
131131
tcx.dcx()
132132
.span_fatal(tcx.def_span(instance.def_id()), "Naked asm is not supported in JIT mode");
133133
}

compiler/rustc_codegen_cranelift/src/driver/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ fn predefine_mono_items<'tcx>(
3535
is_compiler_builtins,
3636
);
3737
let is_naked = tcx
38-
.codegen_fn_attrs(instance.def_id())
38+
.codegen_instance_attrs(instance.def)
3939
.flags
4040
.contains(CodegenFnAttrFlags::NAKED);
4141
module

compiler/rustc_codegen_gcc/src/attributes.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ pub fn from_fn_attrs<'gcc, 'tcx>(
8787
#[cfg_attr(not(feature = "master"), allow(unused_variables))] func: Function<'gcc>,
8888
instance: ty::Instance<'tcx>,
8989
) {
90-
let codegen_fn_attrs = cx.tcx.codegen_fn_attrs(instance.def_id());
90+
let codegen_fn_attrs = cx.tcx.codegen_instance_attrs(instance.def);
9191

9292
#[cfg(feature = "master")]
9393
{

compiler/rustc_codegen_gcc/src/callee.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ pub fn get_fn<'gcc, 'tcx>(cx: &CodegenCx<'gcc, 'tcx>, instance: Instance<'tcx>)
105105
let is_hidden = if is_generic {
106106
// This is a monomorphization of a generic function.
107107
if !(cx.tcx.sess.opts.share_generics()
108-
|| tcx.codegen_fn_attrs(instance_def_id).inline
108+
|| tcx.codegen_instance_attrs(instance.def).inline
109109
== rustc_attr_data_structures::InlineAttr::Never)
110110
{
111111
// When not sharing generics, all instances are in the same

compiler/rustc_codegen_gcc/src/mono_item.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ impl<'gcc, 'tcx> PreDefineCodegenMethods<'tcx> for CodegenCx<'gcc, 'tcx> {
5353
let fn_abi = self.fn_abi_of_instance(instance, ty::List::empty());
5454
self.linkage.set(base::linkage_to_gcc(linkage));
5555
let decl = self.declare_fn(symbol_name, fn_abi);
56-
//let attrs = self.tcx.codegen_fn_attrs(instance.def_id());
56+
//let attrs = self.tcx.codegen_instance_attrs(instance.def);
5757

5858
attributes::from_fn_attrs(self, decl, instance);
5959

compiler/rustc_codegen_llvm/src/attributes.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -344,7 +344,7 @@ pub(crate) fn llfn_attrs_from_instance<'ll, 'tcx>(
344344
llfn: &'ll Value,
345345
instance: ty::Instance<'tcx>,
346346
) {
347-
let codegen_fn_attrs = cx.tcx.codegen_fn_attrs(instance.def_id());
347+
let codegen_fn_attrs = cx.tcx.codegen_instance_attrs(instance.def);
348348

349349
let mut to_add = SmallVec::<[_; 16]>::new();
350350

compiler/rustc_codegen_llvm/src/callee.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ pub(crate) fn get_fn<'ll, 'tcx>(cx: &CodegenCx<'ll, 'tcx>, instance: Instance<'t
102102
let is_hidden = if is_generic {
103103
// This is a monomorphization of a generic function.
104104
if !(cx.tcx.sess.opts.share_generics()
105-
|| tcx.codegen_fn_attrs(instance_def_id).inline
105+
|| tcx.codegen_instance_attrs(instance.def).inline
106106
== rustc_attr_data_structures::InlineAttr::Never)
107107
{
108108
// When not sharing generics, all instances are in the same

compiler/rustc_codegen_llvm/src/mono_item.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,8 @@ impl<'tcx> PreDefineCodegenMethods<'tcx> for CodegenCx<'_, 'tcx> {
5555
let fn_abi = self.fn_abi_of_instance(instance, ty::List::empty());
5656
let lldecl = self.declare_fn(symbol_name, fn_abi, Some(instance));
5757
llvm::set_linkage(lldecl, base::linkage_to_llvm(linkage));
58-
let attrs = self.tcx.codegen_fn_attrs(instance.def_id());
59-
base::set_link_section(lldecl, attrs);
58+
let attrs = self.tcx.codegen_instance_attrs(instance.def);
59+
base::set_link_section(lldecl, &attrs);
6060
if (linkage == Linkage::LinkOnceODR || linkage == Linkage::WeakODR)
6161
&& self.tcx.sess.target.supports_comdat()
6262
{

compiler/rustc_codegen_ssa/src/mir/naked_asm.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ fn prefix_and_suffix<'tcx>(
128128
let is_arm = tcx.sess.target.arch == "arm";
129129
let is_thumb = tcx.sess.unstable_target_features.contains(&sym::thumb_mode);
130130

131-
let attrs = tcx.codegen_fn_attrs(instance.def_id());
131+
let attrs = tcx.codegen_instance_attrs(instance.def);
132132
let link_section = attrs.link_section.map(|symbol| symbol.as_str().to_string());
133133

134134
// If no alignment is specified, an alignment of 4 bytes is used.

compiler/rustc_codegen_ssa/src/mir/rvalue.rs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -688,11 +688,19 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
688688
let fn_abi = bx.fn_abi_of_instance(instance, ty::List::empty());
689689
let fn_ty = bx.fn_decl_backend_type(fn_abi);
690690
let fn_attrs = if bx.tcx().def_kind(instance.def_id()).has_codegen_attrs() {
691-
Some(bx.tcx().codegen_fn_attrs(instance.def_id()))
691+
Some(bx.tcx().codegen_instance_attrs(instance.def))
692692
} else {
693693
None
694694
};
695-
bx.call(fn_ty, fn_attrs, Some(fn_abi), fn_ptr, &[], None, Some(instance))
695+
bx.call(
696+
fn_ty,
697+
fn_attrs.as_deref(),
698+
Some(fn_abi),
699+
fn_ptr,
700+
&[],
701+
None,
702+
Some(instance),
703+
)
696704
} else {
697705
bx.get_static(def_id)
698706
};

compiler/rustc_codegen_ssa/src/mono_item.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ impl<'a, 'tcx: 'a> MonoItemExt<'a, 'tcx> for MonoItem<'tcx> {
7171
cx.predefine_static(def_id, linkage, visibility, symbol_name);
7272
}
7373
MonoItem::Fn(instance) => {
74-
let attrs = cx.tcx().codegen_fn_attrs(instance.def_id());
74+
let attrs = cx.tcx().codegen_instance_attrs(instance.def);
7575

7676
if attrs.flags.contains(CodegenFnAttrFlags::NAKED) {
7777
// do not define this function; it will become a global assembly block

compiler/rustc_const_eval/src/interpret/memory.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -880,7 +880,7 @@ impl<'tcx, M: Machine<'tcx>> InterpCx<'tcx, M> {
880880
if let Some(fn_val) = self.get_fn_alloc(id) {
881881
let align = match fn_val {
882882
FnVal::Instance(instance) => {
883-
self.tcx.codegen_fn_attrs(instance.def_id()).alignment.unwrap_or(Align::ONE)
883+
self.tcx.codegen_instance_attrs(instance.def).alignment.unwrap_or(Align::ONE)
884884
}
885885
// Machine-specific extra functions currently do not support alignment restrictions.
886886
FnVal::Other(_) => Align::ONE,

compiler/rustc_middle/src/mir/mono.rs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ impl<'tcx> MonoItem<'tcx> {
152152
// If the function is #[naked] or contains any other attribute that requires exactly-once
153153
// instantiation:
154154
// We emit an unused_attributes lint for this case, which should be kept in sync if possible.
155-
let codegen_fn_attrs = tcx.codegen_fn_attrs(instance.def_id());
155+
let codegen_fn_attrs = tcx.codegen_instance_attrs(instance.def);
156156
if codegen_fn_attrs.contains_extern_indicator()
157157
|| codegen_fn_attrs.flags.contains(CodegenFnAttrFlags::NAKED)
158158
{
@@ -219,7 +219,7 @@ impl<'tcx> MonoItem<'tcx> {
219219
// functions the same as those that unconditionally get LocalCopy codegen. It's only when
220220
// we get here that we can at least not codegen a #[inline(never)] generic function in all
221221
// of our CGUs.
222-
if let InlineAttr::Never = tcx.codegen_fn_attrs(instance.def_id()).inline
222+
if let InlineAttr::Never = codegen_fn_attrs.inline
223223
&& self.is_generic_fn()
224224
{
225225
return InstantiationMode::GloballyShared { may_conflict: true };
@@ -234,14 +234,13 @@ impl<'tcx> MonoItem<'tcx> {
234234
}
235235

236236
pub fn explicit_linkage(&self, tcx: TyCtxt<'tcx>) -> Option<Linkage> {
237-
let def_id = match *self {
238-
MonoItem::Fn(ref instance) => instance.def_id(),
239-
MonoItem::Static(def_id) => def_id,
237+
let instance_kind = match *self {
238+
MonoItem::Fn(ref instance) => instance.def,
239+
MonoItem::Static(def_id) => InstanceKind::Item(def_id),
240240
MonoItem::GlobalAsm(..) => return None,
241241
};
242242

243-
let codegen_fn_attrs = tcx.codegen_fn_attrs(def_id);
244-
codegen_fn_attrs.linkage
243+
tcx.codegen_instance_attrs(instance_kind).linkage
245244
}
246245

247246
/// Returns `true` if this instance is instantiable - whether it has no unsatisfied

compiler/rustc_symbol_mangling/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ fn compute_symbol_name<'tcx>(
180180

181181
// FIXME(eddyb) Precompute a custom symbol name based on attributes.
182182
let attrs = if tcx.def_kind(def_id).has_codegen_attrs() {
183-
tcx.codegen_fn_attrs(def_id)
183+
&tcx.codegen_instance_attrs(instance.def)
184184
} else {
185185
CodegenFnAttrs::EMPTY
186186
};

src/tools/miri/src/machine.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1091,7 +1091,7 @@ impl<'tcx> Machine<'tcx> for MiriMachine<'tcx> {
10911091
ecx: &MiriInterpCx<'tcx>,
10921092
instance: ty::Instance<'tcx>,
10931093
) -> InterpResult<'tcx> {
1094-
let attrs = ecx.tcx.codegen_fn_attrs(instance.def_id());
1094+
let attrs = ecx.tcx.codegen_instance_attrs(instance.def);
10951095
if attrs
10961096
.target_features
10971097
.iter()
@@ -1795,7 +1795,7 @@ impl<'tcx> Machine<'tcx> for MiriMachine<'tcx> {
17951795
ecx.tcx.sess.opts.unstable_opts.cross_crate_inline_threshold,
17961796
InliningThreshold::Always
17971797
) || !matches!(
1798-
ecx.tcx.codegen_fn_attrs(instance.def_id()).inline,
1798+
ecx.tcx.codegen_instance_attrs(instance.def).inline,
17991799
InlineAttr::Never
18001800
);
18011801
!is_generic && !can_be_inlined

0 commit comments

Comments
 (0)