SAIL: Static Analysis Intermediate Language with a Two-Level Representation

In this paper, we present Sail (Static Analysis Intermediate Language), a front-end which provides both a highand a low-level representation of programs and maintains a precise mapping from the low-level instructions to the high-level expressions and statements in the original source code. This two-level representation makes it easy to perform semantic analysis of programs on the low-level representation while having the ability to relate this low-level reasoning back to the source code, allowing precise feedback in terms of the original program. Sail’s two-level representation is specifically targeted for program analysis, provides extensive support for control flow graphs and serialization, is built on GCC 4.3.4, and is currently targeted for C code. Sail is freely available under the BSD license from http://www.stanford.edu/~isil/sail.