diff --git a/compiler/rustc_session/src/config.rs b/compiler/rustc_session/src/config.rs index 8d186f7c749e8..f612e8b5b1a55 100644 --- a/compiler/rustc_session/src/config.rs +++ b/compiler/rustc_session/src/config.rs @@ -2824,6 +2824,7 @@ pub fn build_session_options(early_dcx: &mut EarlyDiagCtxt, matches: &getopts::M let logical_env = parse_logical_env(early_dcx, matches); let sysroot = filesearch::materialize_sysroot(sysroot_opt); + let real_rust_source_base_dir = { // This is the location used by the `rust-src` `rustup` component. let mut candidate = sysroot.join("lib/rustlib/src/rust"); diff --git a/compiler/rustc_session/src/search_paths.rs b/compiler/rustc_session/src/search_paths.rs index 9cabdec34ae50..16dd40acef047 100644 --- a/compiler/rustc_session/src/search_paths.rs +++ b/compiler/rustc_session/src/search_paths.rs @@ -63,27 +63,20 @@ impl SearchPath { (PathKind::Framework, stripped) } else if let Some(stripped) = path.strip_prefix("all=") { (PathKind::All, stripped) - } else if let Some(stripped) = path.strip_prefix("builtin:") { - if stripped.contains(std::path::is_separator) { - early_dcx.early_fatal("`-L builtin:` does not accept paths"); - } - - let path = - make_target_lib_path(sysroot, triple.triple()).join("builtin").join(stripped); - if !path.is_dir() { - early_dcx.early_fatal(format!("builtin:{stripped} does not exist")); - } - - return Self::new(PathKind::All, path); } else { (PathKind::All, path) }; - if path.is_empty() { + let dir = match path.strip_prefix("@RUSTC_BUILTIN") { + Some(stripped) => { + make_target_lib_path(sysroot, triple.triple()).join("builtin").join(stripped) + } + None => PathBuf::from(path), + }; + if dir.as_os_str().is_empty() { #[allow(rustc::untranslatable_diagnostic)] // FIXME: make this translatable early_dcx.early_fatal("empty search path given via `-L`"); } - let dir = PathBuf::from(path); Self::new(kind, dir) }