Rollup merge of #136580 - bjorn3:miri_fixes, r=lqd
Couple of changes to run rustc in miri This is not the full set of patches required to run rustc in miri, but it is the fast majority of the changes to rustc itself. There is also a change to the jobserver crate necessary and on arm64 a change to the memchr crate. Running rustc in miri has already found some UB: https://github.com/rust-lang/rust/pull/136579 cc https://github.com/rust-lang/rust/issues/135870#issuecomment-2612470540
This commit is contained in:
commit
3eb1ef836e
4 changed files with 24 additions and 12 deletions
|
@ -3,13 +3,13 @@ use std::io;
|
|||
use std::ops::{Deref, DerefMut};
|
||||
|
||||
/// A trivial wrapper for [`memmap2::Mmap`] (or `Vec<u8>` on WASM).
|
||||
#[cfg(not(target_arch = "wasm32"))]
|
||||
#[cfg(not(any(miri, target_arch = "wasm32")))]
|
||||
pub struct Mmap(memmap2::Mmap);
|
||||
|
||||
#[cfg(target_arch = "wasm32")]
|
||||
#[cfg(any(miri, target_arch = "wasm32"))]
|
||||
pub struct Mmap(Vec<u8>);
|
||||
|
||||
#[cfg(not(target_arch = "wasm32"))]
|
||||
#[cfg(not(any(miri, target_arch = "wasm32")))]
|
||||
impl Mmap {
|
||||
/// # Safety
|
||||
///
|
||||
|
@ -29,7 +29,7 @@ impl Mmap {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(target_arch = "wasm32")]
|
||||
#[cfg(any(miri, target_arch = "wasm32"))]
|
||||
impl Mmap {
|
||||
#[inline]
|
||||
pub unsafe fn map(mut file: File) -> io::Result<Self> {
|
||||
|
@ -56,13 +56,13 @@ impl AsRef<[u8]> for Mmap {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(not(target_arch = "wasm32"))]
|
||||
#[cfg(not(any(miri, target_arch = "wasm32")))]
|
||||
pub struct MmapMut(memmap2::MmapMut);
|
||||
|
||||
#[cfg(target_arch = "wasm32")]
|
||||
#[cfg(any(miri, target_arch = "wasm32"))]
|
||||
pub struct MmapMut(Vec<u8>);
|
||||
|
||||
#[cfg(not(target_arch = "wasm32"))]
|
||||
#[cfg(not(any(miri, target_arch = "wasm32")))]
|
||||
impl MmapMut {
|
||||
#[inline]
|
||||
pub fn map_anon(len: usize) -> io::Result<Self> {
|
||||
|
@ -82,7 +82,7 @@ impl MmapMut {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(target_arch = "wasm32")]
|
||||
#[cfg(any(miri, target_arch = "wasm32"))]
|
||||
impl MmapMut {
|
||||
#[inline]
|
||||
pub fn map_anon(len: usize) -> io::Result<Self> {
|
||||
|
|
|
@ -17,6 +17,18 @@ const STACK_PER_RECURSION: usize = 16 * 1024 * 1024; // 16MB
|
|||
///
|
||||
/// Should not be sprinkled around carelessly, as it causes a little bit of overhead.
|
||||
#[inline]
|
||||
#[cfg(not(miri))]
|
||||
pub fn ensure_sufficient_stack<R>(f: impl FnOnce() -> R) -> R {
|
||||
stacker::maybe_grow(RED_ZONE, STACK_PER_RECURSION, f)
|
||||
}
|
||||
|
||||
/// Grows the stack on demand to prevent stack overflow. Call this in strategic locations
|
||||
/// to "break up" recursive calls. E.g. almost any call to `visit_expr` or equivalent can benefit
|
||||
/// from this.
|
||||
///
|
||||
/// Should not be sprinkled around carelessly, as it causes a little bit of overhead.
|
||||
#[cfg(miri)]
|
||||
#[inline]
|
||||
pub fn ensure_sufficient_stack<R>(f: impl FnOnce() -> R) -> R {
|
||||
f()
|
||||
}
|
||||
|
|
|
@ -89,10 +89,10 @@ pub mod pretty;
|
|||
#[macro_use]
|
||||
mod print;
|
||||
mod session_diagnostics;
|
||||
#[cfg(all(unix, any(target_env = "gnu", target_os = "macos")))]
|
||||
#[cfg(all(not(miri), unix, any(target_env = "gnu", target_os = "macos")))]
|
||||
mod signal_handler;
|
||||
|
||||
#[cfg(not(all(unix, any(target_env = "gnu", target_os = "macos"))))]
|
||||
#[cfg(not(all(not(miri), unix, any(target_env = "gnu", target_os = "macos"))))]
|
||||
mod signal_handler {
|
||||
/// On platforms which don't support our signal handler's requirements,
|
||||
/// simply use the default signal handler provided by std.
|
||||
|
@ -1474,7 +1474,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"))]
|
||||
#[cfg(all(not(miri), not(target_family = "wasm")))]
|
||||
ctrlc::set_handler(move || {
|
||||
// Indicate that we have been signaled to stop, then give the rest of the compiler a bit of
|
||||
// time to check CTRL_C_RECEIVED and run its own shutdown logic, but after a short amount
|
||||
|
|
|
@ -1765,7 +1765,7 @@ impl HumanEmitter {
|
|||
|
||||
let column_width = if let Some(width) = self.diagnostic_width {
|
||||
width.saturating_sub(code_offset)
|
||||
} else if self.ui_testing {
|
||||
} else if self.ui_testing || cfg!(miri) {
|
||||
DEFAULT_COLUMN_WIDTH
|
||||
} else {
|
||||
termize::dimensions()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue