about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMaybe Waffle <waffle.lapkin@gmail.com>2024-02-15 00:03:34 +0000
committerMaybe Waffle <waffle.lapkin@gmail.com>2024-02-15 00:09:40 +0000
commit5441523f0727639040fdd134abff1e298d88733e (patch)
treefd0f7221cd0d370537d0a017280fadbc152a4d48
parenta03d19ef63d342c408d7ec8208bda5b4eb0bacf5 (diff)
downloadrust-5441523f0727639040fdd134abff1e298d88733e.tar.gz
rust-5441523f0727639040fdd134abff1e298d88733e.zip
Refactor out a repeating pattern with `get_or_default_sysroot`
-rw-r--r--compiler/rustc_driver_impl/src/lib.rs8
-rw-r--r--compiler/rustc_interface/src/interface.rs5
-rw-r--r--compiler/rustc_interface/src/tests.rs9
-rw-r--r--compiler/rustc_session/src/config.rs16
-rw-r--r--compiler/rustc_session/src/filesearch.rs6
5 files changed, 15 insertions, 29 deletions
diff --git a/compiler/rustc_driver_impl/src/lib.rs b/compiler/rustc_driver_impl/src/lib.rs
index bc485b05223..0920505d86e 100644
--- a/compiler/rustc_driver_impl/src/lib.rs
+++ b/compiler/rustc_driver_impl/src/lib.rs
@@ -888,9 +888,7 @@ pub fn version_at_macro_invocation(
         let debug_flags = matches.opt_strs("Z");
         let backend_name = debug_flags.iter().find_map(|x| x.strip_prefix("codegen-backend="));
         let opts = config::Options::default();
-        let sysroot = opts.maybe_sysroot.clone().unwrap_or_else(|| {
-            filesearch::get_or_default_sysroot().expect("Failed finding sysroot")
-        });
+        let sysroot = filesearch::materialize_sysroot(opts.maybe_sysroot.clone());
         let target = config::build_target_config(early_dcx, &opts, None, &sysroot);
 
         get_codegen_backend(early_dcx, &sysroot, backend_name, &target).print_version();
@@ -1100,9 +1098,7 @@ pub fn describe_flag_categories(early_dcx: &EarlyDiagCtxt, matches: &Matches) ->
         let backend_name = debug_flags.iter().find_map(|x| x.strip_prefix("codegen-backend="));
 
         let opts = config::Options::default();
-        let sysroot = opts.maybe_sysroot.clone().unwrap_or_else(|| {
-            filesearch::get_or_default_sysroot().expect("Failed finding sysroot")
-        });
+        let sysroot = filesearch::materialize_sysroot(opts.maybe_sysroot.clone());
         let target = config::build_target_config(early_dcx, &opts, None, &sysroot);
 
         get_codegen_backend(early_dcx, &sysroot, backend_name, &target).print_passes();
diff --git a/compiler/rustc_interface/src/interface.rs b/compiler/rustc_interface/src/interface.rs
index f53b320f2e0..a45762b2ce7 100644
--- a/compiler/rustc_interface/src/interface.rs
+++ b/compiler/rustc_interface/src/interface.rs
@@ -336,10 +336,7 @@ pub fn run_compiler<R: Send>(config: Config, f: impl FnOnce(&Compiler) -> R + Se
 
             let early_dcx = EarlyDiagCtxt::new(config.opts.error_format);
 
-            let sysroot = match &config.opts.maybe_sysroot {
-                Some(sysroot) => sysroot.clone(),
-                None => filesearch::get_or_default_sysroot().expect("Failed finding sysroot"),
-            };
+            let sysroot = filesearch::materialize_sysroot(config.opts.maybe_sysroot.clone());
 
             let (codegen_backend, target_cfg) = match config.make_codegen_backend {
                 None => {
diff --git a/compiler/rustc_interface/src/tests.rs b/compiler/rustc_interface/src/tests.rs
index b1d874d7204..0651950b967 100644
--- a/compiler/rustc_interface/src/tests.rs
+++ b/compiler/rustc_interface/src/tests.rs
@@ -13,7 +13,7 @@ use rustc_session::config::{
 use rustc_session::lint::Level;
 use rustc_session::search_paths::SearchPath;
 use rustc_session::utils::{CanonicalizedPath, NativeLib, NativeLibKind};
-use rustc_session::{build_session, getopts, CompilerIO, EarlyDiagCtxt, Session};
+use rustc_session::{build_session, filesearch, getopts, CompilerIO, EarlyDiagCtxt, Session};
 use rustc_span::edition::{Edition, DEFAULT_EDITION};
 use rustc_span::symbol::sym;
 use rustc_span::{FileName, SourceFileHashAlgorithm};
@@ -38,12 +38,7 @@ fn mk_session(matches: getopts::Matches) -> (Session, Cfg) {
         temps_dir,
     };
 
-    let sysroot = match &sessopts.maybe_sysroot {
-        Some(sysroot) => sysroot.clone(),
-        None => {
-            rustc_session::filesearch::get_or_default_sysroot().expect("Failed finding sysroot")
-        }
-    };
+    let sysroot = filesearch::materialize_sysroot(sessopts.maybe_sysroot.clone());
 
     let target_cfg =
         rustc_session::config::build_target_config(&early_dcx, &sessopts, None, &sysroot);
diff --git a/compiler/rustc_session/src/config.rs b/compiler/rustc_session/src/config.rs
index 63bc902c813..2ad959d3832 100644
--- a/compiler/rustc_session/src/config.rs
+++ b/compiler/rustc_session/src/config.rs
@@ -6,7 +6,7 @@ pub use crate::options::*;
 use crate::errors::FileWriteFail;
 use crate::search_paths::SearchPath;
 use crate::utils::{CanonicalizedPath, NativeLib, NativeLibKind};
-use crate::{lint, HashStableContext};
+use crate::{filesearch, lint, HashStableContext};
 use crate::{EarlyDiagCtxt, Session};
 use rustc_data_structures::fx::{FxHashMap, FxHashSet, FxIndexMap, FxIndexSet};
 use rustc_data_structures::stable_hasher::{StableOrd, ToStableHashKey};
@@ -2856,16 +2856,8 @@ pub fn build_session_options(early_dcx: &mut EarlyDiagCtxt, matches: &getopts::M
 
     let logical_env = parse_logical_env(early_dcx, matches);
 
-    // Try to find a directory containing the Rust `src`, for more details see
-    // the doc comment on the `real_rust_source_base_dir` field.
-    let tmp_buf;
-    let sysroot = match &sysroot_opt {
-        Some(s) => s,
-        None => {
-            tmp_buf = crate::filesearch::get_or_default_sysroot().expect("Failed finding sysroot");
-            &tmp_buf
-        }
-    };
+    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");
@@ -2909,7 +2901,7 @@ pub fn build_session_options(early_dcx: &mut EarlyDiagCtxt, matches: &getopts::M
         describe_lints,
         output_types,
         search_paths,
-        maybe_sysroot: sysroot_opt,
+        maybe_sysroot: Some(sysroot),
         target_triple,
         test,
         incremental,
diff --git a/compiler/rustc_session/src/filesearch.rs b/compiler/rustc_session/src/filesearch.rs
index 6e459ac45d3..668acc0f761 100644
--- a/compiler/rustc_session/src/filesearch.rs
+++ b/compiler/rustc_session/src/filesearch.rs
@@ -194,6 +194,12 @@ pub fn sysroot_candidates() -> SmallVec<[PathBuf; 2]> {
     return sysroot_candidates;
 }
 
+/// Returns the provided sysroot or calls [`get_or_default_sysroot`] if it's none.
+/// Panics if [`get_or_default_sysroot`]  returns an error.
+pub fn materialize_sysroot(maybe_sysroot: Option<PathBuf>) -> PathBuf {
+    maybe_sysroot.unwrap_or_else(|| get_or_default_sysroot().expect("Failed finding sysroot"))
+}
+
 /// This function checks if sysroot is found using env::args().next(), and if it
 /// is not found, finds sysroot from current rustc_driver dll.
 pub fn get_or_default_sysroot() -> Result<PathBuf, String> {