let forall_addr_cvar glob vi p =
let lv = Cil.cvar_to_lvar vi in
try
if glob then p
else
begin try
let avar = WpFol.addr_lvar ~create:false lv in
let p = Fol.pimplies
(Why_ops.base_id (Fol.Tvar avar) lv.lv_id, p) in
Fol.forall_pred M.prop_in_data ~fresh:false avar p
with WpFol.No_addr -> p
end
with Types.Unsupported t ->
let msg = Pretty_utils.sfprintf "unsupported type for variable '%s': %s"
lv.lv_name t
in abort msg