Detection of Uncaught Exceptions in Functional Programs by Abstract Interpretation (Extended Version)
Détection par interprétation abstraite d'exceptions non rattrapées dans des programmes fonctionnels (Version étendue)
Résumé
Exception handling is a key feature in modern programming languages.
Exceptions can be used to deal with errors, or as a means to control
the flow of execution of a program. Since they might unexpectedly
terminate a program, unhandled exceptions are a serious safety
concern.
We propose a static analysis to detect uncaught exceptions in
functional programs, that is defined as an abstract interpreter. It
computes a description of the values potentially returned by a
program using a novel abstract domain, that can express inductively
defined sets of values. Simultaneously, the analysis infers the
possibly raised exceptions, by computing in the abstract exception monad.
This abstract interpreter has been implemented as an effective
static analyser for a large subset of OCaml programs, that
supports mutable data types, the OCaml module system, and
dynamically extensible data types such as the exception type. The
analyser has been evaluated on several hundreds of OCaml programs.
Les exceptions permettent de gérer les erreurs dans un programme,
et sont un moyen de modifier leur flot de contrôle. Puisque les
exceptions peuvent arrêter un programme de manière abrupte, les
exceptions non rattrapées constituent un problème de sûreté
important.
Nous décrivons une analyse statique qui détecte les exceptions non
rattrapées dans des programmes fonctionnels. Cette analyse est
définie comme un interpréteur abstrait. Elle calcule une
description des valeurs potentiellement produites par un programme
à l'aide d'un nouveau domaine abstrait, qui peut représenter des
ensembles de valeurs définis inductivement. Cette analyse infère
simultanément les exceptions qui peuvent être lancées, en
calculant dans la monade d'exception abstraite.
Nous avons implémenté cet interpréteur abstrait, qui effectue une
analyse statique pour un sous-ensemble important des programmes
OCaml. Sont en particulier supportés les types de données
algébriques mutables, le système de modules d'OCaml, et les types
de données extensibles dynamiquement tels, dont le type des
exceptions est un exemple. Nous avons évalué cet analyseur sur
plusieurs centaines de programmes OCaml.
Origine | Fichiers produits par l'(les) auteur(s) |
---|---|
Licence |