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