@@ -627,14 +627,32 @@ impl CStore {
627
627
}
628
628
}
629
629
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
+ ) {
631
649
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) {
633
651
// Propagate the extern crate info to dependencies if it was updated.
634
652
let extern_crate = ExternCrate { dependency_of : cnum, ..extern_crate } ;
635
653
let dependencies = mem:: take ( & mut cmeta. dependencies ) ;
636
654
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) ;
638
656
}
639
657
self . get_crate_data_mut ( cnum) . dependencies = dependencies;
640
658
}
0 commit comments