let post_of_assigns_in_spec kf ki spec termination_kind =
let add_behav acc bhv =
let add_assign (n, acc) (output, inputs) =
let output = match output with
| Nothing ->
Wp_parameters.fatal "Nothing as output in an assigns clause ?"
| Location {Cil_types.it_content=lv} -> lv
in
let acc = match termination_kind, output.term_node with
| Exits, TLval (TResult _, _ ) -> acc
| Normal, TLval (TVar{lv_name = "\\exit_status"},_) -> acc
| _, _ ->
let p_eq = build_fimpl_call kf ki bhv n output inputs in
p_eq::acc
in
n+1, acc
in
let _, bacc = List.fold_left add_assign (1, []) bhv.b_assigns in
let p = Logic_const.pands bacc in
let assumes = Logic_const.pold (build_bhv_assumes bhv) in
let p = Logic_const.pimplies (assumes, p) in
let p = Logic_const.new_predicate p in
(bhv,p)::acc
in let acc = List.fold_left add_behav [] spec.spec_behavior in
acc