Bug 25224

Summary: stack overflow after printfn something
Product: [Mono] Runtime Reporter: ZAN DoYe <zandoye>
Component: JITAssignee: jaykrell
Status: RESOLVED FIXED    
Severity: normal CC: ludovic, masafa, mono-bugs+mono, mono-bugs+runtime, vargaz, vlad.brezae
Priority: ---    
Version: 5.10 (2017-12)   
Target Milestone: ---   
Hardware: PC   
OS: All   
Tags: bugpool-archived Is this bug a regression?: ---
Last known good build:

Description ZAN DoYe 2014-12-10 07:20:39 UTC
let rec a ()= printfn "%d" 1; b ()
and b ()= a ()
let ()= a ()



compiled with fsharp 3.1.1.26+dfsg2-3~xamarin1
The 3 lines program above causes stack overflow.
If I replace `"%d" 1' with `"1"', the program just keep running properly.
Comment 1 Zoltan Varga 2014-12-11 13:29:32 UTC
Seems to be caused by missing tail call optimization.
Comment 2 Zoltan Varga 2014-12-11 15:40:19 UTC
Fixed in mono master ca0dd5c0bb0f600331aac3c6b8d0579e37cdd0c7.
Comment 3 Zoltan Varga 2014-12-11 17:52:23 UTC
Reverted the fix as it causes a perf regression.
Comment 4 Ludovic Henry 2018-01-05 13:47:31 UTC
I can reproduce with Mono 5.10.0.0 (2017-12/ec4a957151a).
Comment 5 Ludovic Henry 2018-02-25 23:11:59 UTC
https://github.com/mono/mono/pull/7266
Comment 6 Ludovic Henry 2018-03-09 20:10:59 UTC
https://github.com/mono/mono/pull/7426
Comment 7 Ludovic Henry 2018-03-09 20:12:03 UTC
Fixed in master with https://github.com/mono/mono/commit/b4ee86154fce71ba4eb96f4c591a5ce236d23b85