From 37f576c62a330ab2bda9be51c6bf1ba5e0dc8aea Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Thu, 11 Apr 2024 11:22:11 +0000 Subject: [PATCH 1/2] Disable Ctrl-C handling on WASM WASM fundamentally doesn't support signals. If WASI ever gets support for notifying the guest process of a Ctrl-C that happened, this would have to be done through the guest process polling for the signal, which will require thread support in WASI too to be compatible with the api provided by the ctrlc crate. --- compiler/rustc_driver_impl/Cargo.toml | 6 +++++- compiler/rustc_driver_impl/src/lib.rs | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/compiler/rustc_driver_impl/Cargo.toml b/compiler/rustc_driver_impl/Cargo.toml index e4fb13822f8..a8bba3afb7e 100644 --- a/compiler/rustc_driver_impl/Cargo.toml +++ b/compiler/rustc_driver_impl/Cargo.toml @@ -5,7 +5,6 @@ edition = "2021" [dependencies] # tidy-alphabetical-start -ctrlc = "3.4.4" rustc_ast = { path = "../rustc_ast" } rustc_ast_lowering = { path = "../rustc_ast_lowering" } rustc_ast_passes = { path = "../rustc_ast_passes" } @@ -66,6 +65,11 @@ features = [ "Win32_System_Diagnostics_Debug", ] +[target.'cfg(not(target_family = "wasm"))'.dependencies] +# tidy-alphabetical-start +ctrlc = "3.4.4" +# tidy-alphabetical-end + [features] # tidy-alphabetical-start llvm = ['rustc_interface/llvm'] diff --git a/compiler/rustc_driver_impl/src/lib.rs b/compiler/rustc_driver_impl/src/lib.rs index 1f44621736c..b3cba4dbfc2 100644 --- a/compiler/rustc_driver_impl/src/lib.rs +++ b/compiler/rustc_driver_impl/src/lib.rs @@ -1500,6 +1500,7 @@ pub fn init_logger(early_dcx: &EarlyDiagCtxt, cfg: rustc_log::LoggerConfig) { /// Install our usual `ctrlc` handler, which sets [`rustc_const_eval::CTRL_C_RECEIVED`]. /// Making this handler optional lets tools can install a different handler, if they wish. pub fn install_ctrlc_handler() { + #[cfg(not(target_family = "wasm"))] ctrlc::set_handler(move || { // Indicate that we have been signaled to stop. If we were already signaled, exit // immediately. In our interpreter loop we try to consult this value often, but if for From 8b0b88adb2ed69a8cef9c0d10708973060ab8142 Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Thu, 11 Apr 2024 12:35:32 +0000 Subject: [PATCH 2/2] Remove wasm dep filter from tidy It incorrectly filters out non-wasm dependencies too. --- src/tools/tidy/src/deps.rs | 40 +++++++------------------------------- 1 file changed, 7 insertions(+), 33 deletions(-) diff --git a/src/tools/tidy/src/deps.rs b/src/tools/tidy/src/deps.rs index aec2856dbbc..f380513f4ef 100644 --- a/src/tools/tidy/src/deps.rs +++ b/src/tools/tidy/src/deps.rs @@ -1,6 +1,6 @@ //! Checks the licenses of third-party dependencies. -use cargo_metadata::{DepKindInfo, Metadata, Package, PackageId}; +use cargo_metadata::{Metadata, Package, PackageId}; use std::collections::HashSet; use std::path::Path; @@ -191,6 +191,7 @@ const PERMITTED_DEPS_LOCATION: &str = concat!(file!(), ":", line!()); /// rustc. Please check with the compiler team before adding an entry. const PERMITTED_RUSTC_DEPENDENCIES: &[&str] = &[ // tidy-alphabetical-start + "addr2line", "adler", "ahash", "aho-corasick", @@ -468,6 +469,7 @@ const PERMITTED_CRANELIFT_DEPENDENCIES: &[&str] = &[ "mach", "memchr", "object", + "once_cell", "proc-macro2", "quote", "regalloc2", @@ -668,27 +670,7 @@ fn check_permitted_dependencies( let mut deps = HashSet::new(); for to_check in restricted_dependency_crates { let to_check = pkg_from_name(metadata, to_check); - use cargo_platform::Cfg; - use std::str::FromStr; - // We don't expect the compiler to ever run on wasm32, so strip - // out those dependencies to avoid polluting the permitted list. - deps_of_filtered(metadata, &to_check.id, &mut deps, &|dep_kinds| { - dep_kinds.iter().any(|dep_kind| { - dep_kind - .target - .as_ref() - .map(|target| { - !target.matches( - "wasm32-unknown-unknown", - &[ - Cfg::from_str("target_arch=\"wasm32\"").unwrap(), - Cfg::from_str("target_os=\"unknown\"").unwrap(), - ], - ) - }) - .unwrap_or(true) - }) - }); + deps_of(metadata, &to_check.id, &mut deps); } // Check that the PERMITTED_DEPENDENCIES does not have unused entries. @@ -740,18 +722,13 @@ fn compute_runtime_crates<'a>(metadata: &'a Metadata) -> HashSet<&'a PackageId> let mut result = HashSet::new(); for name in RUNTIME_CRATES { let id = &pkg_from_name(metadata, name).id; - deps_of_filtered(metadata, id, &mut result, &|_| true); + deps_of(metadata, id, &mut result); } result } /// Recursively find all dependencies. -fn deps_of_filtered<'a>( - metadata: &'a Metadata, - pkg_id: &'a PackageId, - result: &mut HashSet<&'a PackageId>, - filter: &dyn Fn(&[DepKindInfo]) -> bool, -) { +fn deps_of<'a>(metadata: &'a Metadata, pkg_id: &'a PackageId, result: &mut HashSet<&'a PackageId>) { if !result.insert(pkg_id) { return; } @@ -764,9 +741,6 @@ fn deps_of_filtered<'a>( .find(|n| &n.id == pkg_id) .unwrap_or_else(|| panic!("could not find `{pkg_id}` in resolve")); for dep in &node.deps { - if !filter(&dep.dep_kinds) { - continue; - } - deps_of_filtered(metadata, &dep.pkg, result, filter); + deps_of(metadata, &dep.pkg, result); } }