CompareCILComparison of CIL files.
include module type of struct include CompareAST endinclude module type of struct include CompareCFG endinclude module type of struct include CompareAST endmodule StringMap = CompareCFG.StringMaptype method_rename_assumptions = GoblintCil.varinfo CilMaps.VarinfoMap.ttype glob_var_rename_assumptions = GoblintCil.varinfo CilMaps.VarinfoMap.ttype rename_mapping =
string StringMap.t
* method_rename_assumptions
* glob_var_rename_assumptions
* renamesOnSuccessval rename_mapping_aware_name_comparison :
string ->
string ->
rename_mapping ->
boolval create_locals_rename_mapping :
string list ->
string list ->
string StringMap.tval is_rename_mapping_empty : rename_mapping -> boolval (&&>>) :
(bool * rename_mapping) ->
(rename_mapping:rename_mapping -> bool * rename_mapping) ->
bool * rename_mappingval (&&>) : (bool * rename_mapping) -> bool -> bool * rename_mappingval forward_list_equal :
?propF:
((bool * rename_mapping) ->
(rename_mapping:rename_mapping -> bool * rename_mapping) ->
bool * rename_mapping) ->
('a -> 'b -> rename_mapping:rename_mapping -> bool * rename_mapping) ->
'a list ->
'b list ->
rename_mapping:rename_mapping ->
bool * rename_mappingval eq_constant :
rename_mapping:rename_mapping ->
acc:(GoblintCil.typ * GoblintCil.typ) list ->
GoblintCil.constant ->
GoblintCil.constant ->
bool * rename_mappingval eq_lhost :
GoblintCil.lhost ->
GoblintCil.lhost ->
rename_mapping:rename_mapping ->
acc:(GoblintCil.typ * GoblintCil.typ) list ->
bool * rename_mappingval eq_typ_acc :
?fun_parameter_name_comparison_enabled:bool ->
GoblintCil.typ ->
GoblintCil.typ ->
rename_mapping:rename_mapping ->
acc:(GoblintCil.typ * GoblintCil.typ) list ->
bool * rename_mappingval eq_eitems :
(string * GoblintCil.attributes * GoblintCil.exp * GoblintCil.location) ->
(string * GoblintCil.attributes * GoblintCil.exp * GoblintCil.location) ->
rename_mapping:rename_mapping ->
acc:(GoblintCil.typ * GoblintCil.typ) list ->
bool * rename_mappingval eq_enuminfo :
GoblintCil.enuminfo ->
GoblintCil.enuminfo ->
rename_mapping:rename_mapping ->
acc:(GoblintCil.typ * GoblintCil.typ) list ->
bool * rename_mappingval eq_args :
?fun_parameter_name_comparison_enabled:bool ->
(string * GoblintCil.typ * GoblintCil.attributes) ->
(string * GoblintCil.typ * GoblintCil.attributes) ->
rename_mapping:rename_mapping ->
acc:(GoblintCil.typ * GoblintCil.typ) list ->
bool * rename_mappingval eq_attrparam :
GoblintCil.attrparam ->
GoblintCil.attrparam ->
rename_mapping:rename_mapping ->
acc:(GoblintCil.typ * GoblintCil.typ) list ->
bool * rename_mappingval eq_attribute :
GoblintCil.attribute ->
GoblintCil.attribute ->
acc:(GoblintCil.typ * GoblintCil.typ) list ->
rename_mapping:rename_mapping ->
bool * rename_mappingval eq_compinfo :
GoblintCil.compinfo ->
GoblintCil.compinfo ->
(GoblintCil.typ * GoblintCil.typ) list ->
rename_mapping ->
bool * rename_mappingval eq_fieldinfo :
GoblintCil.fieldinfo ->
GoblintCil.fieldinfo ->
acc:(GoblintCil.typ * GoblintCil.typ) list ->
rename_mapping:rename_mapping ->
bool * rename_mappingval eq_typ :
?fun_parameter_name_comparison_enabled:bool ->
GoblintCil.typ ->
GoblintCil.typ ->
rename_mapping:rename_mapping ->
bool * rename_mappingval eq_exp :
GoblintCil.exp ->
GoblintCil.exp ->
rename_mapping:rename_mapping ->
bool * rename_mappingval eq_varinfo :
GoblintCil.varinfo ->
GoblintCil.varinfo ->
rename_mapping:rename_mapping ->
bool * rename_mappingval eq_lval :
GoblintCil.lval ->
GoblintCil.lval ->
rename_mapping:rename_mapping ->
bool * rename_mappingval eq_offset :
GoblintCil.offset ->
GoblintCil.offset ->
rename_mapping:rename_mapping ->
bool * rename_mappingval eq_instr :
GoblintCil.instr ->
GoblintCil.instr ->
rename_mapping:rename_mapping ->
bool * rename_mappingval eq_stmtkind :
?cfg_comp:bool ->
(GoblintCil.stmtkind * GoblintCil.fundec) ->
(GoblintCil.stmtkind * GoblintCil.fundec) ->
rename_mapping:rename_mapping ->
bool * rename_mappingval eq_stmt :
?cfg_comp:bool ->
(GoblintCil.stmt * GoblintCil.fundec) ->
(GoblintCil.stmt * GoblintCil.fundec) ->
rename_mapping:rename_mapping ->
bool * rename_mappingval eq_block :
(GoblintCil.block * GoblintCil.fundec) ->
(GoblintCil.block * GoblintCil.fundec) ->
rename_mapping:rename_mapping ->
bool * rename_mappingval eq_init :
GoblintCil.init ->
GoblintCil.init ->
rename_mapping:rename_mapping ->
bool * rename_mappingval eq_initinfo :
GoblintCil.initinfo ->
GoblintCil.initinfo ->
rename_mapping:rename_mapping ->
bool * rename_mappingval (&&<>) :
(bool * rename_mapping) ->
(rename_mapping:rename_mapping -> bool * rename_mapping) ->
bool * rename_mappingval eq_node :
(MyCFG.node * GoblintCil.fundec) ->
(MyCFG.node * GoblintCil.fundec) ->
rename_mapping:rename_mapping ->
bool * rename_mappingval eq_edge :
MyCFG.edge ->
MyCFG.edge ->
rename_mapping:rename_mapping ->
bool * rename_mappingval eq_edge_list :
MyCFG.edge list ->
MyCFG.edge list ->
rename_mapping:rename_mapping ->
bool * rename_mappingmodule NH = CompareCFG.NHtype biDirectionNodeMap = CompareCFG.biDirectionNodeMap = {node1to2 : MyCFG.node NH.t;node2to1 : MyCFG.node NH.t;}val compareCfgs :
(module MyCFG.CfgForward) ->
(module MyCFG.CfgForward) ->
GoblintCil.fundec ->
GoblintCil.fundec ->
rename_mapping ->
biDirectionNodeMap * unit NH.t * rename_mappingval reexamine :
'a ->
CilType.Fundec.t ->
biDirectionNodeMap ->
unit NH.t ->
(module MyCFG.CfgForward) ->
(module MyCFG.CfgBidir) ->
(NH.key * MyCFG.node) Stdlib.Seq.t * NH.key Stdlib.Seq.tval compareFun :
(module MyCFG.CfgForward) ->
(module MyCFG.CfgBidir) ->
GoblintCil.fundec ->
GoblintCil.fundec ->
rename_mapping ->
(MyCFG.node * MyCFG.node) list * MyCFG.node list * rename_mappinginclude module type of struct include CilMaps endmodule FundecForMap = CilMaps.FundecForMapmodule FundecMap = CilMaps.FundecMapmodule VarinfoOrdered = CilMaps.VarinfoOrderedmodule VarinfoMap = CilMaps.VarinfoMapmodule GlobalMap : sig ... endval name_of_global_col : global_col -> stringval compare_global_col : global_col -> global_col -> intval equal_name_global_col : global_col -> global_col -> boolval get_varinfo : global_col -> GoblintCil.varinfomodule GlobalColMap : sig ... endtype nodes_diff = {unchangedNodes : (MyCFG.node * MyCFG.node) list;primObsoleteNodes : MyCFG.node list;primary obsolete nodes -> all obsolete nodes are reachable from these
*)}For semantically unchanged globals, still keep old and current version of global for resetting current to old.
type changed_global = {old : global_col;current : global_col;unchangedHeader : bool;diff : nodes_diff option;}module VarinfoSet : sig ... endtype change_info = {mutable changed : changed_global list;mutable unchanged : unchanged_global list;mutable removed : global_col list;mutable added : global_col list;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_infoval unchanged_to_change_status : bool -> change_statusGiven a boolean that indicates whether the code object is identical to the previous version, returns the corresponding change_status
val empty_rename_mapping : rename_mappingval performRenames : renamesOnSuccess -> unitval preservesSameNameMatches :
GlobalMap.key ->
'a GlobalMap.t ->
GlobalMap.key ->
'b GlobalMap.t ->
boolval addToFinalMatchesMapping :
VarinfoMap.key ->
VarinfoMap.key ->
(VarinfoMap.key VarinfoMap.t * VarinfoMap.key VarinfoMap.t) ->
VarinfoMap.key VarinfoMap.t * VarinfoMap.key VarinfoMap.tval empty_rename_assms : GoblintCil.varinfo VarinfoMap.t -> boolval already_matched :
VarinfoMap.key ->
GoblintCil.varinfo ->
(GoblintCil.varinfo VarinfoMap.t * 'a) ->
boolval change_info_lookup : global_col -> global_col -> change_info -> boolval eq_glob_var :
?finalizeOnlyExactMatch:bool ->
VarinfoMap.key ->
global_col ->
'a GlobalMap.t ->
GoblintCil.varinfo ->
global_col ->
'b GlobalMap.t ->
change_info ->
(VarinfoMap.key VarinfoMap.t * VarinfoMap.key VarinfoMap.t) ->
bool
* change_info
* (VarinfoMap.key VarinfoMap.t * VarinfoMap.key VarinfoMap.t)val compare_varinfo_exact :
VarinfoMap.key ->
global_col ->
global_col GlobalMap.t ->
GoblintCil.varinfo ->
global_col ->
global_col GlobalMap.t ->
change_info ->
(VarinfoMap.key VarinfoMap.t * VarinfoMap.key VarinfoMap.t) ->
bool
* change_info
* (VarinfoMap.key VarinfoMap.t * VarinfoMap.key VarinfoMap.t)val eqF :
GoblintCil.Cil.fundec ->
GoblintCil.Cil.fundec ->
(MyCFG.cfg * (MyCFG.cfg * MyCFG.cfg)) option ->
method_rename_assumptions ->
glob_var_rename_assumptions ->
change_status
* nodes_diff option
* method_rename_assumptions
* glob_var_rename_assumptions
* renamesOnSuccessval eqF_only_consider_exact_match :
global_col ->
global_col ->
change_info ->
(VarinfoMap.key VarinfoMap.t * VarinfoMap.key VarinfoMap.t) ->
global_col GlobalMap.t ->
global_col GlobalMap.t ->
bool
* change_info
* (VarinfoMap.key VarinfoMap.t * VarinfoMap.key VarinfoMap.t)val eqF_check_contained_renames :
renameDetection:bool ->
GoblintCil.Cil.fundec ->
GoblintCil.Cil.fundec ->
global_col GlobalMap.t ->
global_col GlobalMap.t ->
(MyCFG.cfg * (MyCFG.cfg * MyCFG.cfg)) option ->
global_col ->
global_col ->
(change_info * (VarinfoMap.key VarinfoMap.t * VarinfoMap.key VarinfoMap.t)) ->
change_info * (VarinfoMap.key VarinfoMap.t * VarinfoMap.key VarinfoMap.t)val eq_glob :
?matchVars:bool ->
?matchFuns:bool ->
?renameDetection:bool ->
global_col GlobalMap.t ->
global_col GlobalMap.t ->
(MyCFG.cfg * (MyCFG.cfg * MyCFG.cfg)) option ->
global_col ->
global_col ->
(change_info * (VarinfoMap.key VarinfoMap.t * VarinfoMap.key VarinfoMap.t)) ->
change_info * (VarinfoMap.key VarinfoMap.t * VarinfoMap.key VarinfoMap.t)val addNewGlobals :
'a ->
global_col ->
(change_info * ('b * 'c VarinfoMap.t)) ->
change_info * ('b * 'c VarinfoMap.t)val addOldGlobals :
'a ->
global_col ->
(change_info * ('b VarinfoMap.t * 'c)) ->
change_info * ('b VarinfoMap.t * 'c)val compareCilFiles :
?eq:
(?matchVars:bool ->
?matchFuns:bool ->
?renameDetection:bool ->
global_col GlobalMap.t ->
global_col GlobalMap.t ->
(MyCFG.cfg * (MyCFG.cfg * MyCFG.cfg)) option ->
global_col ->
global_col ->
(change_info
* (VarinfoMap.key VarinfoMap.t * VarinfoMap.key VarinfoMap.t)) ->
change_info * (VarinfoMap.key VarinfoMap.t * VarinfoMap.key VarinfoMap.t)) ->
GoblintCil.file ->
GoblintCil.file ->
change_infoGiven 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.