Control Flow Graph for Interprocedural Analysis

`type t``= InferIR.Procdesc.t InferIR.Typ.Procname.Hash.t```

A control-flow graph is a collection of all the CFGs for the procedure names in a file

`val load : InferBase.SourceFile.t ‑> t option`

Load the cfgs of the procedures of a source file

`val get_all_proc_names : t ‑> InferIR.Typ.Procname.t list`

get all the keys from the hashtable

### Functions for manipulating an interprocedural CFG

`val create : unit ‑> t`

create a new empty cfg

`val create_proc_desc : t ‑> InferIR.ProcAttributes.t ‑> InferIR.Procdesc.t`

Create a new procdesc and add it to the cfg

`val iter_all_nodes : ?⁠sorted:bool ‑> t ‑> f:(InferIR.Procdesc.t ‑> InferIR.Procdesc.Node.t ‑> unit) ‑> unit`

Iterate over all the nodes in the cfg

`val save_attributes : InferBase.SourceFile.t ‑> t ‑> unit`

Save the .attr files for the procedures in the cfg.

`val inline_java_synthetic_methods : t ‑> unit`

Inline the java synthetic methods in the cfg (in-place)

`val merge : src:t ‑> dst:t ‑> t`

Best-effort merge of `src` into `dst`. If a procedure is both in `dst` and `src`, the one in `src` will get overwritten.

`val pp_proc_signatures : Format.formatter ‑> t ‑> unit`
`module SQLite : InferBase.SqliteUtils.Data with type t = t`