Skip to content

Commit cf738f6

Browse files
committed
Revert "add LinkageInfo to keep track of how we figured out the linkage"
This reverts commit 9142cae.
1 parent 64420b6 commit cf738f6

File tree

8 files changed

+34
-64
lines changed

8 files changed

+34
-64
lines changed

compiler/rustc_codegen_cranelift/src/driver/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ fn predefine_mono_items<'tcx>(
3030
get_function_sig(tcx, module.target_config().default_call_conv, instance);
3131
let linkage = crate::linkage::get_clif_linkage(
3232
mono_item,
33-
data.linkage_info.into_linkage(),
33+
data.linkage,
3434
data.visibility,
3535
is_compiler_builtins,
3636
);

compiler/rustc_codegen_gcc/src/base.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ pub fn compile_codegen_unit(
213213

214214
let mono_items = cgu.items_in_deterministic_order(tcx);
215215
for &(mono_item, data) in &mono_items {
216-
mono_item.predefine::<Builder<'_, '_, '_>>(&cx, data.linkage_info, data.visibility);
216+
mono_item.predefine::<Builder<'_, '_, '_>>(&cx, data.linkage, data.visibility);
217217
}
218218

219219
// ... and now that we have everything pre-defined, fill out those definitions.

compiler/rustc_codegen_llvm/src/base.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ pub(crate) fn compile_codegen_unit(
8686
let cx = CodegenCx::new(tcx, cgu, &llvm_module);
8787
let mono_items = cx.codegen_unit.items_in_deterministic_order(cx.tcx);
8888
for &(mono_item, data) in &mono_items {
89-
mono_item.predefine::<Builder<'_, '_, '_>>(&cx, data.linkage_info, data.visibility);
89+
mono_item.predefine::<Builder<'_, '_, '_>>(&cx, data.linkage, data.visibility);
9090
}
9191

9292
// ... and now that we have everything pre-defined, fill out those definitions.

compiler/rustc_codegen_ssa/src/back/symbol_export.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,7 @@ fn exported_symbols_provider_local(
283283
}
284284

285285
if tcx.local_crate_exports_generics() {
286-
use rustc_middle::mir::mono::{MonoItem, Visibility};
286+
use rustc_middle::mir::mono::{Linkage, MonoItem, Visibility};
287287
use rustc_middle::ty::InstanceKind;
288288

289289
// Normally, we require that shared monomorphizations are not hidden,
@@ -298,7 +298,7 @@ fn exported_symbols_provider_local(
298298
// The symbols created in this loop are sorted below it
299299
#[allow(rustc::potential_query_instability)]
300300
for (mono_item, data) in cgus.iter().flat_map(|cgu| cgu.items().iter()) {
301-
if !data.linkage_info.is_external() {
301+
if data.linkage != Linkage::External {
302302
// We can only re-use things with external linkage, otherwise
303303
// we'll get a linker error
304304
continue;

compiler/rustc_codegen_ssa/src/mir/naked_asm.rs

-2
Original file line numberDiff line numberDiff line change
@@ -207,8 +207,6 @@ fn prefix_and_suffix<'tcx>(
207207
}
208208
writeln!(begin, "{asm_name}:").unwrap();
209209

210-
eprintln!("{}", &begin);
211-
212210
writeln!(end).unwrap();
213211
writeln!(end, ".size {asm_name}, . - {asm_name}").unwrap();
214212
writeln!(end, ".popsection").unwrap();

compiler/rustc_codegen_ssa/src/mono_item.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use rustc_hir as hir;
22
use rustc_middle::middle::codegen_fn_attrs::CodegenFnAttrFlags;
33
use rustc_middle::mir::interpret::ErrorHandled;
4-
use rustc_middle::mir::mono::{LinkageInfo, MonoItem, Visibility};
4+
use rustc_middle::mir::mono::{Linkage, MonoItem, Visibility};
55
use rustc_middle::ty::Instance;
66
use rustc_middle::ty::layout::{HasTyCtxt, LayoutOf};
77
use rustc_middle::{span_bug, ty};
@@ -15,7 +15,7 @@ pub trait MonoItemExt<'a, 'tcx> {
1515
fn predefine<Bx: BuilderMethods<'a, 'tcx>>(
1616
&self,
1717
cx: &'a Bx::CodegenCx,
18-
linkage_info: LinkageInfo,
18+
linkage: Linkage,
1919
visibility: Visibility,
2020
);
2121
fn to_raw_string(&self) -> String;
@@ -117,7 +117,7 @@ impl<'a, 'tcx: 'a> MonoItemExt<'a, 'tcx> for MonoItem<'tcx> {
117117
fn predefine<Bx: BuilderMethods<'a, 'tcx>>(
118118
&self,
119119
cx: &'a Bx::CodegenCx,
120-
linkage_info: LinkageInfo,
120+
linkage: Linkage,
121121
visibility: Visibility,
122122
) {
123123
debug!(
@@ -133,15 +133,15 @@ impl<'a, 'tcx: 'a> MonoItemExt<'a, 'tcx> for MonoItem<'tcx> {
133133

134134
match *self {
135135
MonoItem::Static(def_id) => {
136-
cx.predefine_static(def_id, linkage_info.into_linkage(), visibility, symbol_name);
136+
cx.predefine_static(def_id, linkage, visibility, symbol_name);
137137
}
138138
MonoItem::Fn(instance) => {
139139
let attrs = cx.tcx().codegen_fn_attrs(instance.def_id());
140140

141141
if attrs.flags.contains(CodegenFnAttrFlags::NAKED) {
142142
// do not define this function; it will become a global assembly block
143143
} else {
144-
cx.predefine_fn(instance, linkage_info.into_linkage(), visibility, symbol_name);
144+
cx.predefine_fn(instance, linkage, visibility, symbol_name);
145145
};
146146
}
147147
MonoItem::GlobalAsm(..) => {}

compiler/rustc_middle/src/mir/mono.rs

+1-26
Original file line numberDiff line numberDiff line change
@@ -269,38 +269,13 @@ pub struct MonoItemData {
269269
/// `GloballyShared` maps to `false` and `LocalCopy` maps to `true`.
270270
pub inlined: bool,
271271

272-
pub linkage_info: LinkageInfo,
272+
pub linkage: Linkage,
273273
pub visibility: Visibility,
274274

275275
/// A cached copy of the result of `MonoItem::size_estimate`.
276276
pub size_estimate: usize,
277277
}
278278

279-
/// Stores how we know what linkage to use
280-
#[derive(Copy, Clone, PartialEq, Debug, TyEncodable, TyDecodable, HashStable)]
281-
pub enum LinkageInfo {
282-
/// The linkage was specified explicitly (e.g. using #[linkage = "..."])
283-
Explicit(Linkage),
284-
/// Assume the symbol may be used from other CGUs, a safe default
285-
ImplicitExternal,
286-
/// We did not find any uses from other CGUs, so it's fine to make this internal
287-
ImplicitInternal,
288-
}
289-
290-
impl LinkageInfo {
291-
pub const fn is_external(self) -> bool {
292-
matches!(self.into_linkage(), Linkage::External)
293-
}
294-
295-
pub const fn into_linkage(self) -> Linkage {
296-
match self {
297-
Self::Explicit(linkage) => linkage,
298-
Self::ImplicitExternal => Linkage::External,
299-
Self::ImplicitInternal => Linkage::Internal,
300-
}
301-
}
302-
}
303-
304279
/// Specifies the linkage type for a `MonoItem`.
305280
///
306281
/// See <https://llvm.org/docs/LangRef.html#linkage-types> for more details about these variants.

compiler/rustc_monomorphize/src/partitioning.rs

+23-26
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,8 @@ use rustc_middle::bug;
109109
use rustc_middle::middle::codegen_fn_attrs::CodegenFnAttrFlags;
110110
use rustc_middle::middle::exported_symbols::{SymbolExportInfo, SymbolExportLevel};
111111
use rustc_middle::mir::mono::{
112-
CodegenUnit, CodegenUnitNameBuilder, InstantiationMode, Linkage, LinkageInfo, MonoItem,
113-
MonoItemData, Visibility,
112+
CodegenUnit, CodegenUnitNameBuilder, InstantiationMode, Linkage, MonoItem, MonoItemData,
113+
Visibility,
114114
};
115115
use rustc_middle::ty::print::{characteristic_def_id_of_type, with_no_trimmed_paths};
116116
use rustc_middle::ty::visit::TypeVisitableExt;
@@ -245,7 +245,7 @@ where
245245
let cgu = codegen_units.entry(cgu_name).or_insert_with(|| CodegenUnit::new(cgu_name));
246246

247247
let mut can_be_internalized = true;
248-
let (linkage_info, visibility) = mono_item_linkage_info_and_visibility(
248+
let (linkage, visibility) = mono_item_linkage_and_visibility(
249249
cx.tcx,
250250
&mono_item,
251251
&mut can_be_internalized,
@@ -259,7 +259,7 @@ where
259259

260260
cgu.items_mut().insert(mono_item, MonoItemData {
261261
inlined: false,
262-
linkage_info,
262+
linkage,
263263
visibility,
264264
size_estimate,
265265
});
@@ -278,7 +278,7 @@ where
278278
// This is a CGU-private copy.
279279
cgu.items_mut().entry(inlined_item).or_insert_with(|| MonoItemData {
280280
inlined: true,
281-
linkage_info: LinkageInfo::ImplicitInternal,
281+
linkage: Linkage::Internal,
282282
visibility: Visibility::Default,
283283
size_estimate: inlined_item.size_estimate(cx.tcx),
284284
});
@@ -589,8 +589,7 @@ fn internalize_symbols<'tcx>(
589589

590590
// If we got here, we did not find any uses from other CGUs, so
591591
// it's fine to make this monomorphization internal.
592-
debug_assert_eq!(data.linkage_info, LinkageInfo::ImplicitExternal);
593-
data.linkage_info = LinkageInfo::ImplicitInternal;
592+
data.linkage = Linkage::Internal;
594593
data.visibility = Visibility::Default;
595594
}
596595
}
@@ -608,7 +607,7 @@ fn mark_code_coverage_dead_code_cgu<'tcx>(codegen_units: &mut [CodegenUnit<'tcx>
608607
// function symbols to be included via `-u` or `/include` linker args.
609608
let dead_code_cgu = codegen_units
610609
.iter_mut()
611-
.filter(|cgu| cgu.items().iter().any(|(_, data)| data.linkage_info.is_external()))
610+
.filter(|cgu| cgu.items().iter().any(|(_, data)| data.linkage == Linkage::External))
612611
.min_by_key(|cgu| cgu.size_estimate());
613612

614613
// If there are no CGUs that have externally linked items, then we just
@@ -737,26 +736,24 @@ fn fallback_cgu_name(name_builder: &mut CodegenUnitNameBuilder<'_>) -> Symbol {
737736
name_builder.build_cgu_name(LOCAL_CRATE, &["fallback"], Some("cgu"))
738737
}
739738

740-
fn mono_item_linkage_info_and_visibility<'tcx>(
739+
fn mono_item_linkage_and_visibility<'tcx>(
741740
tcx: TyCtxt<'tcx>,
742741
mono_item: &MonoItem<'tcx>,
743742
can_be_internalized: &mut bool,
744743
can_export_generics: bool,
745744
always_export_generics: bool,
746-
) -> (LinkageInfo, Visibility) {
745+
) -> (Linkage, Visibility) {
747746
if let Some(explicit_linkage) = mono_item.explicit_linkage(tcx) {
748-
(LinkageInfo::Explicit(explicit_linkage), Visibility::Default)
749-
} else {
750-
let vis = mono_item_visibility(
751-
tcx,
752-
mono_item,
753-
can_be_internalized,
754-
can_export_generics,
755-
always_export_generics,
756-
);
757-
758-
(LinkageInfo::ImplicitExternal, vis)
747+
return (explicit_linkage, Visibility::Default);
759748
}
749+
let vis = mono_item_visibility(
750+
tcx,
751+
mono_item,
752+
can_be_internalized,
753+
can_export_generics,
754+
always_export_generics,
755+
);
756+
(Linkage::External, vis)
760757
}
761758

762759
type CguNameCache = UnordMap<(DefId, bool), Symbol>;
@@ -1036,15 +1033,15 @@ fn debug_dump<'a, 'tcx: 'a>(tcx: TyCtxt<'tcx>, label: &str, cgus: &[CodegenUnit<
10361033
writeln!(s, " - items: {num_items}, mean size: {mean_size:.1}, sizes: {sizes}",);
10371034

10381035
for (item, data) in cgu.items_in_deterministic_order(tcx) {
1039-
let linkage_info = data.linkage_info;
1036+
let linkage = data.linkage;
10401037
let symbol_name = item.symbol_name(tcx).name;
10411038
let symbol_hash_start = symbol_name.rfind('h');
10421039
let symbol_hash = symbol_hash_start.map_or("<no hash>", |i| &symbol_name[i..]);
10431040
let kind = if !data.inlined { "root" } else { "inlined" };
10441041
let size = data.size_estimate;
10451042
let _ = with_no_trimmed_paths!(writeln!(
10461043
s,
1047-
" - {item} [{linkage_info:?}] [{symbol_hash}] ({kind}, size: {size})"
1044+
" - {item} [{linkage:?}] [{symbol_hash}] ({kind}, size: {size})"
10481045
));
10491046
}
10501047

@@ -1197,7 +1194,7 @@ fn collect_and_partition_mono_items(tcx: TyCtxt<'_>, (): ()) -> (&DefIdSet, &[Co
11971194

11981195
for cgu in codegen_units {
11991196
for (&mono_item, &data) in cgu.items() {
1200-
item_to_cgus.entry(mono_item).or_default().push((cgu.name(), data.linkage_info));
1197+
item_to_cgus.entry(mono_item).or_default().push((cgu.name(), data.linkage));
12011198
}
12021199
}
12031200

@@ -1210,11 +1207,11 @@ fn collect_and_partition_mono_items(tcx: TyCtxt<'_>, (): ()) -> (&DefIdSet, &[Co
12101207
let cgus = item_to_cgus.get_mut(i).unwrap_or(&mut empty);
12111208
cgus.sort_by_key(|(name, _)| *name);
12121209
cgus.dedup();
1213-
for &(ref cgu_name, linkage_info) in cgus.iter() {
1210+
for &(ref cgu_name, linkage) in cgus.iter() {
12141211
output.push(' ');
12151212
output.push_str(cgu_name.as_str());
12161213

1217-
let linkage_abbrev = match linkage_info.into_linkage() {
1214+
let linkage_abbrev = match linkage {
12181215
Linkage::External => "External",
12191216
Linkage::AvailableExternally => "Available",
12201217
Linkage::LinkOnceAny => "OnceAny",

0 commit comments

Comments
 (0)