| #![feature(start, core_intrinsics)] |
| #![no_std] |
| //@compile-flags: -Cpanic=abort |
| // windows tls dtors go through libstd right now, thus this test |
| // cannot pass. When windows tls dtors go through the special magic |
| // windows linker section, we can run this test on windows again. |
| //@ignore-target-windows: no-std not supported on Windows |
| |
| // Plumbing to let us use `writeln!` to host stderr: |
| |
| extern "Rust" { |
| fn miri_write_to_stderr(bytes: &[u8]); |
| } |
| |
| struct HostErr; |
| |
| use core::fmt::Write; |
| |
| impl Write for HostErr { |
| fn write_str(&mut self, s: &str) -> core::fmt::Result { |
| unsafe { |
| miri_write_to_stderr(s.as_bytes()); |
| } |
| Ok(()) |
| } |
| } |
| |
| // Aaaand the test: |
| |
| #[start] |
| fn start(_: isize, _: *const *const u8) -> isize { |
| panic!("blarg I am dead") |
| } |
| |
| #[panic_handler] |
| fn panic_handler(panic_info: &core::panic::PanicInfo) -> ! { |
| writeln!(HostErr, "{panic_info}").ok(); |
| core::intrinsics::abort(); //~ ERROR: the program aborted execution |
| } |