@@ -456,7 +456,8 @@ impl<'a, 'tcx> CrateLoader<'a, 'tcx> {
456
456
& crate_paths
457
457
} ;
458
458
459
- let cnum_map = self . resolve_crate_deps ( dep_root, & crate_root, & metadata, cnum, dep_kind) ?;
459
+ let cnum_map =
460
+ self . resolve_crate_deps ( dep_root, & crate_root, & metadata, cnum, dep_kind, private_dep) ?;
460
461
461
462
let raw_proc_macros = if crate_root. is_proc_macro_crate ( ) {
462
463
let temp_root;
@@ -559,15 +560,16 @@ impl<'a, 'tcx> CrateLoader<'a, 'tcx> {
559
560
dep_kind : CrateDepKind ,
560
561
) -> Option < CrateNum > {
561
562
self . used_extern_options . insert ( name) ;
562
- match self . maybe_resolve_crate ( name, dep_kind, None ) {
563
+ match self . maybe_resolve_crate ( name, dep_kind, None , false ) {
563
564
Ok ( cnum) => {
564
565
self . cstore . set_used_recursively ( cnum) ;
565
566
Some ( cnum)
566
567
}
567
568
Err ( err) => {
568
569
debug ! ( "failed to resolve crate {} {:?}" , name, dep_kind) ;
569
- let missing_core =
570
- self . maybe_resolve_crate ( sym:: core, CrateDepKind :: Explicit , None ) . is_err ( ) ;
570
+ let missing_core = self
571
+ . maybe_resolve_crate ( sym:: core, CrateDepKind :: Explicit , None , false )
572
+ . is_err ( ) ;
571
573
err. report ( self . sess , span, missing_core) ;
572
574
None
573
575
}
@@ -579,6 +581,7 @@ impl<'a, 'tcx> CrateLoader<'a, 'tcx> {
579
581
name : Symbol ,
580
582
mut dep_kind : CrateDepKind ,
581
583
dep_of : Option < ( & ' b CratePaths , & ' b CrateDep ) > ,
584
+ parent_is_private : bool ,
582
585
) -> Result < CrateNum , CrateError > {
583
586
info ! ( "resolving crate `{}`" , name) ;
584
587
if !name. as_str ( ) . is_ascii ( ) {
@@ -591,7 +594,7 @@ impl<'a, 'tcx> CrateLoader<'a, 'tcx> {
591
594
let host_hash = dep. map ( |d| d. host_hash ) . flatten ( ) ;
592
595
let extra_filename = dep. map ( |d| & d. extra_filename [ ..] ) ;
593
596
let path_kind = if dep. is_some ( ) { PathKind :: Dependency } else { PathKind :: Crate } ;
594
- let private_dep = dep. map ( |d| d. is_private ) ;
597
+ let private_dep = dep. map ( |d| d. is_private || parent_is_private ) ;
595
598
596
599
let result = if let Some ( cnum) = self . existing_match ( name, hash, path_kind) {
597
600
( LoadResult :: Previous ( cnum) , None )
@@ -688,6 +691,7 @@ impl<'a, 'tcx> CrateLoader<'a, 'tcx> {
688
691
metadata : & MetadataBlob ,
689
692
krate : CrateNum ,
690
693
dep_kind : CrateDepKind ,
694
+ parent_is_private : bool ,
691
695
) -> Result < CrateNumMap , CrateError > {
692
696
debug ! (
693
697
"resolving deps of external crate `{}` with dep root `{}`" ,
@@ -706,17 +710,23 @@ impl<'a, 'tcx> CrateLoader<'a, 'tcx> {
706
710
crate_num_map. push ( krate) ;
707
711
for dep in deps {
708
712
info ! (
709
- "resolving dep `{}`->`{}` hash: `{}` extra filename: `{}`" ,
713
+ "resolving dep `{}`->`{}` hash: `{}` extra filename: `{}` private {} " ,
710
714
crate_root. name( ) ,
711
715
dep. name,
712
716
dep. hash,
713
- dep. extra_filename
717
+ dep. extra_filename,
718
+ dep. is_private,
714
719
) ;
715
720
let dep_kind = match dep_kind {
716
721
CrateDepKind :: MacrosOnly => CrateDepKind :: MacrosOnly ,
717
722
_ => dep. kind ,
718
723
} ;
719
- let cnum = self . maybe_resolve_crate ( dep. name , dep_kind, Some ( ( dep_root, & dep) ) ) ?;
724
+ let cnum = self . maybe_resolve_crate (
725
+ dep. name ,
726
+ dep_kind,
727
+ Some ( ( dep_root, & dep) ) ,
728
+ parent_is_private,
729
+ ) ?;
720
730
crate_num_map. push ( cnum) ;
721
731
}
722
732
@@ -1133,7 +1143,7 @@ impl<'a, 'tcx> CrateLoader<'a, 'tcx> {
1133
1143
}
1134
1144
1135
1145
pub fn maybe_process_path_extern ( & mut self , name : Symbol ) -> Option < CrateNum > {
1136
- self . maybe_resolve_crate ( name, CrateDepKind :: Explicit , None ) . ok ( )
1146
+ self . maybe_resolve_crate ( name, CrateDepKind :: Explicit , None , false ) . ok ( )
1137
1147
}
1138
1148
}
1139
1149
0 commit comments