Module Cabs2cil


module Cabs2cil: sig .. end
Registers a new hook that will be applied each time a side-effect free expression whose result is unused is dropped. The string is the name of the current function.

val register_ignore_pure_exp_hook : (string -> Cil_types.exp -> unit) -> unit
val register_implicit_prototype_hook : (Cil_types.varinfo -> unit) -> unit
new hook called when an implicit prototype is generated.
Since Carbon-20101201
val register_incompatible_decl_hook : (Cil_types.varinfo -> Cil_types.varinfo -> string -> unit) -> unit
new hook called when two conflicting declarations are found. The hook takes as argument the old and new varinfo, and a description of the issue.
Since Carbon-20101201
val register_different_decl_hook : (Cil_types.varinfo -> Cil_types.varinfo -> unit) -> unit
new hook called when a definition has a compatible but not strictly identical prototype than its declaration The hook takes as argument the old and new varinfo. Note that only the old varinfo is kept in the AST, and that its type will be modified in place just after to reflect the merge of the prototypes.
Since Carbon-20101201
val register_local_func_hook : (Cil_types.varinfo -> unit) -> unit
new hook called when encountering a definition of a local function. The hook take as argument the varinfo of the local function.
Since Carbon-20101201
val register_ignore_side_effect_hook : (Cabs.expression -> Cil_types.exp -> unit) -> unit
new hook called when side-effects are dropped. The first argument is the original expression, the second one the (side-effect free) normalized expression.
val register_conditional_side_effect_hook : (Cabs.expression -> Cabs.expression -> unit) -> unit
new hook called when an expression with side-effect is evaluated conditionally (RHS of && or ||, 2nd and 3rd term of ?:). Note that in case of nested conditionals, only the innermost expression with side-effects will trigger the hook (for instance, in (x && (y||z++)), we have a warning on z++, not on y||z++, and similarly, on (x && (y++||z)), we only have a warning on y++).
val convFile : Cabs.file -> Cil_types.file
val nocil : int Pervasives.ref
Set this integer to the index of the global to be left in CABS form. Use -1 to disable
val forceRLArgEval : bool Pervasives.ref
Turn on tranformation that forces right to left parameter evaluation order
val allowDuplication : bool Pervasives.ref
Indicates whether we're allowed to duplicate small chunks of code.
val doCollapseCallCast : bool Pervasives.ref
Allows to have implicit cast between value returned by a function and the lval it is assigned to.
val typeForInsertedVar : (Cil_types.typ -> Cil_types.typ) Pervasives.ref
A hook into the code that creates temporary local vars. By default this is the identity function, but you can overwrite it if you need to change the types of cabs2cil-introduced temp variables.
val typeForInsertedCast : (Cil_types.exp -> Cil_types.typ -> Cil_types.typ -> Cil_types.typ)
Pervasives.ref
Like 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

CEA-LRI: exports for logic typing
val prefix : string -> string -> bool
Check that s starts with the prefix p.
val annonCompFieldName : string
val find_field_offset : (Cil_types.fieldinfo -> bool) -> Cil_types.fieldinfo list -> Cil_types.offset
returns the offset (can be more than one field in case of unnamed members) corresponding to the first field matching the condition.
Raises Not_found if no such field exists.
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 : Cil_datatype.Lval.Set.t; (*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 : string list; (*list of known behaviors at current point.*)
   is_ghost : bool; (*whether we're analyzing ghost code or not*)
}
local information needed to typecheck expressions and statements
val empty_local_env : local_env
an empty local environment.
val ghost_local_env : bool -> local_env
same as empty_local_env, but sets the ghost status to the value of its argument
val 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
Returns a block of statements equivalent to the initialization init applied to lvalue lval of type typ.
val mkAddrOfAndMark : Cil_types.location -> Cil_types.lval -> Cil_types.exp
Applies mkAddrOf after marking variable whose address is taken.
val setDoTransformWhile : unit -> unit
If called, sets a flag so that continue in while loops get transformed into forward gotos, like it is already done in do-while and for loops.
val setDoAlternateConditional : unit -> unit
If called, sets a flag so that translation of conditionals does not result in forward ingoing gotos (from the if-branch to the else-branch).