Séminaire de Cryptographie

Accueil     Présentation     Archives

Xavier Leroy


Vérification formelle de compilateurs

Tous les programmeurs s'attendent à ce que les compilateurs et autres outils de génération de code produisent du code exécutable qui se comporte exactement comme prescrit par le programme source. Ce n'est malheureusement pas toujours le cas : des bugs dans le compilateur peuvent conduire à la production de code machine incorrect à partir d'un source correct. Ce cas de figure est particulièrement préoccupant dans le cas de code critique qui a été vérifié (au niveau source) à l'aide de méthodes formelles (analyse statique, model checking, preuve de programme) : tout bug dans le compilateur peut potentiellement invalider les garanties obtenues à grand-peine grâce aux méthodes formelles.

Après une introduction aux méthodes formelles et aux différentes manières de renforcer la confiance que l'on peut avoir dans un compilateur, l'exposé détaillera l'une de ces manières : la preuve de programme appliquée directement au compilateur lui-même, avec pour but de prouver que le comportement du programme source est préservé par toutes les passes du compilateur. Je présenterai les premiers résultats du projet Compcert : une expérience de développement et de preuve de correction, utilisant l'assistant de preuves Coq, d'un compilateur modérément optimisant pour un sous-ensemble du langage C. Ces premiers résultats sont encourageants et suggèrent, à plus long terme, que la vérification formelle d'outils intervenant dans la production et la certification de codes critiques est faisable.