This is easy to test with a program consisting of `fn main() { main() }`: <a href="https:&#x2F;&#x2F;play.rust-lang.org&#x2F;" rel="nofollow">https:&#x2F;&#x2F;play.rust-lang.org&#x2F;</a><p>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:<p><pre><code>    &lt;anon&gt;:1:1: 3:2 warning: function cannot return without recurring, #[warn(unconditional_recursion)] on by default
    &lt;anon&gt;:1 fn main() {
    &lt;anon&gt;:2     main()
    &lt;anon&gt;:3 }
    &lt;anon&gt;:2:5: 2:11 note: recursive call site
    &lt;anon&gt;:2     main()
                 ^~~~~~
    &lt;anon&gt;:1:1: 3:2 help: a `loop` may express intention better if this is on purpose

    thread &#x27;&lt;main&gt;&#x27; has overflowed its stack
    fatal runtime error: stack overflow
    playpen: application terminated abnormally with signal 4 (Illegal instruction)
</code></pre>
Even though Rust doesn&#x27;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&#x27;s stack frame is always less than a page (which I <i>think</i> should be true), then Rust does indeed seem to guarantee that such an overflow will raise SIGILL.