@@ -76,9 +76,9 @@ 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 {
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" )
0 commit comments