package goblint

  1. Overview
  2. Docs
Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source

Module Goblint_lib.CompareCIL

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_constant : rename_mapping -> GoblintCil.constant -> GoblintCil.constant -> 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_eitems : rename_mapping -> (string * GoblintCil.exp * GoblintCil.location) BatOrd.eq
val eq_enuminfo : GoblintCil.enuminfo -> GoblintCil.enuminfo -> rename_mapping -> bool
val eq_args : rename_mapping -> (GoblintCil.typ * GoblintCil.typ) list -> (string * GoblintCil.typ * GoblintCil.attributes) BatOrd.eq
val eq_attrparam : rename_mapping -> GoblintCil.attrparam BatOrd.eq
val eq_attribute : rename_mapping -> GoblintCil.attribute BatOrd.eq
val eq_varinfo2 : rename_mapping -> GoblintCil.varinfo -> GoblintCil.varinfo -> bool
val eq_varinfo : GoblintCil.varinfo -> GoblintCil.varinfo -> rename_mapping -> bool
val eq_compinfo : GoblintCil.compinfo -> GoblintCil.compinfo -> (GoblintCil.typ * GoblintCil.typ) list -> rename_mapping -> bool
val eq_fieldinfo : GoblintCil.fieldinfo -> GoblintCil.fieldinfo -> (GoblintCil.typ * GoblintCil.typ) list -> rename_mapping -> 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_block : (GoblintCil.block * GoblintCil.fundec) -> (GoblintCil.block * GoblintCil.fundec) -> rename_mapping -> bool
val eq_init : GoblintCil.init -> GoblintCil.init -> rename_mapping -> bool
val eq_initinfo : GoblintCil.initinfo -> GoblintCil.initinfo -> 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 -> 'b 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
val eqF : GoblintCil.Cil.fundec -> GoblintCil.Cil.fundec -> (MyCFG.cfg * (MyCFG.cfg * MyCFG.cfg)) option -> method_rename_assumptions -> change_status * nodes_diff option
val eq_glob : GoblintCil.global -> GoblintCil.global -> (MyCFG.cfg * (MyCFG.cfg * MyCFG.cfg)) option -> method_rename_assumptions -> change_status * nodes_diff option
val compareCilFiles : ?eq: (GoblintCil.global -> GoblintCil.global -> (MyCFG.cfg * (MyCFG.cfg * MyCFG.cfg)) option -> method_rename_assumptions -> change_status * nodes_diff option) -> GoblintCil.file -> GoblintCil.file -> change_info

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.

OCaml

Innovation. Community. Security.