Designing a verifying compiler: Lessons learned from developing Whiley

https://doi.org/10.1016/j.scico.2015.09.006Get rights and content
Under an Elsevier user license
open archive

Highlights

  • We reflect on our experiences verifying software with the Whiley verifying compiler.

  • We identify a number of patterns for resolving common verification problems.

  • We report on three case studies illustrating software verification with Whiley.

Abstract

An ongoing challenge for computer science is the development of a tool which automatically verifies programs meet their specifications, and are free from runtime errors such as divide-by-zero, array out-of-bounds and null dereferences. Several impressive systems have been developed to this end, such as ESC/Java and Spec#, which build on existing programming languages (e.g., Java, C#). We have been developing a programming language from scratch to simplify verification, called Whiley, and an accompanying verifying compiler. In this paper, we present a technical overview of the verifying compiler and document the numerous design decisions made. Indeed, many of our decisions reflect those of similar tools. However, they have often been ignored in the literature and/or spread thinly throughout. In doing this, we hope to provide a useful resource for those building verifying compilers.

Keywords

Program verification
Loop invariants
Hoare logic
Verification tools

Cited by (0)