IntDomTuple.IntDomTupleImplinclude module type of struct include Printable.Std endmodule I1 : sig ... endmodule I2 = IntervalDomain.Intervalmodule I3 : sig ... endmodule I4 : sig ... endmodule I5 : sig ... endmodule I6 : sig ... endval hash : t -> intval no_interval :
(DefExcDomain.DefExc.t option
* (IntOps.BigIntOps.t * IntOps.BigIntOps.t) option option
* EnumsDomain.Enums.t option
* CongruenceDomain.Congruence.t option
* (IntOps.BigIntOps.t * IntOps.BigIntOps.t) list option
* (IntOps.BigIntOps.t * IntOps.BigIntOps.t) option) ->
DefExcDomain.DefExc.t option
* 'a option
* EnumsDomain.Enums.t option
* CongruenceDomain.Congruence.t option
* (IntOps.BigIntOps.t * IntOps.BigIntOps.t) list option
* (IntOps.BigIntOps.t * IntOps.BigIntOps.t) optionval no_intervalSet :
(DefExcDomain.DefExc.t option
* (IntOps.BigIntOps.t * IntOps.BigIntOps.t) option option
* EnumsDomain.Enums.t option
* CongruenceDomain.Congruence.t option
* (IntOps.BigIntOps.t * IntOps.BigIntOps.t) list option
* (IntOps.BigIntOps.t * IntOps.BigIntOps.t) option) ->
DefExcDomain.DefExc.t option
* (IntOps.BigIntOps.t * IntOps.BigIntOps.t) option option
* EnumsDomain.Enums.t option
* CongruenceDomain.Congruence.t option
* 'a option
* (IntOps.BigIntOps.t * IntOps.BigIntOps.t) optionval no_bitfield :
(DefExcDomain.DefExc.t option
* (IntOps.BigIntOps.t * IntOps.BigIntOps.t) option option
* EnumsDomain.Enums.t option
* CongruenceDomain.Congruence.t option
* (IntOps.BigIntOps.t * IntOps.BigIntOps.t) list option
* (IntOps.BigIntOps.t * IntOps.BigIntOps.t) option) ->
DefExcDomain.DefExc.t option
* (IntOps.BigIntOps.t * IntOps.BigIntOps.t) option option
* EnumsDomain.Enums.t option
* CongruenceDomain.Congruence.t option
* (IntOps.BigIntOps.t * IntOps.BigIntOps.t) list option
* 'a optiontype 'a m = (module IntDomain0.SOverflow with type t = 'a)type 'a m2 =
(module IntDomain0.SOverflow
with type int_t = int_t
and type t = 'a)val no_overflow : 'a -> ('b * IntDomain0.overflow_info) option -> boolval check_ov :
?suppress_ovwarn:bool ->
cast:bool ->
GoblintCil.Cil.ikind ->
(I2.t * IntDomain0.overflow_info) option ->
(I5.t * IntDomain0.overflow_info) option ->
(I6.t * IntDomain0.overflow_info) option ->
boolval project :
GoblintCil.Cil.ikind ->
PrecisionUtil.int_precision ->
(I1.t option
* I2.t option
* I3.t option
* I4.t option
* I5.t option
* I6.t option) ->
I1.t option
* I2.t option
* I3.t option
* I4.t option
* I5.t option
* I6.t optionProject tuple t to precision p * We have to deactivate IntDomains after the refinement, since we might * lose information if we do it before. E.g. only "Interval" is active * and shall be projected to only "Def_Exc". By seting "Interval" to None * before refinement we have no information for "Def_Exc". * * Thus we have 3 Steps: * 1. Add padding to t by setting `None` to `I.top_of ik` if p is true for this element * 2. Refine the padded t * 3. Set elements of t to `None` if p is false for this element * * Side Note: * ~keep is used to reuse `map/opt_map` for Step 1 and 3. * ~keep:true will keep elements that are `Some x` but should be set to `None` by p. * This way we won't loose any information for the refinement. * ~keep:false will set the elements to `None` as defined by p