package frama-c
Install
dune-project
Dependency
Authors
-
MMichele Alberti
-
TThibaud Antignac
-
GGergö Barany
-
PPatrick Baudin
-
TThibaut Benjamin
-
AAllan Blanchard
-
LLionel Blatter
-
FFrançois Bobot
-
RRichard Bonichon
-
QQuentin Bouillaguet
-
DDavid Bühler
-
ZZakaria Chihani
-
LLoïc Correnson
-
JJulien Crétin
-
PPascal Cuoq
-
ZZaynah Dargaye
-
BBasile Desloges
-
JJean-Christophe Filliâtre
-
PPhilippe Herrmann
-
MMaxime Jacquemin
-
FFlorent Kirchner
-
AAlexander Kogtenkov
-
TTristan Le Gall
-
JJean-Christophe Léchenet
-
MMatthieu Lemerre
-
DDara Ly
-
DDavid Maison
-
CClaude Marché
-
AAndré Maroneze
-
TThibault Martin
-
FFonenantsoa Maurica
-
MMelody Méaulle
-
BBenjamin Monate
-
YYannick Moy
-
AAnne Pacalet
-
VValentin Perrelle
-
GGuillaume Petiot
-
DDario Pinto
-
VVirgile Prevosto
-
AArmand Puccetti
-
FFélix Ridoux
-
VVirgile Robles
-
MMuriel Roger
-
JJulien Signoles
-
NNicolas Stouls
-
KKostyantyn Vorobyov
-
BBoris Yakobowski
Maintainers
Sources
sha256=25885f89daa478aeafdd1e4205452c7a30695d4b3b3ee8fc98b4a9c5f83f79c2
doc/frama-c.kernel/Frama_c_kernel/Alarms/index.html
Module Frama_c_kernel.Alarms
Alarms Database.
Only signed overflows and pointer downcasts are really RTEs. The other kinds may be meaningful nevertheless.
type alarm = | Division_by_zero of Cil_types.exp| Memory_access of Cil_types.lval * access_kind| Index_out_of_bound of Cil_types.exp * Cil_types.exp option(*Index_out_of_bound(index, opt)opt = None-> lower bound is zero; Some up = upper bound
| Invalid_pointer of Cil_types.exp| Invalid_shift of Cil_types.exp * int option(*strict upper bound, if any
*)| Pointer_comparison of Cil_types.exp option * Cil_types.exp(*First parameter is
*)Nonewhen implicit comparison to NULL pointer| Differing_blocks of Cil_types.exp * Cil_types.exp(*The two expressions (which evaluate to pointers) must point to the same allocated block
*)| Overflow of overflow_kind * Cil_types.exp * Integer.t * bound_kind(*Integer parameters is the bound
*)| Float_to_int of Cil_types.exp * Integer.t * bound_kind(*Integer parameter is the bound for the integer type. The actual alarm is
*)exp < bound+1orbound-1 < exp.| Not_separated of Cil_types.lval * Cil_types.lval(*the two lvalues must be separated
*)| Overlap of Cil_types.lval * Cil_types.lval(*overlapping read/write: the two lvalues must be separated or equal
*)| Uninitialized of Cil_types.lval| Dangling of Cil_types.lval| Is_nan_or_infinite of Cil_types.exp * Cil_types.fkind| Is_nan of Cil_types.exp * Cil_types.fkind| Function_pointer of Cil_types.exp * Cil_types.exp list option(*the type of the pointer is compatible with the type of the pointed function (first argument). The second argument is the list of the arguments of the call.
*)| Invalid_bool of Cil_types.lval(*Trap representation of a _Bool variable.
*)
include Datatype.S_with_collections with type t = alarm
include Datatype.S with type t = alarm
include Datatype.S_no_copy with type t = alarm
val packed_descr : Structural_descr.packPacked version of the descriptor.
val reprs : t listList of representants of the descriptor.
val hash : t -> intHash function: same spec than Hashtbl.hash.
val pretty : Format.formatter -> t -> unitPretty print each value in an user-friendly way.
val mem_project : (Project_skeleton.t -> bool) -> t -> boolmem_project f x must return true iff there is a value p of type Project.t in x such that f p returns true.
module Set : Datatype.Set with type elt = tmodule Map : Datatype.Map with type key = tmodule Hashtbl : Datatype.Hashtbl with type key = tval self : State.tval register :
Emitter.t ->
?kf:Cil_types.kernel_function ->
Cil_types.kinstr ->
?loc:Cil_types.location ->
?status:Property_status.emitted_status ->
alarm ->
Cil_types.code_annotation * boolRegister the given alarm on the given statement. By default, no status is emitted. kf must be given only if the kinstr is a statement, and must be the function enclosing this statement.
val to_annot :
Cil_types.kinstr ->
?loc:Cil_types.location ->
alarm ->
Cil_types.code_annotation * boolConversion of an alarm to a code_annotation, without any registration. The returned boolean indicates that the alarm has not been registered in the kernel yet.
val iter :
(Emitter.t ->
Cil_types.kernel_function ->
Cil_types.stmt ->
rank:int ->
alarm ->
Cil_types.code_annotation ->
unit) ->
unitIterator over all alarms and the associated annotations at some program point.
val fold :
(Emitter.t ->
Cil_types.kernel_function ->
Cil_types.stmt ->
rank:int ->
alarm ->
Cil_types.code_annotation ->
'a ->
'a) ->
'a ->
'aFolder over all alarms and the associated annotations at some program point.
val to_seq :
unit ->
(Emitter.t
* Cil_types.kernel_function
* Cil_types.stmt
* int
* alarm
* Cil_types.code_annotation)
Seq.tReturns the sequence of all alarms and the associated annotations at some program point
val find : Cil_types.code_annotation -> alarm optionval remove :
?filter:(alarm -> bool) ->
?kinstr:Cil_types.kinstr ->
Emitter.t ->
unitRemove the alarms and the associated annotations emitted by the given emitter. If kinstr is specified, remove only the ones associated with this kinstr. If filter is specified, remove only the alarms a such that filter a is true.
val create_predicate : ?loc:Cil_types.location -> t -> Cil_types.predicateGenerate the predicate corresponding to a given alarm.
val get_name : t -> stringShort name of the alarm, used to prefix the assertion in the AST.
val get_short_name : t -> stringEven shorter name. Similar alarms (e.g. signed overflow vs. unsigned overflow) are aggregated.
val get_description : t -> stringLong description of the alarm, explaining the UB it guards against.