Module Build.BuildPdg

module BuildPdg: sig .. end
Module to build the PDG.

type arg_nodes = PdgTypes.Node.t list 
type t = {
   fct :Cil_types.kernel_function;
   mutable topinput :PdgTypes.Node.t option;
   mutable other_inputs :(PdgTypes.Node.t * PdgTypes.Dpd.td * Locations.Zone.t) list;
   graph :PdgTypes.G.t;
   states :Pdg_state.states;
   index :PdgTypes.Pdg.fi;
   ctrl_dpds :Build.BoolNodeSet.t Cil_datatype.Stmt.Hashtbl.t; (*The nodes to which each stmt control-depend on. The links will be added in the graph at the end.*)
   decl_nodes :PdgTypes.Node.t Cil_datatype.Varinfo.Hashtbl.t; (*map between declaration nodes and the variables to build the dependencies.*)
}
The PDG used during its computation.
val empty_state : PdgTypes.data_state
val bottom_state : PdgTypes.data_state
val create : Kernel_function.t -> t
val get_kf : t -> Cil_types.kernel_function
val get_states : t -> Pdg_state.states
val test_and_merge_states : old:PdgTypes.data_state -> PdgTypes.data_state -> bool * PdgTypes.data_state
val print_state : Format.formatter -> PdgTypes.data_state -> unit
val process_declarations : t ->
formals:Cil_datatype.Varinfo.Hashtbl.key list ->
locals:Cil_datatype.Varinfo.Hashtbl.key list -> PdgTypes.data_state
val process_call_node : t -> Cil_types.stmt -> unit
val process_call_args : t ->
PdgTypes.data_state ->
Cil_types.stmt ->
(Locations.Zone.t * Cil_datatype.Varinfo.Set.t) list -> PdgTypes.Node.t list
val process_call_params : t ->
PdgTypes.data_state ->
Cil_types.stmt ->
Kernel_function.t -> PdgTypes.Node.t list -> PdgTypes.data_state
Add a PDG node for each formal argument, and add its dependencies to the corresponding argument node.
val process_call_ouput : t ->
PdgTypes.data_state ->
PdgTypes.data_state ->
Cil_types.stmt ->
int ->
Locations.Zone.t ->
bool -> Locations.Zone.t -> Locations.Zone.t -> PdgTypes.data_state
val process_call_return : t ->
PdgTypes.data_state ->
PdgTypes.data_state ->
Cil_types.stmt ->
l_loc:Locations.Zone.t ->
exact:bool ->
l_dpds:Locations.Zone.t ->
l_decl:Cil_datatype.Varinfo.Set.t ->
r_dpds:Locations.Zone.t -> Locations.Zone.t -> PdgTypes.data_state
mix between process_call_ouput and process_asgn
val process_asgn : t ->
PdgTypes.data_state ->
Cil_types.stmt ->
l_loc:Locations.Zone.t ->
exact:bool ->
l_dpds:Locations.Zone.t ->
l_decl:Cil_datatype.Varinfo.Set.t ->
r_dpds:Locations.Zone.t ->
r_decl:Cil_datatype.Varinfo.Set.t -> PdgTypes.data_state
val process_skip : t -> 'a -> Cil_types.stmt -> 'b option
val process_asm : t -> 'a -> Cil_types.stmt -> 'b option
val process_unreachable : 'a -> 'b -> 'c -> PdgTypes.data_state option
val process_unreachable_call : 'a -> 'b -> 'c -> PdgTypes.data_state option
val process_stmt_labels : t -> Cil_types.stmt -> unit
val process_jump : t ->
Cil_types.stmt -> Datatype.Bool.t * Cil_datatype.Stmt.Hptset.t -> unit
val process_jump_with_exp : t ->
Cil_types.stmt ->
Datatype.Bool.t * Cil_datatype.Stmt.Hptset.t ->
PdgTypes.data_state -> Locations.Zone.t -> Cil_datatype.Varinfo.Set.t -> unit
val process_block : t -> Cil_types.stmt -> Cil_types.block -> unit
val process_entry_point : t -> Cil_datatype.Stmt.Hashtbl.key list -> unit
val add_retres : t ->
PdgTypes.data_state ->
Cil_types.stmt ->
Locations.Zone.t -> Cil_datatype.Varinfo.Set.t -> PdgTypes.data_state
val store_last_state : t -> PdgTypes.data_state -> unit
val finalize_pdg : t -> Function_Froms.froms option -> PdgTypes.Pdg.t
from_opt : for undefined functions (declarations)