Skip to content

Commit 3827ccb

Browse files
committed
address a few nits
1 parent b41cef3 commit 3827ccb

3 files changed

Lines changed: 12 additions & 18 deletions

File tree

compiler/rustc_codegen_ssa/src/back/link.rs

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -76,18 +76,14 @@ fn eii_impl_crate_name(crate_info: &CrateInfo, cnum: CrateNum) -> Symbol {
7676
}
7777

7878
fn check_externally_implementable_item_linkage(sess: &Session, crate_info: &CrateInfo) {
79-
let Some(eii_linkage) = &crate_info.eii_linkage else {
80-
return;
81-
};
82-
8379
// A crate can request multiple linked outputs with overlapping dependency
8480
// formats, so report each underlying conflict once.
8581
let mut emitted = FxHashSet::default();
8682

8783
// This needs the dependency formats selected for the final artifact. The
8884
// earlier EII pass still handles missing impls and duplicate explicit impls.
8985
for dependency_formats in crate_info.dependency_formats.values() {
90-
for (eii_index, eii) in eii_linkage.iter().enumerate() {
86+
for (eii_index, eii) in crate_info.eii_linkage.iter().enumerate() {
9187
let mut explicit_impls =
9288
eii.impls.iter().enumerate().filter(|(_, imp)| !imp.is_default);
9389
let Some((explicit_index, explicit_impl)) = explicit_impls.next() else {
@@ -152,7 +148,14 @@ pub fn link_binary(
152148
let _timer = sess.timer("link_binary");
153149
let output_metadata = sess.opts.output_types.contains_key(&OutputType::Metadata);
154150
let mut tempfiles_for_stdout_output: Vec<PathBuf> = Vec::new();
155-
let mut checked_eii_linkage = false;
151+
152+
if outputs.outputs.should_link() {
153+
sess.time("check_externally_implementable_item_linkage", || {
154+
check_externally_implementable_item_linkage(sess, &crate_info);
155+
});
156+
sess.dcx().abort_if_errors();
157+
}
158+
156159
for &crate_type in &crate_info.crate_types {
157160
// Ignore executable crates if we have -Z no-codegen, as they will error.
158161
if (sess.opts.unstable_opts.no_codegen || !sess.opts.output_types.should_codegen())
@@ -173,14 +176,6 @@ pub fn link_binary(
173176
});
174177

175178
if outputs.outputs.should_link() {
176-
if !checked_eii_linkage {
177-
sess.time("check_externally_implementable_item_linkage", || {
178-
check_externally_implementable_item_linkage(sess, &crate_info);
179-
});
180-
sess.dcx().abort_if_errors();
181-
checked_eii_linkage = true;
182-
}
183-
184179
let output = out_filename(sess, crate_type, outputs, crate_info.local_crate_name);
185180
let tmpdir = TempDirBuilder::new()
186181
.prefix("rustc")

compiler/rustc_codegen_ssa/src/base.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -968,10 +968,9 @@ impl CrateInfo {
968968
let windows_subsystem = find_attr!(tcx, crate, WindowsSubsystem(kind) => *kind);
969969
let dependency_formats = Arc::clone(tcx.dependency_formats(()));
970970
let eii_linkage = if eii_linkage_needed(&dependency_formats) {
971-
let eii_linkage = collect_eii_linkage(tcx);
972-
(!eii_linkage.is_empty()).then_some(eii_linkage)
971+
collect_eii_linkage(tcx)
973972
} else {
974-
None
973+
Vec::new()
975974
};
976975

977976
// This list is used when generating the command line to pass through to

compiler/rustc_codegen_ssa/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,7 @@ pub struct CrateInfo {
236236
pub dependency_formats: Arc<Dependencies>,
237237
/// EII implementations used by the link-time duplicate check, so `-Zno-link` can serialize the data needed by a
238238
/// later `-Zlink-only` invocation.
239-
pub eii_linkage: Option<Vec<EiiLinkageInfo>>,
239+
pub eii_linkage: Vec<EiiLinkageInfo>,
240240
pub windows_subsystem: Option<WindowsSubsystemKind>,
241241
pub natvis_debugger_visualizers: BTreeSet<DebuggerVisualizerFile>,
242242
pub lint_level_specs: CodegenLintLevelSpecs,

0 commit comments

Comments
 (0)