mirror of
https://github.com/rust-lang/rust.git
synced 2026-04-27 18:57:42 +03:00
Couple of changes to run rustc in miri
This commit is contained in:
@@ -3,13 +3,13 @@
|
||||
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 @@ pub unsafe fn map(file: File) -> io::Result<Self> {
|
||||
}
|
||||
}
|
||||
|
||||
#[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 @@ fn as_ref(&self) -> &[u8] {
|
||||
}
|
||||
}
|
||||
|
||||
#[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 @@ pub fn make_read_only(self) -> std::io::Result<Mmap> {
|
||||
}
|
||||
}
|
||||
|
||||
#[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 @@
|
||||
///
|
||||
/// 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 @@
|
||||
#[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
|
||||
|
||||
@@ -1764,7 +1764,7 @@ fn emit_messages_default_inner(
|
||||
|
||||
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()
|
||||
|
||||
Reference in New Issue
Block a user