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()
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue