let spec funspec =
  let require p =
    JCCrequires(locate (pred (Logic_const.pred_of_id_pred p)))
  in
  let requires = List.map require funspec.spec_requires in
  let behavior b =
    JCCbehavior(
      Loc.dummy_position,
      b.b_name,
      None(* throws *)
      Some(conjunct Loc.dummy_position b.b_assumes),
      None(* requires *)
      assigns b.b_assigns,
      locate (conjunct Loc.dummy_position b.b_ensures))
  in
  let behaviors = List.map behavior funspec.spec_behavior in

  if funspec.spec_complete_behaviors <> [] then
    warn_general "Complete behaviors specification(s) ignored" ;
  if funspec.spec_disjoint_behaviors <> [] then
    warn_general "Disjoint behaviors specification(s) ignored" ;
  if funspec.spec_variant <> None then
    warn_general "Variant(s) for recursive function ignored" ;
  if funspec.spec_terminates <> None then
    warn_general "Termination condition(s) ignored" ;

  (* TODO: translate function spec variant, terminates and complete/disjoint
     behaviors *)

  requires @ behaviors