@@ -456,7 +456,8 @@ impl<'a, 'tcx> CrateLoader<'a, 'tcx> {
456456 & crate_paths
457457 } ;
458458
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) ?;
460461
461462 let raw_proc_macros = if crate_root. is_proc_macro_crate ( ) {
462463 let temp_root;
@@ -559,15 +560,16 @@ impl<'a, 'tcx> CrateLoader<'a, 'tcx> {
559560 dep_kind : CrateDepKind ,
560561 ) -> Option < CrateNum > {
561562 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 ) {
563564 Ok ( cnum) => {
564565 self . cstore . set_used_recursively ( cnum) ;
565566 Some ( cnum)
566567 }
567568 Err ( err) => {
568569 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 ( ) ;
571573 err. report ( self . sess , span, missing_core) ;
572574 None
573575 }
@@ -579,6 +581,7 @@ impl<'a, 'tcx> CrateLoader<'a, 'tcx> {
579581 name : Symbol ,
580582 mut dep_kind : CrateDepKind ,
581583 dep_of : Option < ( & ' b CratePaths , & ' b CrateDep ) > ,
584+ parent_is_private : bool ,
582585 ) -> Result < CrateNum , CrateError > {
583586 info ! ( "resolving crate `{}`" , name) ;
584587 if !name. as_str ( ) . is_ascii ( ) {
@@ -591,7 +594,7 @@ impl<'a, 'tcx> CrateLoader<'a, 'tcx> {
591594 let host_hash = dep. map ( |d| d. host_hash ) . flatten ( ) ;
592595 let extra_filename = dep. map ( |d| & d. extra_filename [ ..] ) ;
593596 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 ) ;
595598
596599 let result = if let Some ( cnum) = self . existing_match ( name, hash, path_kind) {
597600 ( LoadResult :: Previous ( cnum) , None )
@@ -688,6 +691,7 @@ impl<'a, 'tcx> CrateLoader<'a, 'tcx> {
688691 metadata : & MetadataBlob ,
689692 krate : CrateNum ,
690693 dep_kind : CrateDepKind ,
694+ parent_is_private : bool ,
691695 ) -> Result < CrateNumMap , CrateError > {
692696 debug ! (
693697 "resolving deps of external crate `{}` with dep root `{}`" ,
@@ -706,17 +710,23 @@ impl<'a, 'tcx> CrateLoader<'a, 'tcx> {
706710 crate_num_map. push ( krate) ;
707711 for dep in deps {
708712 info ! (
709- "resolving dep `{}`->`{}` hash: `{}` extra filename: `{}`" ,
713+ "resolving dep `{}`->`{}` hash: `{}` extra filename: `{}` private {} " ,
710714 crate_root. name( ) ,
711715 dep. name,
712716 dep. hash,
713- dep. extra_filename
717+ dep. extra_filename,
718+ dep. is_private,
714719 ) ;
715720 let dep_kind = match dep_kind {
716721 CrateDepKind :: MacrosOnly => CrateDepKind :: MacrosOnly ,
717722 _ => dep. kind ,
718723 } ;
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+ ) ?;
720730 crate_num_map. push ( cnum) ;
721731 }
722732
@@ -1133,7 +1143,7 @@ impl<'a, 'tcx> CrateLoader<'a, 'tcx> {
11331143 }
11341144
11351145 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 ( )
11371147 }
11381148}
11391149
0 commit comments