In release mode LLVM seems to be optimizing out the entire program due to dead-code elimination (or maybe sibling-call elimination?), but in debug this is what you get:
<anon>:1:1: 3:2 warning: function cannot return without recurring, #[warn(unconditional_recursion)] on by default
<anon>:1 fn main() {
<anon>:2 main()
<anon>:3 }
<anon>:2:5: 2:11 note: recursive call site
<anon>:2 main()
^~~~~~
<anon>:1:1: 3:2 help: a `loop` may express intention better if this is on purpose
thread '<main>' has overflowed its stack
fatal runtime error: stack overflow
playpen: application terminated abnormally with signal 4 (Illegal instruction)
Even though Rust doesn't guarantee stack probes on any OS but Windows at the moment (LLVM patches pending), Rust does guarantee guard pages on all platforms (AFAIK), and assuming that a function's stack frame is always less than a page (which I think should be true), then Rust does indeed seem to guarantee that such an overflow will raise SIGILL.In any case, the Rust language, when it gets guarantees (i.e. a spec), will at the very least guarantee that stack overflow doesn't result in memory corruption, it may not be too opinionated on how exactly implementations make this guarantee. As you say, the rustc compiler currently handles it by guard pages and aborting but not perfectly (it's not hard to have a large stack frame: `let x = [0; 10000]`).