intrinsics::abort compiles down to an illegal instruction, which on Unix-like platforms causes the process to be killed with SIGILL. A more appropriate way to kill the process would be SIGABRT; this indicates better that the runtime has explicitly aborted, rather than some kind of compiler bug or architecture mismatch that SIGILL might indicate. For rtassert!, replace this with libc::abort. libc::abort raises SIGABRT, but is defined to do so in such a way that it will terminate the process even if SIGABRT is currently masked or caught by a signal handler that returns. On non-Unix platforms, retain the existing behavior. On Windows we prefer to avoid depending on the C runtime, and we need a fallback for any other platforms that may be defined. An alternative on Windows would be to call TerminateProcess, but this seems less essential than switching to using SIGABRT on Unix-like platforms, where it is common for the process-killing signal to be printed out or logged. This is a [breaking-change] for any code that depends on the exact signal raised to abort a process via rtabort! cc #31273 cc #31333 |
||
|---|---|---|
| .. | ||
| auxiliary | ||
| codegen | ||
| codegen-units | ||
| compile-fail | ||
| compile-fail-fulldeps | ||
| debuginfo | ||
| parse-fail | ||
| pretty | ||
| run-fail | ||
| run-fail-fulldeps | ||
| run-make | ||
| run-pass | ||
| run-pass-fulldeps | ||
| run-pass-valgrind | ||
| rustdoc | ||