(* This program is supposed to never terminate. This can actually work if the C compiler is smart enough to recognize and optimize tail calls. It works for me with clang but not with gcc, for some reason. *) let rec loop = fun x -> let _ = print x in loop (x + 1) in loop 0