From 0ca70be11b6b290d5d7d56dbe9ccd832be5a6809 Mon Sep 17 00:00:00 2001 From: Michael Howell Date: Mon, 8 May 2023 12:06:21 -0700 Subject: [PATCH] rustc_metadata: fix private_dep logic in `register_crate` --- compiler/rustc_metadata/src/creader.rs | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/compiler/rustc_metadata/src/creader.rs b/compiler/rustc_metadata/src/creader.rs index fc8ced3f900..63a2dc5aa62 100644 --- a/compiler/rustc_metadata/src/creader.rs +++ b/compiler/rustc_metadata/src/creader.rs @@ -365,7 +365,7 @@ impl<'a, 'tcx> CrateLoader<'a, 'tcx> { lib: Library, dep_kind: CrateDepKind, name: Symbol, - private_dep: bool, + private_dep: Option, ) -> Result { let _prof_timer = self.sess.prof.generic_activity("metadata_register_crate"); @@ -373,8 +373,13 @@ impl<'a, 'tcx> CrateLoader<'a, 'tcx> { let crate_root = metadata.get_root(); let host_hash = host_lib.as_ref().map(|lib| lib.metadata.get_root().hash()); - let private_dep = - self.sess.opts.externs.get(name.as_str()).is_some_and(|e| e.is_private_dep); + let private_dep = self + .sess + .opts + .externs + .get(name.as_str()) + .map_or(private_dep.unwrap_or(false), |e| e.is_private_dep) + && private_dep.unwrap_or(true); // Claim this crate number and cache it let cnum = self.cstore.intern_stable_crate_id(&crate_root)?; @@ -526,9 +531,9 @@ impl<'a, 'tcx> CrateLoader<'a, 'tcx> { dep.host_hash, Some(&dep.extra_filename[..]), PathKind::Dependency, - dep.is_private, + Some(dep.is_private), ), - None => (None, None, None, None, PathKind::Crate, false), + None => (None, None, None, None, PathKind::Crate, None), }; let result = if let Some(cnum) = self.existing_match(name, hash, path_kind) { (LoadResult::Previous(cnum), None) @@ -564,7 +569,9 @@ impl<'a, 'tcx> CrateLoader<'a, 'tcx> { dep_kind = CrateDepKind::MacrosOnly; } data.update_dep_kind(|data_dep_kind| cmp::max(data_dep_kind, dep_kind)); - data.update_private_dep(|p_d| p_d && private_dep); + if let Some(private_dep) = private_dep { + data.update_private_dep(|p_d| p_d && private_dep); + } Ok(cnum) } (LoadResult::Loaded(library), host_library) => {