let build_obligs m with_bot do_dot l_cfg_annots =
let m_name = model_name m in
let do_one obligs (cfg, l_annots) =
let kf = Cil2cfg.cfg_kf cfg in
let kf_name = Kernel_function.get_name kf in
Wp_parameters.feedback
"compute for '%s' with model %s@." kf_name m_name;
let do_annots obligs annots =
let bhv_name = match annots.WpAnnot.behavior_name with
| None -> Macros.name_of_default_behavior
| Some bhv -> bhv
in
Wp_parameters.feedback
"compute proof obligations for '%s' behavior@." bhv_name;
try
let obligs, restbl = wp_cfg_fun m ~with_bot obligs cfg annots in
if do_dot then
(let filename = (kf_name^".wp_"^m_name) in
ignore (cfg_dot (m_name^" results") filename cfg (Some restbl)));
obligs
with
| Calculus.InvalidModel s ->
Wp_parameters.warning "Failed on '%s' for '%s' with model %s: %s@."
kf_name bhv_name m_name s;
obligs
| Extlib.NotYetImplemented msg ->
Wp_parameters.warning
"Failed on '%s' for '%s' with model %s. Not Implemented : %s@."
kf_name bhv_name m_name msg ;
obligs
in List.fold_left do_annots obligs l_annots
in let obligs = List.fold_left do_one [] l_cfg_annots in
let obligs =
if List.length obligs > 0 then Some (add_glob_decls m obligs) else None
in obligs