@@ -29,7 +29,7 @@ use rustc_session::lint::{self, BuiltinLintDiag};
29
29
use rustc_session:: output:: validate_crate_name;
30
30
use rustc_session:: search_paths:: PathKind ;
31
31
use 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} ;
33
33
use rustc_target:: spec:: { PanicStrategy , Target , TargetTuple } ;
34
34
use tracing:: { debug, info, trace} ;
35
35
@@ -400,26 +400,12 @@ impl<'a, 'tcx> CrateLoader<'a, 'tcx> {
400
400
/// Sometimes the directly dependent crate is not specified by `--extern`, in this case,
401
401
/// `private-dep` is none during loading. This is equivalent to the scenario where the
402
402
/// 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 {
415
404
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`.
423
409
return true ;
424
410
}
425
411
@@ -447,7 +433,7 @@ impl<'a, 'tcx> CrateLoader<'a, 'tcx> {
447
433
let Library { source, metadata } = lib;
448
434
let crate_root = metadata. get_root ( ) ;
449
435
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) ;
451
437
452
438
// Claim this crate number and cache it
453
439
let feed = self . cstore . intern_stable_crate_id ( & crate_root, self . tcx ) ?;
@@ -470,7 +456,8 @@ impl<'a, 'tcx> CrateLoader<'a, 'tcx> {
470
456
& crate_paths
471
457
} ;
472
458
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) ?;
474
461
475
462
let raw_proc_macros = if crate_root. is_proc_macro_crate ( ) {
476
463
let temp_root;
@@ -573,15 +560,16 @@ impl<'a, 'tcx> CrateLoader<'a, 'tcx> {
573
560
dep_kind : CrateDepKind ,
574
561
) -> Option < CrateNum > {
575
562
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 ) {
577
564
Ok ( cnum) => {
578
565
self . cstore . set_used_recursively ( cnum) ;
579
566
Some ( cnum)
580
567
}
581
568
Err ( err) => {
582
569
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 ( ) ;
585
573
err. report ( self . sess , span, missing_core) ;
586
574
None
587
575
}
@@ -593,6 +581,7 @@ impl<'a, 'tcx> CrateLoader<'a, 'tcx> {
593
581
name : Symbol ,
594
582
mut dep_kind : CrateDepKind ,
595
583
dep_of : Option < ( & ' b CratePaths , & ' b CrateDep ) > ,
584
+ parent_is_private : bool ,
596
585
) -> Result < CrateNum , CrateError > {
597
586
info ! ( "resolving crate `{}`" , name) ;
598
587
if !name. as_str ( ) . is_ascii ( ) {
@@ -605,7 +594,7 @@ impl<'a, 'tcx> CrateLoader<'a, 'tcx> {
605
594
let host_hash = dep. map ( |d| d. host_hash ) . flatten ( ) ;
606
595
let extra_filename = dep. map ( |d| & d. extra_filename [ ..] ) ;
607
596
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 ) ;
609
598
610
599
let result = if let Some ( cnum) = self . existing_match ( name, hash, path_kind) {
611
600
( LoadResult :: Previous ( cnum) , None )
@@ -643,7 +632,7 @@ impl<'a, 'tcx> CrateLoader<'a, 'tcx> {
643
632
// not specified by `--extern` on command line parameters, it may be
644
633
// `private-dependency` when `register_crate` is called for the first time. Then it must be updated to
645
634
// `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) ;
647
636
let data = self . cstore . get_crate_data_mut ( cnum) ;
648
637
if data. is_proc_macro_crate ( ) {
649
638
dep_kind = CrateDepKind :: MacrosOnly ;
@@ -702,6 +691,7 @@ impl<'a, 'tcx> CrateLoader<'a, 'tcx> {
702
691
metadata : & MetadataBlob ,
703
692
krate : CrateNum ,
704
693
dep_kind : CrateDepKind ,
694
+ parent_is_private : bool ,
705
695
) -> Result < CrateNumMap , CrateError > {
706
696
debug ! (
707
697
"resolving deps of external crate `{}` with dep root `{}`" ,
@@ -720,17 +710,23 @@ impl<'a, 'tcx> CrateLoader<'a, 'tcx> {
720
710
crate_num_map. push ( krate) ;
721
711
for dep in deps {
722
712
info ! (
723
- "resolving dep `{}`->`{}` hash: `{}` extra filename: `{}`" ,
713
+ "resolving dep `{}`->`{}` hash: `{}` extra filename: `{}` private {} " ,
724
714
crate_root. name( ) ,
725
715
dep. name,
726
716
dep. hash,
727
- dep. extra_filename
717
+ dep. extra_filename,
718
+ dep. is_private,
728
719
) ;
729
720
let dep_kind = match dep_kind {
730
721
CrateDepKind :: MacrosOnly => CrateDepKind :: MacrosOnly ,
731
722
_ => dep. kind ,
732
723
} ;
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
+ ) ?;
734
730
crate_num_map. push ( cnum) ;
735
731
}
736
732
@@ -1147,7 +1143,7 @@ impl<'a, 'tcx> CrateLoader<'a, 'tcx> {
1147
1143
}
1148
1144
1149
1145
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 ( )
1151
1147
}
1152
1148
}
1153
1149
0 commit comments