let propagates_pre_post_constraints file root =
Hashtbl.clear functions_pre_usecase ;
Hashtbl.clear functions_post_usecase;
spec_modified:=false;
let visitor = new visit_propagating_pre_post_constraints (Data_for_ltl.getAutomata()) in
Cil.visitCilFile (visitor :> Cil.cilVisitor) file;
List.iter
(fun name ->
if name <> root then
begin
let old_pre = (Data_for_ltl.get_func_pre name) in
let old_post = (Data_for_ltl.get_func_post name) in
let pre = try Hashtbl.find functions_pre_usecase name with Not_found -> (mk_empty_pre_or_post()) in
let post = try Hashtbl.find functions_post_usecase name with Not_found -> (mk_empty_pre_or_post()) in
let cur_pre = double_bool_array_and pre old_pre in
let cur_post = double_bool_array_and post old_post in
if (not (double_bool_array_eq old_pre cur_pre ) )
then begin spec_modified:=true; end;
if (not (double_bool_array_eq old_post cur_post) )
then begin spec_modified:=true; end;
Data_for_ltl.set_func_pre name cur_pre;
Data_for_ltl.set_func_post name cur_post
end
)
(Data_for_ltl.getFunctions_from_c ());
!spec_modified