Auto merge of #123788 - bjorn3:disable_ctrlc_on_wasi, r=Nilstrieb,lcnr

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.
This commit is contained in:
bors 2024-04-11 13:43:14 +00:00
commit 72fe8a0f00
3 changed files with 13 additions and 34 deletions

View File

@ -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']

View File

@ -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

View File

@ -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 @@
/// 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 @@
"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);
}
}