about summary refs log tree commit diff
diff options
context:
space:
mode:
authorLukas Wirth <lukas.wirth@ferrous-systems.com>2024-03-06 13:28:12 +0100
committerLukas Wirth <lukas.wirth@ferrous-systems.com>2024-03-25 22:20:13 +0000
commit3d65c920404959cc8ef3ba9e963a31fc91983caf (patch)
tree20896e776de774897b4d6a1ad9e977c5e1e7a9c7
parent2fae4ee92ea9a28722673df442112446f7521079 (diff)
downloadrust-3d65c920404959cc8ef3ba9e963a31fc91983caf.tar.gz
rust-3d65c920404959cc8ef3ba9e963a31fc91983caf.zip
Replace implementation with @RUSTC_BUILTIN prefix substitution var
-rw-r--r--compiler/rustc_session/src/config.rs1
-rw-r--r--compiler/rustc_session/src/search_paths.rs21
2 files changed, 8 insertions, 14 deletions
diff --git a/compiler/rustc_session/src/config.rs b/compiler/rustc_session/src/config.rs
index 8d186f7c749..f612e8b5b1a 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 9cabdec34ae..16dd40acef0 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)
     }