let check_assigns goal region wp =
match goal , region with
| NoAssigns , _ -> wp
| (EffectAssigns _ | RegionAssigns _) , None -> wp
(* TODO: Should be Assigns Everything !! *)
(* Seems to be a bug in CIL because Nothing leads
to no assigned, hence None. *)
(*
Datalib.Collector.add_warning
~severe:true
~reason:"Assigns everything during calculus"
"Can not prove the assign goal" ;
F.p_false
*)
| EffectAssigns a , Some zones ->
let ze = List.fold_left
(fun zs a ->
let za = WpModel.dzone_assigned a in
WpModel.dzone_union zs za)
(F.var a.a_effect) zones
in
D.subst a.a_effect ze wp
| RegionAssigns r , Some zones ->
let re = List.fold_left
(fun rs a ->
let ra = WpModel.region_assigned a in
WpModel.region_union rs ra)
(WpModel.region_empty()) zones
in
F.p_implies (region_included re r) wp