package goblint

  1. Overview
  2. Docs
Legend:
Library
Module
Module type
Parameter
Class
Class type
include module type of struct include CompareAST end
include module type of struct include CompareCFG end
include module type of struct include CompareAST end
type global_type = CompareAST.global_type =
  1. | Fun
  2. | Decl
  3. | Var
and global_identifier = CompareAST.global_identifier = {
  1. name : string;
  2. global_t : global_type;
}
val compare_global_type : global_type -> global_type -> Ppx_deriving_runtime.int
val compare_global_identifier : global_identifier -> global_identifier -> Ppx_deriving_runtime.int
type method_rename_assumption = CompareAST.method_rename_assumption = {
  1. original_method_name : string;
  2. new_method_name : string;
  3. parameter_renames : string StringMap.t;
}
type method_rename_assumptions = method_rename_assumption CilMaps.VarinfoMap.t
type rename_mapping = string StringMap.t * method_rename_assumptions
val rename_mapping_aware_name_comparison : string -> string -> rename_mapping -> bool
val rename_mapping_to_string : rename_mapping -> string
val identifier_of_global : GoblintCil.global -> global_identifier
val compare_name : string -> string -> bool
val eq_exp2 : rename_mapping -> GoblintCil.exp -> GoblintCil.exp -> bool
val eq_exp : GoblintCil.exp -> GoblintCil.exp -> rename_mapping -> bool
val eq_lhost : GoblintCil.lhost -> GoblintCil.lhost -> rename_mapping -> bool
val global_typ_acc : (GoblintCil.typ * GoblintCil.typ) list ref
val mem_typ_acc : GoblintCil.typ -> GoblintCil.typ -> (GoblintCil.typ * GoblintCil.typ) list -> bool
val pretty_length : unit -> (GoblintCil.typ * GoblintCil.typ) list -> GoblintCil.Pretty.doc
val eq_typ_acc : GoblintCil.typ -> GoblintCil.typ -> (GoblintCil.typ * GoblintCil.typ) list -> rename_mapping -> bool
val eq_typ : GoblintCil.typ -> GoblintCil.typ -> rename_mapping -> bool
val eq_varinfo2 : rename_mapping -> GoblintCil.varinfo -> GoblintCil.varinfo -> bool
val eq_offset : GoblintCil.offset -> GoblintCil.offset -> rename_mapping -> bool
val eq_lval : GoblintCil.lval -> GoblintCil.lval -> rename_mapping -> bool
val eq_instr : rename_mapping -> GoblintCil.instr -> GoblintCil.instr -> bool
val eq_label : GoblintCil.label -> GoblintCil.label -> bool
val eq_stmt_with_location : (GoblintCil.stmt * GoblintCil.fundec) -> (GoblintCil.stmt * GoblintCil.fundec) -> bool
val eq_stmtkind : ?cfg_comp:bool -> (GoblintCil.stmtkind * GoblintCil.fundec) -> (GoblintCil.stmtkind * GoblintCil.fundec) -> rename_mapping -> bool
val eq_stmt : ?cfg_comp:bool -> (GoblintCil.stmt * GoblintCil.fundec) -> (GoblintCil.stmt * GoblintCil.fundec) -> rename_mapping -> bool
val eq_init : GoblintCil.init -> GoblintCil.init -> rename_mapping -> bool
val eq_node : (MyCFG.node * GoblintCil.fundec) -> (MyCFG.node * GoblintCil.fundec) -> bool
val eq_edge : MyCFG.edge -> MyCFG.edge -> bool
val eq_edge_list : MyCFG.edge list -> MyCFG.edge list -> bool
val to_edge_list : ('a * 'b) list -> 'c list
module NH = CompareCFG.NH
type biDirectionNodeMap = CompareCFG.biDirectionNodeMap = {
  1. node1to2 : MyCFG.node NH.t;
  2. node2to1 : MyCFG.node NH.t;
}
val compareCfgs : (module MyCFG.CfgForward) -> (module MyCFG.CfgForward) -> GoblintCil.fundec -> GoblintCil.fundec -> biDirectionNodeMap * unit NH.t
val reexamine : 'a -> CilType.Fundec.t -> biDirectionNodeMap -> unit NH.t -> (module MyCFG.CfgForward) -> (module MyCFG.CfgBidir) -> (NH.key * MyCFG.node) Seq.t * NH.key Seq.t
val compareFun : (module MyCFG.CfgForward) -> (module MyCFG.CfgBidir) -> GoblintCil.fundec -> GoblintCil.fundec -> (NH.key * MyCFG.node) list * NH.key list
type nodes_diff = {
  1. unchangedNodes : (MyCFG.node * MyCFG.node) list;
  2. primObsoleteNodes : MyCFG.node list;
    (*

    primary obsolete nodes -> all obsolete nodes are reachable from these

    *)
}
type unchanged_global = {
  1. old : GoblintCil.global;
  2. current : GoblintCil.global;
}

For semantically unchanged globals, still keep old and current version of global for resetting current to old.

type changed_global = {
  1. old : GoblintCil.global;
  2. current : GoblintCil.global;
  3. unchangedHeader : bool;
  4. diff : nodes_diff option;
}
module VarinfoSet : sig ... end
type change_info = {
  1. mutable changed : changed_global list;
  2. mutable unchanged : unchanged_global list;
  3. mutable removed : GoblintCil.global list;
  4. mutable added : GoblintCil.global list;
  5. mutable exclude_from_rel_destab : VarinfoSet.t;
    (*

    Set of functions that are to be force-reanalyzed. These functions are additionally included in the changed field, among the other changed globals.

    *)
}
val empty_change_info : unit -> change_info
type change_status =
  1. | Unchanged
  2. | Changed
  3. | ChangedFunHeader of GoblintCil.Cil.fundec
  4. | ForceReanalyze of GoblintCil.Cil.fundec
val unchanged_to_change_status : bool -> change_status

Given a boolean that indicates whether the code object is identical to the previous version, returns the corresponding change_status

val should_reanalyze : GoblintCil.Cil.fundec -> bool

Given an (optional) equality function between Cil.globals, an old and a new Cil.file, this function computes a change_info, which describes which globals are changed, unchanged, removed and added.