Besides the point or not, here is a much simpler version of
Marc's program which also segfaults (ocamlc 3.09.1), and
probably due to the same reason:

---

module type Aut =
  sig
    type t
    val f : t -> t
  end

module Map(A : Aut) =
  struct
    type t = A.t list
    let f = List.map A.f (* => Segmentation fault *)
(*  let f x = List.map A.f x *) (* => Stack overflow (correct) *)
  end

module rec M : (Aut with type t = int) =
  struct
    type t
    let f x =
      match MapM.f [x] with
      | [y] -> y
      | _   -> assert false
  end
and MapM : (Aut with type t = M.t list) =
  Map(M)

open M;;
M.f 0

---

Sebastian