The pointer assertion logic engine
Authors:
Open Access
- 1 May 2001
- journal article
- research article
- Published by Association for Computing Machinery (ACM) in ACM SIGPLAN Notices
- Vol. 36 (5) , 221-231
Abstract
We present a new framework for verifying partial specifications of programs in order to catch type and memory errors and check data structure invariants. Our technique can verify a large class of data structures, namely all those that can be expressed as graph types . Earlier versions were restricted to simple special cases such as lists or trees. Even so, our current implementation is as fast as the previous specialized tools. Programs are annotated with partial specifications expressed in Pointer Assertion Logic, a new notation for expressing properties of the program store. We work in the logical tradition by encoding the programs and partial specifications as formulas in monadic second-order logic. Validity of these formulas is checked by the MONA tool, which also can provide explicit counterexamples to invalid formulas. To make verification decidable, the technique requires explicit loop and function call invariants. In return, the technique is highly modular: every statement of a given program is analyzed only once. The main target applications are safety-critical data-type algorithms, where the cost of annotating a program with invariants is justified by the value of being able to automatically verify complex properties of the program.Keywords
This publication has 23 references indexed in Scilit:
- Putting static analysis to work for verification2000
- Finding bugs with a constraint solver2000
- Compile-Time Debugging of C Programs Working on Trees2000
- A domain-specific language for regular sets of strings and treesIEEE Transactions on Software Engineering, 1999
- Automatic verification of pointer programs using monadic second-order logic1997
- Static detection of dynamic memory errors1996
- Graph types1993
- Abstractions for recursive pointer data structures1992
- Ten Years of Hoare's Logic: A Survey—Part IACM Transactions on Programming Languages and Systems, 1981
- An axiomatic basis for computer programmingCommunications of the ACM, 1969