let call_res_and_add_post called_kf call_env res post p =
  let res_lv = Macros.result_var called_kf in
  (* change the name of the result in the post
   * in order to avoid confusing it with current result 
     * Even with kf_res_var, because of recursive calls.
     * *)

  let new_res_lv = Cil_const.make_logic_var 
                     res_lv.Cil_types.lv_name res_lv.Cil_types.lv_type in
  let called_res = MV.mk_lvar new_res_lv in
  let p = match res with
    | Some res -> assign_exp res called_res p
    | None -> p
  in
    let do_post post p = 
      let post = replace_at_vars call_env (LogicLabel "Post") post in
      let post = replace_at_vars call_env (LogicLabel "Here") post in
      let post = M.subst_res_var res_lv new_res_lv post in
        Fol.pimplies (post, p)
    in
    let p = List.fold_right do_post post p in
  (*let p = add_lvar_base_hyp p new_res_lv in
  let dummy_prop_in_data _ _ = assert false in
  let addr_res_lv = WpFol.addr_lvar new_res_lv in
  let p =  Fol.forall_pred dummy_prop_in_data ~fresh:false addr_res_lv p in*)

  let p = MV.forall_lv false new_res_lv p in
    p