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