@@ -630,14 +630,32 @@ impl CStore {
630
630
}
631
631
}
632
632
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
+ ) {
634
652
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) {
636
654
// Propagate the extern crate info to dependencies if it was updated.
637
655
let extern_crate = ExternCrate { dependency_of : cnum, ..extern_crate } ;
638
656
let dependencies = mem:: take ( & mut cmeta. dependencies ) ;
639
657
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) ;
641
659
}
642
660
self . get_crate_data_mut ( cnum) . dependencies = dependencies;
643
661
}
0 commit comments