@@ -76,18 +76,14 @@ fn eii_impl_crate_name(crate_info: &CrateInfo, cnum: CrateNum) -> Symbol {
7676}
7777
7878fn 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" )
0 commit comments