Frama-C:
Plug-ins:
Libraries:

Frama-C API - P

include JOIN_SEMILATTICE
type t
val join : t -> t -> t

Must be idempotent (join a a = a), commutative, and associative.

val bottom : t

Must verify that forall a, join a bottom = a.

val is_included : t -> t -> bool

Must verify: a is_included b <=> a join b = b. The dataflow does not require this function.

val join_and_is_included : t -> t -> t * bool

This function is used by the dataflow algorithm to determine if something has to be recomputed. Joining and inclusion testing are similar operations, so it is often more efficient to do both at the same time (e.g. when joining with bottom).

Instead of defining it directly, it can be defined from join and equal, or from is_included, for instance by if is_included new old then (true,old) else (false, join old new) or let j = join old new in (equal j new, j).

val pretty : Stdlib.Format.formatter -> t -> unit

Display the contents of an element of the lattice.

val transfer_stmt : Cil_types.stmt -> t -> t

transfer_stmt s state must implement the transfer function for s.

val init : (Cil_types.stmt * t) list

The initial state after each statement. Statements in this list are given the associated value, and are added to the worklist. Other statements are initialized to bottom.

To get results for an entire function, this list should contain information for the following statements:

  • the final statement of the function (Kernel_function.find_return)
  • all the statements with no successors
  • at least one statement per non-terminating loop