account for simulated remap-debuginfo when resolving remapped paths

This commit is contained in:
Pietro Albini 2022-06-06 10:35:29 +02:00
parent 083721a1a7
commit 1a5e2d8c92
No known key found for this signature in database
GPG Key ID: CD76B35F7734769E

View File

@ -41,7 +41,7 @@ use std::io;
use std::iter::TrustedLen; use std::iter::TrustedLen;
use std::mem; use std::mem;
use std::num::NonZeroUsize; use std::num::NonZeroUsize;
use std::path::Path; use std::path::PathBuf;
use tracing::debug; use tracing::debug;
pub(super) use cstore_impl::provide; pub(super) use cstore_impl::provide;
@ -1472,20 +1472,26 @@ impl<'a, 'tcx> CrateMetadataRef<'a> {
// //
// NOTE: if you update this, you might need to also update bootstrap's code for generating // NOTE: if you update this, you might need to also update bootstrap's code for generating
// the `rust-src` component in `Src::run` in `src/bootstrap/dist.rs`. // the `rust-src` component in `Src::run` in `src/bootstrap/dist.rs`.
let virtual_rust_source_base_dir = option_env!("CFG_VIRTUAL_RUST_SOURCE_BASE_DIR") let virtual_rust_source_base_dir = [
.map(Path::new) option_env!("CFG_VIRTUAL_RUST_SOURCE_BASE_DIR").map(PathBuf::from),
sess.opts.debugging_opts.simulate_remapped_rust_src_base.clone(),
]
.into_iter()
.filter(|_| { .filter(|_| {
// Only spend time on further checks if we have what to translate *to*. // Only spend time on further checks if we have what to translate *to*.
sess.opts.real_rust_source_base_dir.is_some() sess.opts.real_rust_source_base_dir.is_some()
// Some tests need the translation to be always skipped. // Some tests need the translation to be always skipped.
&& sess.opts.debugging_opts.translate_remapped_path_to_local_path && sess.opts.debugging_opts.translate_remapped_path_to_local_path
}) })
.flatten()
.filter(|virtual_dir| { .filter(|virtual_dir| {
// Don't translate away `/rustc/$hash` if we're still remapping to it, // Don't translate away `/rustc/$hash` if we're still remapping to it,
// since that means we're still building `std`/`rustc` that need it, // since that means we're still building `std`/`rustc` that need it,
// and we don't want the real path to leak into codegen/debuginfo. // and we don't want the real path to leak into codegen/debuginfo.
!sess.opts.remap_path_prefix.iter().any(|(_from, to)| to == virtual_dir) !sess.opts.remap_path_prefix.iter().any(|(_from, to)| to == virtual_dir)
}); })
.collect::<Vec<_>>();
let try_to_translate_virtual_to_real = |name: &mut rustc_span::FileName| { let try_to_translate_virtual_to_real = |name: &mut rustc_span::FileName| {
debug!( debug!(
"try_to_translate_virtual_to_real(name={:?}): \ "try_to_translate_virtual_to_real(name={:?}): \
@ -1493,7 +1499,7 @@ impl<'a, 'tcx> CrateMetadataRef<'a> {
name, virtual_rust_source_base_dir, sess.opts.real_rust_source_base_dir, name, virtual_rust_source_base_dir, sess.opts.real_rust_source_base_dir,
); );
if let Some(virtual_dir) = virtual_rust_source_base_dir { for virtual_dir in &virtual_rust_source_base_dir {
if let Some(real_dir) = &sess.opts.real_rust_source_base_dir { if let Some(real_dir) = &sess.opts.real_rust_source_base_dir {
if let rustc_span::FileName::Real(old_name) = name { if let rustc_span::FileName::Real(old_name) = name {
if let rustc_span::RealFileName::Remapped { local_path: _, virtual_name } = if let rustc_span::RealFileName::Remapped { local_path: _, virtual_name } =