Form Methods Syst Des (2010) 37: 171–199
DOI 10.1007/s10703-010-0102-0
Doomed program points
Jochen Hoenicke · K. Rustan M. Leino ·
Andreas Podelski · Martin Schäf · Thomas Wies
Published online: 24 November 2010
© Springer Science+Business Media, LLC 2010
Abstract Any programming error that can be revealed before compiling a program saves
precious time for the programmer. While integrated development environments already do a
good job by detecting, e.g., data-flow abnormalities, current static analysis tools suffer from
false positives (“noise”) or require strong user interaction.
We propose to avoid this deficiency by defining a new class of errors. A program frag-
ment is doomed if its execution will inevitably fail, regardless of which state it is started in.
We use a formal verification method to identify such errors fully automatically and, most
significantly, without producing noise. We report on experiments with a prototype tool.
Keywords Reliability · Program falsification · Static checking
1 Introduction
Some errors in software are easy to detect. If an error is easy to detect it is cheap to fix. For
example, if the definite assignment analysis of a compiler detects that a program reads an
unassigned variable, the compiler will notify the programmer and the programmer will fix
it without further ado.
There are several kinds of errors that can be detected this way. They all have in common
that they are errors independent of the desired behavior of the program. Static analyses
that are built into the compiler are able to detect some of these errors. These are the most
pervasive of all static analyses. No programmer thinks about false alarms or Rice’s theorem
when the compiler rejects her program.
J. Hoenicke · A. Podelski · M. Schäf
University of Freiburg, Freiburg im Breisgau, Germany
K.R.M. Leino
Microsoft Research, Redmond, WA, USA
T. Wies ( )
Institute of Science and Technology, Klosterneuburg, Austria
e-mail: wies@ist.ac.at