let init_value env lv typ e_opt wp =
on_context env "init_value" wp Keep_opened Keep_assigns
(fun env _assigns p ->
try
let mem = L.mem_at env Clabels.Here in
let obj = Ctypes.object_of typ in
let loc = compute_init_loc mem lv in
let loaded = WpModel.logic_of_value (WpModel.load mem obj loc) in
match e_opt with
| None ->
begin
match WpModel.symb_is_init obj with
| Some p_name -> F.p_implies (F.p_app1 p_name loaded) p
| None -> p
end
| Some vexp ->
let value =
WpModel.logic_of_value (compute_init_value mem vexp)
in
F.p_implies (WpModel.equal obj loaded value) p
with SkipInit -> p)