Salto: A Static Analyser for OCaml programs

This web-page embeds static Analyser for OCaml programs, as part of the Salto project, based on the techniques described in the ESOP 2024 article Detection of Uncaught Exceptions in Functional Programs by Abstract Interpretation.

Warning: the analysers can take a very long time to run in your browser! Do not be surprised if your browser warns you that some script is taking a lot of time.

The output text displays the analysis result for each declaration of the program. It is possible to record every program point by enabling the Cache non calls options.

Documentation

Options

The available analyses are:

Other analyses might be added in the future.

You are free to choose the abstract domain to represent sets of integers:

You are free to choose the following approximations for call sites:

The following options are available:

Syntax of outputs

The results are of the form { ints = Int chars = Char strings = String extension_constructors = ExtCons closures = Clos constructs = Constr structurs = Struct}, where:

The symbols ⊥ or ∅ always indicates the empty set. The symbol ⊤ indicates the full set.

The inferred abstract values may contain cycles, thus denoting inductively defined sets of values. For example, the abstract value v = { variants = { Nil: . Cons: { tuples = {2: { ints = ⊤ } × 'a } } } } as 'a denotes lists of integers, where Nil is the constructor for the empty list, and Cons is the constructor for creating a non-empty list. The abstract value v is such that v = { variants = { Nil: . Cons: { tuples = {2: { ints = ⊤ } × v } } } }. The syntax for cyclic abstract values follows the style that is used in OCaml to display equi-recursive types.


Authors: Benoît Montagu, Pierre Lermusiaux
Copyright © Inria 2020-2023
Powered by OCaml, Js_of_ocaml and the ACE code editor.