Skip to content

Commit a7003f8

Browse files
committed
address a few nits
1 parent f183be7 commit a7003f8

3 files changed

Lines changed: 14 additions & 16 deletions

File tree

compiler/rustc_codegen_ssa/src/back/link.rs

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -76,9 +76,9 @@ 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 {
79+
if crate_info.eii_linkage.is_empty() {
8080
return;
81-
};
81+
}
8282

8383
// A crate can request multiple linked outputs with overlapping dependency
8484
// formats, so report each underlying conflict once.
@@ -87,7 +87,7 @@ fn check_externally_implementable_item_linkage(sess: &Session, crate_info: &Crat
8787
// This needs the dependency formats selected for the final artifact. The
8888
// earlier EII pass still handles missing impls and duplicate explicit impls.
8989
for dependency_formats in crate_info.dependency_formats.values() {
90-
for (eii_index, eii) in eii_linkage.iter().enumerate() {
90+
for (eii_index, eii) in crate_info.eii_linkage.iter().enumerate() {
9191
let mut explicit_impls =
9292
eii.impls.iter().enumerate().filter(|(_, imp)| !imp.is_default);
9393
let Some((explicit_index, explicit_impl)) = explicit_impls.next() else {
@@ -152,7 +152,14 @@ pub fn link_binary(
152152
let _timer = sess.timer("link_binary");
153153
let output_metadata = sess.opts.output_types.contains_key(&OutputType::Metadata);
154154
let mut tempfiles_for_stdout_output: Vec<PathBuf> = Vec::new();
155-
let mut checked_eii_linkage = false;
155+
156+
if outputs.outputs.should_link() {
157+
sess.time("check_externally_implementable_item_linkage", || {
158+
check_externally_implementable_item_linkage(sess, &crate_info);
159+
});
160+
sess.dcx().abort_if_errors();
161+
}
162+
156163
for &crate_type in &crate_info.crate_types {
157164
// Ignore executable crates if we have -Z no-codegen, as they will error.
158165
if (sess.opts.unstable_opts.no_codegen || !sess.opts.output_types.should_codegen())
@@ -173,14 +180,6 @@ pub fn link_binary(
173180
});
174181

175182
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-
184183
let output = out_filename(sess, crate_type, outputs, crate_info.local_crate_name);
185184
let tmpdir = TempDirBuilder::new()
186185
.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
@@ -268,7 +268,7 @@ pub struct CrateInfo {
268268
pub dependency_formats: Arc<Dependencies>,
269269
/// EII implementations used by the link-time duplicate check, so `-Zno-link` can serialize the data needed by a
270270
/// later `-Zlink-only` invocation.
271-
pub eii_linkage: Option<Vec<EiiLinkageInfo>>,
271+
pub eii_linkage: Vec<EiiLinkageInfo>,
272272
pub windows_subsystem: Option<WindowsSubsystemKind>,
273273
pub natvis_debugger_visualizers: BTreeSet<DebuggerVisualizerFile>,
274274
pub lint_level_specs: CodegenLintLevelSpecs,

0 commit comments

Comments
 (0)