let rec init_value_term pool x = function
| C_int _ -> F.p_eq x (F.wrap F.i_zero)
| C_float _ -> F.p_eq x (F.wrap F.r_zero)
| C_pointer te -> M.equal_loc (M.loc_of_term (object_of te) x) M.null
| C_array arr ->
let obj = object_of arr.arr_element in
begin
match arr.arr_flat with
| None -> F.p_true
| Some f ->
let bound = F.e_int64 f.arr_size in
InitObjRangeDef.define obj ;
F.p_app3 (InitObjRange.get_definition obj).d_name x
F.i_zero bound
end
| C_comp cp ->
begin
let get_f f = F.acc_field (F.unwrap x) f in
let field_init f =
init_value_term pool (get_f f) (object_of f.ftype)
in
List.fold_left (fun p f -> F.p_and p (field_init f))
F.p_true cp.cfields
end