@@ -197,34 +197,8 @@ where
197197
198198    let  instrument_dead_code =
199199        tcx. sess . instrument_coverage ( )  && !tcx. sess . instrument_coverage_except_unused_functions ( ) ; 
200- 
201200    if  instrument_dead_code { 
202-         assert ! ( 
203-             codegen_units. len( )  > 0 , 
204-             "There must be at least one CGU that code coverage data can be generated in." 
205-         ) ; 
206- 
207-         // Find the smallest CGU that has exported symbols and put the dead 
208-         // function stubs in that CGU. We look for exported symbols to increase 
209-         // the likelihood the linker won't throw away the dead functions. 
210-         // FIXME(#92165): In order to truly resolve this, we need to make sure 
211-         // the object file (CGU) containing the dead function stubs is included 
212-         // in the final binary. This will probably require forcing these 
213-         // function symbols to be included via `-u` or `/include` linker args. 
214-         let  mut  cgus:  Vec < _ >  = codegen_units. iter_mut ( ) . collect ( ) ; 
215-         cgus. sort_by_key ( |cgu| cgu. size_estimate ( ) ) ; 
216- 
217-         let  dead_code_cgu =
218-             if  let  Some ( cgu)  = cgus. into_iter ( ) . rev ( ) . find ( |cgu| { 
219-                 cgu. items ( ) . iter ( ) . any ( |( _,  ( linkage,  _) ) | * linkage == Linkage :: External ) 
220-             } )  { 
221-                 cgu
222-             }  else  { 
223-                 // If there are no CGUs that have externally linked items, 
224-                 // then we just pick the first CGU as a fallback. 
225-                 & mut  codegen_units[ 0 ] 
226-             } ; 
227-         dead_code_cgu. make_code_coverage_dead_code_cgu ( ) ; 
201+         mark_code_coverage_dead_code_cgu ( & mut  codegen_units) ; 
228202    } 
229203
230204    // Ensure CGUs are sorted by name, so that we get deterministic results. 
@@ -545,6 +519,33 @@ fn internalize_symbols<'tcx>(
545519    } 
546520} 
547521
522+ fn  mark_code_coverage_dead_code_cgu < ' tcx > ( codegen_units :  & mut  [ CodegenUnit < ' tcx > ] )  { 
523+     assert ! ( !codegen_units. is_empty( ) ) ; 
524+ 
525+     // Find the smallest CGU that has exported symbols and put the dead 
526+     // function stubs in that CGU. We look for exported symbols to increase 
527+     // the likelihood the linker won't throw away the dead functions. 
528+     // FIXME(#92165): In order to truly resolve this, we need to make sure 
529+     // the object file (CGU) containing the dead function stubs is included 
530+     // in the final binary. This will probably require forcing these 
531+     // function symbols to be included via `-u` or `/include` linker args. 
532+     let  mut  cgus:  Vec < & mut  CodegenUnit < ' tcx > >  = codegen_units. iter_mut ( ) . collect ( ) ; 
533+     cgus. sort_by_key ( |cgu| cgu. size_estimate ( ) ) ; 
534+ 
535+     let  dead_code_cgu = if  let  Some ( cgu)  = cgus
536+         . into_iter ( ) 
537+         . rev ( ) 
538+         . find ( |cgu| cgu. items ( ) . iter ( ) . any ( |( _,  ( linkage,  _) ) | * linkage == Linkage :: External ) ) 
539+     { 
540+         cgu
541+     }  else  { 
542+         // If there are no CGUs that have externally linked items, 
543+         // then we just pick the first CGU as a fallback. 
544+         & mut  codegen_units[ 0 ] 
545+     } ; 
546+     dead_code_cgu. make_code_coverage_dead_code_cgu ( ) ; 
547+ } 
548+ 
548549fn  characteristic_def_id_of_mono_item < ' tcx > ( 
549550    tcx :  TyCtxt < ' tcx > , 
550551    mono_item :  MonoItem < ' tcx > , 
0 commit comments