@@ -1511,7 +1511,8 @@ type stackvar_intro_t = {
15111511 svi_offset : int ;
15121512 svi_name : string ;
15131513 svi_vartype : btype_t option ;
1514- svi_cast : bool
1514+ svi_cast : bool ;
1515+ svi_loopcounter : bool
15151516 }
15161517
15171518type typing_rule_t = {
@@ -1531,7 +1532,8 @@ type function_annotation_t = {
15311532 regvarintros : regvar_intro_t list ;
15321533 stackvarintros : stackvar_intro_t list ;
15331534 typingrules : typing_rule_t list ;
1534- reachingdefspecs : reachingdef_spec_t list
1535+ reachingdefspecs : reachingdef_spec_t list ;
1536+ constglobalvars : string list
15351537 }
15361538
15371539class type function_data_int =
@@ -1592,6 +1594,7 @@ class type function_data_int =
15921594 method has_regvar_type_cast : doubleword_int -> bool
15931595 method has_stackvar_type_annotation : int -> bool
15941596 method has_stackvar_type_cast : int -> bool
1597+ method is_const_global_variable : string -> bool
15951598 method filter_deflocs : string -> variable_t -> symbol_t list -> symbol_t list
15961599 method is_typing_rule_enabled : ?rdef:string option -> string -> string -> bool
15971600 method has_class_info : bool
@@ -1858,11 +1861,13 @@ object ('a)
18581861 method get_fact: invariant_fact_t
18591862 method get_variables: variable_t list
18601863 method get_variable_equality_variables: variable_t list
1864+ method get_var_loopcounter_expr: variable_t -> xpr_t option
18611865 method is_constant: bool
18621866 method is_interval: bool
18631867 method is_base_offset_value: bool
18641868 method is_symbolic_expr: bool
18651869 method is_linear_equality: bool
1870+ method is_loopcounter_equality: bool
18661871 method is_variable_equality: bool
18671872 method is_smaller: 'a -> bool
18681873 method write_xml: xml_element_int -> unit
@@ -1893,7 +1898,7 @@ object
18931898 method get_known_initial_values : variable_t list
18941899 method get_init_disequalities : variable_t list (* initial values *)
18951900 method get_init_equalities : variable_t list (* initial values *)
1896- method rewrite_expr : xpr_t -> xpr_t
1901+ method rewrite_expr : ?loopcounter: bool -> xpr_t -> xpr_t
18971902
18981903 (* predicates *)
18991904 method is_unreachable : bool
@@ -1907,6 +1912,7 @@ object
19071912 variable_t -> ctxt_iaddress_t -> ctxt_iaddress_t -> bool
19081913 method var_has_initial_value : variable_t -> bool
19091914 method var_has_symbolic_expr : variable_t -> bool
1915+ method has_loop_counter_equality : bool
19101916
19111917 (* xml *)
19121918 method write_xml : xml_element_int -> unit
@@ -3780,6 +3786,10 @@ class type vardictionary_int =
37803786 method xd : xprdictionary_int
37813787 method faddr : doubleword_int
37823788 method reset : unit
3789+
3790+ method set_av_attributes : int -> string list -> unit
3791+ method get_av_attributes : int -> string list
3792+
37833793 method get_indexed_variables : (int * assembly_variable_denotation_t) list
37843794 method get_indexed_bases : (int * memory_base_t) list
37853795
@@ -3840,6 +3850,9 @@ object
38403850 (* * Returns the memory reference manager for this function.*)
38413851 method memrefmgr : memory_reference_manager_int
38423852
3853+ method set_av_attributes : int -> string list -> unit
3854+ method get_av_attributes : int -> string list
3855+
38433856 (* * {1 Creating variables}*)
38443857
38453858 (* * {2 Registers and flags}*)
@@ -4580,6 +4593,7 @@ end
45804593 sslot_btype : btype_t ;
45814594 sslot_size : int option ;
45824595 sslot_spill : register_t option ;
4596+ sslot_loopcounter : bool ;
45834597 sslot_desc : string option
45844598 }
45854599
@@ -4612,6 +4626,7 @@ class type stackslot_int =
46124626 method is_struct : bool
46134627 method is_array : bool
46144628 method is_spill : bool
4629+ method is_loopcounter : bool
46154630
46164631 method write_xml : xml_element_int -> unit
46174632 end
@@ -5018,6 +5033,15 @@ class type function_environment_int =
50185033 or if [var] is the initial value of a global variable. *)
50195034 method is_global_variable : variable_t -> bool
50205035
5036+ (* * [is_mutable_global_variable var] returns [true] if [var] is a global
5037+ variable, but not an initial memory value and not a const global variable
5038+ (as annotated in the function annotations).
5039+
5040+ Note: non-mutability is asserted only in the context of a given function
5041+ (as derived from the function annotations).
5042+ *)
5043+ method is_mutable_global_variable : variable_t -> bool
5044+
50215045 (* * Returns true if [var] is a global variable with a constant offset
50225046 (i.e., a numerical value). *)
50235047 method has_global_variable_address : variable_t -> bool
0 commit comments