sig
val is_bitfield : Cil_types.typ -> bool
val sizeof_lval_typ : Cil_types.typ -> Int_Base.t
val offsetmap_matches_type : Cil_types.typ -> Cvalue.V_Offsetmap.t -> bool
val need_cast : Cil_types.typ -> Cil_types.typ -> bool
val compatible_functions :
Cil_types.typ ->
?args:Cil_types.exp list ->
Kernel_function.t list -> Kernel_function.t list * bool
val expr_contains_volatile : Cil_types.exp -> bool
val lval_contains_volatile : Cil_types.lval -> bool
val kf_assigns_only_result_or_volatile : Cil_types.kernel_function -> bool
type integer_range = { i_bits : int; i_signed : bool; }
module DatatypeIntegerRange :
sig
type t = integer_range
val ty : t Type.t
val name : string
val descr : t Descr.t
val packed_descr : Structural_descr.pack
val reprs : t list
val equal : t -> t -> bool
val compare : t -> t -> int
val hash : t -> int
val pretty_code : Format.formatter -> t -> unit
val internal_pretty_code :
Type.precedence -> Format.formatter -> t -> unit
val pretty : Format.formatter -> t -> unit
val varname : t -> string
val mem_project : (Project_skeleton.t -> bool) -> t -> bool
val copy : t -> t
end
val ik_range : Cil_types.ikind -> Eval_typ.integer_range
val ik_attrs_range :
Cil_types.ikind -> Cil_types.attributes -> Eval_typ.integer_range
val range_inclusion :
Eval_typ.integer_range -> Eval_typ.integer_range -> bool
val range_lower_bound : Eval_typ.integer_range -> Integer.t
val range_upper_bound : Eval_typ.integer_range -> Integer.t
type scalar_typ =
TSInt of Eval_typ.integer_range
| TSPtr of Eval_typ.integer_range
| TSFloat of Cil_types.fkind
| TSNotScalar
val classify_as_scalar : Cil_types.typ -> Eval_typ.scalar_typ
end