@@ -29,7 +29,7 @@ use rustc_session::lint::{self, BuiltinLintDiag};
2929use rustc_session:: output:: validate_crate_name;
3030use rustc_session:: search_paths:: PathKind ;
3131use rustc_span:: edition:: Edition ;
32- use rustc_span:: { DUMMY_SP , Ident , STDLIB_STABLE_CRATES , Span , Symbol , sym} ;
32+ use rustc_span:: { DUMMY_SP , Ident , Span , Symbol , sym} ;
3333use rustc_target:: spec:: { PanicStrategy , Target , TargetTuple } ;
3434use tracing:: { debug, info, trace} ;
3535
@@ -400,26 +400,12 @@ impl<'a, 'tcx> CrateLoader<'a, 'tcx> {
400400 /// Sometimes the directly dependent crate is not specified by `--extern`, in this case,
401401 /// `private-dep` is none during loading. This is equivalent to the scenario where the
402402 /// command parameter is set to `public-dependency`
403- fn is_private_dep (
404- & self ,
405- name : Symbol ,
406- private_dep : Option < bool > ,
407- dep_root : Option < & CratePaths > ,
408- ) -> bool {
409- // Standard library crates are never private.
410- if STDLIB_STABLE_CRATES . contains ( & name) {
411- tracing:: info!( "returning false for {name} is private" ) ;
412- return false ;
413- }
414-
403+ fn is_private_dep ( & self , name : Symbol , private_dep : Option < bool > ) -> bool {
415404 let extern_private = self . sess . opts . externs . get ( name. as_str ( ) ) . map ( |e| e. is_private_dep ) ;
416-
417- // Any descendants of `std` should be private. These crates are usually not marked
418- // private in metadata, so we ignore that field.
419- if extern_private. is_none ( )
420- && let Some ( dep) = dep_root
421- && STDLIB_STABLE_CRATES . contains ( & dep. name )
422- {
405+ if name == sym:: compiler_builtins {
406+ // compiler_builtins is a private implementation detail and should never show up in
407+ // diagnostics. See also the note referencing #113634 in
408+ // `rustc_builtin_macros::...::inject`.
423409 return true ;
424410 }
425411
@@ -447,7 +433,7 @@ impl<'a, 'tcx> CrateLoader<'a, 'tcx> {
447433 let Library { source, metadata } = lib;
448434 let crate_root = metadata. get_root ( ) ;
449435 let host_hash = host_lib. as_ref ( ) . map ( |lib| lib. metadata . get_root ( ) . hash ( ) ) ;
450- let private_dep = self . is_private_dep ( name, private_dep, dep_root ) ;
436+ let private_dep = self . is_private_dep ( name, private_dep) ;
451437
452438 // Claim this crate number and cache it
453439 let feed = self . cstore . intern_stable_crate_id ( & crate_root, self . tcx ) ?;
@@ -470,7 +456,8 @@ impl<'a, 'tcx> CrateLoader<'a, 'tcx> {
470456 & crate_paths
471457 } ;
472458
473- 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) ?;
474461
475462 let raw_proc_macros = if crate_root. is_proc_macro_crate ( ) {
476463 let temp_root;
@@ -573,15 +560,16 @@ impl<'a, 'tcx> CrateLoader<'a, 'tcx> {
573560 dep_kind : CrateDepKind ,
574561 ) -> Option < CrateNum > {
575562 self . used_extern_options . insert ( name) ;
576- match self . maybe_resolve_crate ( name, dep_kind, None ) {
563+ match self . maybe_resolve_crate ( name, dep_kind, None , false ) {
577564 Ok ( cnum) => {
578565 self . cstore . set_used_recursively ( cnum) ;
579566 Some ( cnum)
580567 }
581568 Err ( err) => {
582569 debug ! ( "failed to resolve crate {} {:?}" , name, dep_kind) ;
583- let missing_core =
584- 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 ( ) ;
585573 err. report ( self . sess , span, missing_core) ;
586574 None
587575 }
@@ -593,6 +581,7 @@ impl<'a, 'tcx> CrateLoader<'a, 'tcx> {
593581 name : Symbol ,
594582 mut dep_kind : CrateDepKind ,
595583 dep_of : Option < ( & ' b CratePaths , & ' b CrateDep ) > ,
584+ parent_is_private : bool ,
596585 ) -> Result < CrateNum , CrateError > {
597586 info ! ( "resolving crate `{}`" , name) ;
598587 if !name. as_str ( ) . is_ascii ( ) {
@@ -605,7 +594,7 @@ impl<'a, 'tcx> CrateLoader<'a, 'tcx> {
605594 let host_hash = dep. map ( |d| d. host_hash ) . flatten ( ) ;
606595 let extra_filename = dep. map ( |d| & d. extra_filename [ ..] ) ;
607596 let path_kind = if dep. is_some ( ) { PathKind :: Dependency } else { PathKind :: Crate } ;
608- let private_dep = dep. map ( |d| d. is_private ) ;
597+ let private_dep = dep. map ( |d| d. is_private || parent_is_private ) ;
609598
610599 let result = if let Some ( cnum) = self . existing_match ( name, hash, path_kind) {
611600 ( LoadResult :: Previous ( cnum) , None )
@@ -643,7 +632,7 @@ impl<'a, 'tcx> CrateLoader<'a, 'tcx> {
643632 // not specified by `--extern` on command line parameters, it may be
644633 // `private-dependency` when `register_crate` is called for the first time. Then it must be updated to
645634 // `public-dependency` here.
646- let private_dep = self . is_private_dep ( name, private_dep, dep_root ) ;
635+ let private_dep = self . is_private_dep ( name, private_dep) ;
647636 let data = self . cstore . get_crate_data_mut ( cnum) ;
648637 if data. is_proc_macro_crate ( ) {
649638 dep_kind = CrateDepKind :: MacrosOnly ;
@@ -702,6 +691,7 @@ impl<'a, 'tcx> CrateLoader<'a, 'tcx> {
702691 metadata : & MetadataBlob ,
703692 krate : CrateNum ,
704693 dep_kind : CrateDepKind ,
694+ parent_is_private : bool ,
705695 ) -> Result < CrateNumMap , CrateError > {
706696 debug ! (
707697 "resolving deps of external crate `{}` with dep root `{}`" ,
@@ -720,17 +710,23 @@ impl<'a, 'tcx> CrateLoader<'a, 'tcx> {
720710 crate_num_map. push ( krate) ;
721711 for dep in deps {
722712 info ! (
723- "resolving dep `{}`->`{}` hash: `{}` extra filename: `{}`" ,
713+ "resolving dep `{}`->`{}` hash: `{}` extra filename: `{}` private {} " ,
724714 crate_root. name( ) ,
725715 dep. name,
726716 dep. hash,
727- dep. extra_filename
717+ dep. extra_filename,
718+ dep. is_private,
728719 ) ;
729720 let dep_kind = match dep_kind {
730721 CrateDepKind :: MacrosOnly => CrateDepKind :: MacrosOnly ,
731722 _ => dep. kind ,
732723 } ;
733- 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+ ) ?;
734730 crate_num_map. push ( cnum) ;
735731 }
736732
@@ -1147,7 +1143,7 @@ impl<'a, 'tcx> CrateLoader<'a, 'tcx> {
11471143 }
11481144
11491145 pub fn maybe_process_path_extern ( & mut self , name : Symbol ) -> Option < CrateNum > {
1150- self . maybe_resolve_crate ( name, CrateDepKind :: Explicit , None ) . ok ( )
1146+ self . maybe_resolve_crate ( name, CrateDepKind :: Explicit , None , false ) . ok ( )
11511147 }
11521148}
11531149
0 commit comments