module Cabs2cil:Registers a new hook that will be applied each time a side-effect free expression whose result is unused is dropped.sig
..end
val register_ignore_pure_exp_hook : (string -> Cil_types.location -> Cil_types.exp -> unit) -> unit
val convFile : Cabs.file -> Cil_types.file
val forceRLArgEval : bool Pervasives.ref
val nocil : int Pervasives.ref
val allowDuplication : bool Pervasives.ref
val typeForInsertedVar : (Cil_types.typ -> Cil_types.typ) Pervasives.ref
val typeForInsertedCast : (Cil_types.exp -> Cil_types.typ -> Cil_types.typ -> Cil_types.typ)
Pervasives.ref
typeForInsertedVar
, but for casts.
typeForInsertedCast expr original_type destination_type
returns the type into which expr
, which has type original_type
and
whose type must be converted into destination_type
, must be casted.
By default, returns destination_type
.
This applies only to implicit casts. Casts already present
in the source code are exempt from this hook.
val fresh_global : string -> string
fresh_global prefix
creates a variable name not clashing with any other
globals and starting with prefix
val prefix : string -> string -> bool
s
starts with the prefix p
.val annonCompFieldName : string
val logicConditionalConversion : Cil_types.typ -> Cil_types.typ -> Cil_types.typ
val arithmeticConversion : Cil_types.typ -> Cil_types.typ -> Cil_types.typ
val integralPromotion : Cil_types.typ -> Cil_types.typ
type
local_env = private {
|
authorized_reads : |
(* | sets of lvalues that can be read regardless of a potential write access between sequence points. Mainly for tmp variables introduced by the normalization. | *) |
|
known_behaviors : |
(* | list of known behaviors at current point. | *) |
|
is_ghost : |
(* | whether we're analyzing ghost code or not | *) |
val empty_local_env : local_env
val ghost_local_env : bool -> local_env
empty_local_env
, but sets the ghost status to the value of its
argumentval blockInitializer : local_env ->
Cil_types.varinfo ->
Cabs.init_expression -> Cil_types.block * Cil_types.init * Cil_types.typ
val blockInit : Cil_types.lval -> Cil_types.init -> Cil_types.typ -> Cil_types.block
init
applied to lvalue lval
of type typ
.val mkAddrOfAndMark : Cil_types.lval -> Cil_types.exp
mkAddrOf
after marking variable whose address is taken.val setDoTransformWhile : unit -> unit
continue
in while loops get transformed
into forward gotos, like it is already done in do-while and for loops.val setDoAlternateConditional : unit -> unit