package frama-c
Source file cfgInit.ml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57(**************************************************************************) (* *) (* SPDX-License-Identifier LGPL-2.1 *) (* Copyright (C) *) (* CEA (Commissariat à l'énergie atomique et aux énergies alternatives) *) (* *) (**************************************************************************) (* Compute Init WP *) module Make(W : Mcfg.S) = struct let compute_global_init wenv filter obj = Globals.Vars.fold_in_file_rev_order (fun var initinfo obj -> if var.vstorage = Extern then obj else let do_init = match filter with | `All -> true | `InitConst -> Cil.isGlobalInitConst var in if not do_init then obj else Current_loc.with_loc var.vdecl (W.init wenv var initinfo.init) obj ) obj let process_global_const wenv obj = Globals.Vars.fold_in_file_rev_order (fun var _initinfo obj -> if Cil.isGlobalInitConst var then W.const wenv var obj else obj ) obj (* WP of global initializations. *) let process_global_init wenv kf obj = if CfgInfos.is_entry_point kf then begin let obj = W.label wenv None Clabels.init obj in compute_global_init wenv `All obj end else if W.has_init wenv then begin let obj = if Wp_parameters.Init.get () then process_global_const wenv obj else obj in let obj = W.use_assigns wenv None WpPropId.mk_init_assigns obj in let obj = W.label wenv None Clabels.init obj in compute_global_init wenv `All obj end else if Wp_parameters.Init.get () then compute_global_init wenv `InitConst obj else obj end