package frama-c
Install
Dune Dependency
Authors
-
MMichele Alberti
-
TThibaud Antignac
-
GGergö Barany
-
PPatrick Baudin
-
NNicolas Bellec
-
TThibaut Benjamin
-
AAllan Blanchard
-
LLionel Blatter
-
FFrançois Bobot
-
RRichard Bonichon
-
VVincent Botbol
-
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
-
RRemi Lazarini
-
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
-
PPierre Nigron
-
AAnne Pacalet
-
VValentin Perrelle
-
GGuillaume Petiot
-
DDario Pinto
-
VVirgile Prevosto
-
AArmand Puccetti
-
FFélix Ridoux
-
VVirgile Robles
-
JJan Rochel
-
MMuriel Roger
-
JJulien Signoles
-
NNicolas Stouls
-
KKostyantyn Vorobyov
-
BBoris Yakobowski
Maintainers
Sources
sha256=d2fbb3b8d0ff83945872e9e6fa258e934a706360e698dae3b4d5f971addf7493
doc/frama-c-wp.core/Wp/LogicSemantics/Make/index.html
Module LogicSemantics.Make
Source
Parameters
module M : Sigs.Model
Signature
Frames
Frames are compilation environment for ACSL. A frame typically manages the current function, formal paramters, the memory environments at different labels and the \result
and \exit_status
values.
The frame also holds the gamma environment responsible for accumulating typing constraints, and the pool for generating fresh logic variables.
Notice that a frame
is not responsible for holding the environment at label Here
, since this is managed by a specific compilation environment, see env
below.
Execute the given closure with the specified current frame. The Lang.gamma
and Lang.pool
contexts are also set accordingly.
Get the memory environment at the given label. A fresh environment is created lazily if required. The label must not be Here
.
Update a frame with a specific environment for the given label.
Chek if a frame already has a specific envioronement for the given label.
Same as mem_at_frame
but for the current frame.
val mk_frame :
?kf:Frama_c_kernel.Cil_types.kernel_function ->
?result:result ->
?status:Lang.F.var ->
?formals:value Frama_c_kernel.Cil_datatype.Varinfo.Map.t ->
?labels:sigma Clabels.LabelMap.t ->
?descr:string ->
unit ->
frame
Full featured constructor for frames, with fresh pool and gamma.
Make a fresh frame with the given function.
Internal call data.
Create call data from the callee point of view, deriving data (gamma and pools) from the current frame. If result
is specified, the called function will stored its result at the provided location in the current frame (the callee).
Derive a frame from the call data suitable for compiling the called function contracts in the provided pre-state.
Derive a frame from the call data suitable for compiling the called function contracts in the provided pre-state and post-state.
Result type of the current function in the current frame.
Exit status for the current frame.
Returns the current gamma environment from the current frame.
Compilation Environment
Compilation environment for terms and predicates. Manages the current memory state and the memory state at Here
.
Remark: don't confuse the current memory state with the memory state at label Here
. The current memory state is the one we have at hand when compiling a term or a predicate. Hence, inside \at(e,L)
the current memory state when compiling e
is the one at L
.
Create a new environment.
Current and Here
memory points are initialized to ~here
, if provided.
The logic variables stand for formal parameters of ACSL logic function and ACSL predicates.
The current memory state. Must be propertly initialized with a specific move
before.
Move the compilation environment to the specified Here
memory state. This memory state becomes also the new current one.
Returns the memory state at the requested label. Uses the local environment for Here
and the current frame otherwize.
Returns a new environment where the current memory state is moved to to the corresponding label. Suitable for compiling e
inside \at(e,L)
ACSL construct.
Compilers
Compile a term l-value into a (typed) abstract location
Compile a term expression.
Compile a predicate. The polarity is used to generate a weaker or stronger predicate in case of unsupported feature from WP or the underlying memory model.
val call_pred :
env ->
Frama_c_kernel.Cil_types.logic_info ->
Frama_c_kernel.Cil_types.logic_label list ->
Lang.F.term list ->
Lang.F.pred
Compile a predicate call.
Compile a term representing a set of memory locations into an abstract region.
Computes the region assigned by a list of froms.
Computes the region assigned by a list of froms.
Computes the region assigned by an assigns clause. None
means everyhting is assigned.
Same as term
above but reject any set of locations.
Same as term
above but expects a single loc or a single pointer value.
Compile a lemma definition.
Regions
Qed variables appearing in a region expression.
Member of vars.
Check assigns inclusion. Compute a formula that checks whether written locations are either invalid (at the given memory location) or included in some assignable region. When ~unfold:n && n <> 0
, compound memory locations are expanded field-by-field and arrays, cell-by-cell (by quantification). Up to n
levels are unfolded, -1 means unlimited.