Module IR.Sil
Programs and Types
type if_kind
=
|
Ik_bexp
boolean expressions, and exp ? exp : exp
|
Ik_dowhile
|
Ik_for
|
Ik_if
|
Ik_land_lor
obtained from translation of && or ||
|
Ik_while
|
Ik_switch
Kind of prune instruction
type instr_metadata
=
|
Abstract of IBase.Location.t
a good place to apply abstraction, mostly used in the biabduction analysis
|
ExitScope of Var.t list * IBase.Location.t
remove temporaries and dead program variables
|
Nullify of Pvar.t * IBase.Location.t
nullify stack variable
|
Skip
no-op
|
VariableLifetimeBegins of Pvar.t * Typ.t * IBase.Location.t
stack variable declared
val compare_instr_metadata : instr_metadata -> instr_metadata -> int
type instr
=
|
Load of
{
id : Ident.t;
e : Exp.t;
root_typ : Typ.t;
typ : Typ.t;
loc : IBase.Location.t;
}
Load a value from the heap into an identifier.
id = *exp:typ(root_typ)
whereexp
is an expression denoting a heap addresstyp
is typ ofexp
andid
root_typ
is the root type ofexp
The
root_typ
is deprecated: it is broken in C/C++. We are removingroot_typ
in the future, so please usetyp
instead.|
Store of
{
e1 : Exp.t;
root_typ : Typ.t;
typ : Typ.t;
e2 : Exp.t;
loc : IBase.Location.t;
}
Store the value of an expression into the heap.
*exp1:typ(root_typ) = exp2
whereexp1
is an expression denoting a heap addresstyp
is typ of*exp1
andexp2
root_typ
is the root type ofexp1
exp2
is the expression whose value is stored.
The
root_typ
is deprecated: it is broken in C/C++. We are removingroot_typ
in the future, so please usetyp
instead.|
Prune of Exp.t * IBase.Location.t * bool * if_kind
prune the state based on
exp=1
, the boolean indicates whether true branch|
Call of Ident.t * Typ.t * Exp.t * (Exp.t * Typ.t) list * IBase.Location.t * CallFlags.t
Call ((ret_id, ret_typ), e_fun, arg_ts, loc, call_flags)
represents an instructionret_id = e_fun(arg_ts);
|
Metadata of instr_metadata
hints about the program that are not strictly needed to understand its semantics, for instance information about its original syntactic structure
An instruction.
val equal_instr : instr -> instr -> bool
val skip_instr : instr
val instr_is_auxiliary : instr -> bool
Check if an instruction is auxiliary, or if it comes from source instructions.
val location_of_instr : instr -> IBase.Location.t
Get the location of the instruction
val if_kind_to_string : if_kind -> string
Pretty print an if_kind
val pp_instr_metadata : IStdlib.Pp.env -> F.formatter -> instr_metadata -> unit
val pp_instr : print_types:bool -> IStdlib.Pp.env -> F.formatter -> instr -> unit
Pretty print an instruction.
val d_instr : instr -> unit
Dump an instruction.