@@ -627,14 +627,32 @@ impl CStore {
627627 }
628628 }
629629
630- pub ( crate ) fn update_extern_crate ( & mut self , cnum : CrateNum , extern_crate : ExternCrate ) {
630+ /// Track how an extern crate has been loaded. Called after resolving an import in the local crate.
631+ pub ( crate ) fn update_extern_crate (
632+ & mut self ,
633+ cnum : CrateNum ,
634+ extern_crate : ExternCrate ,
635+ ) {
636+ debug_assert_eq ! (
637+ extern_crate. dependency_of, LOCAL_CRATE ,
638+ "this function should not be called on transitive dependencies"
639+ ) ;
640+ self . update_transitive_extern_crate_diagnostics ( cnum, extern_crate) ;
641+ }
642+
643+ /// `CrateMetadata` uses `ExternCrate` only for diagnostics
644+ fn update_transitive_extern_crate_diagnostics (
645+ & mut self ,
646+ cnum : CrateNum ,
647+ extern_crate : ExternCrate ,
648+ ) {
631649 let cmeta = self . get_crate_data_mut ( cnum) ;
632- if cmeta. update_extern_crate ( extern_crate) {
650+ if cmeta. update_extern_crate_diagnostics ( extern_crate) {
633651 // Propagate the extern crate info to dependencies if it was updated.
634652 let extern_crate = ExternCrate { dependency_of : cnum, ..extern_crate } ;
635653 let dependencies = mem:: take ( & mut cmeta. dependencies ) ;
636654 for & dep_cnum in & dependencies {
637- self . update_extern_crate ( dep_cnum, extern_crate) ;
655+ self . update_transitive_extern_crate_diagnostics ( dep_cnum, extern_crate) ;
638656 }
639657 self . get_crate_data_mut ( cnum) . dependencies = dependencies;
640658 }
0 commit comments