blob: babdb73f093a1de7c45cd636ec9ea36f60d6c1b4 [file] [log] [blame] [edit]
//@compile-flags: -Cpanic=abort
#![feature(start, core_intrinsics)]
#![feature(alloc_error_handler)]
#![feature(allocator_api)]
#![no_std]
extern crate alloc;
use alloc::alloc::*;
use core::fmt::Write;
#[path = "../../utils/mod.no_std.rs"]
mod utils;
#[alloc_error_handler]
fn alloc_error_handler(layout: Layout) -> ! {
let _ = writeln!(utils::MiriStderr, "custom alloc error handler: {layout:?}");
core::intrinsics::abort(); //~ERROR: aborted
}
// rustc requires us to provide some more things that aren't actually used by this test
mod plumbing {
use super::*;
#[panic_handler]
fn panic_handler(_: &core::panic::PanicInfo) -> ! {
loop {}
}
struct NoAlloc;
unsafe impl GlobalAlloc for NoAlloc {
unsafe fn alloc(&self, _: Layout) -> *mut u8 {
unreachable!();
}
unsafe fn dealloc(&self, _: *mut u8, _: Layout) {
unreachable!();
}
}
#[global_allocator]
static GLOBAL: NoAlloc = NoAlloc;
}
#[start]
fn start(_: isize, _: *const *const u8) -> isize {
handle_alloc_error(Layout::for_value(&0));
}