diff options
| author | Michael Howell <michael@notriddle.com> | 2023-05-08 12:06:21 -0700 |
|---|---|---|
| committer | Michael Howell <michael@notriddle.com> | 2023-05-25 08:15:02 -0700 |
| commit | 0ca70be11b6b290d5d7d56dbe9ccd832be5a6809 (patch) | |
| tree | b7b9c62458cd4c56ce78c3a3ece0947cf52c745c | |
| parent | 374024336a0dfed4a5cf5e97ccc99648b18cf00c (diff) | |
| download | rust-0ca70be11b6b290d5d7d56dbe9ccd832be5a6809.tar.gz rust-0ca70be11b6b290d5d7d56dbe9ccd832be5a6809.zip | |
rustc_metadata: fix private_dep logic in `register_crate`
| -rw-r--r-- | compiler/rustc_metadata/src/creader.rs | 19 |
1 files 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<bool>, ) -> Result<CrateNum, CrateError> { 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) => { |
