Dear LLVMers, We are happy to announce an alpha release of the SAFECode compiler. It is now available for download from the LLVM public Subversion repository. SAFECode uses a set of analysis passes and program transformations to provide strong memory safety guarantees to C/C++ programs. Specifically, the safety guarantees are: o Array bounds checking (prevents pointers from overflowing from one memory object into another) o Loads and stores only access valid memory objects o Type safety for a subset of memory objects o Dangling pointer errors are harmless (i.e., all safety guarantees hold even when dangling pointers are dereferenced) o Sound operational semantics in the face of dangling pointer errors o Optional dangling pointer detection (induces more overhead) We have currently built a Valgrind-like debugging tool using SAFECode that prints debugging information when a memory safety error is detected at run-time. While the debugging tool doesn't use all of the fancy tricks we developed in our research, transformed programs still run 2.8x faster on average than Valgrind's memcheck tool (on Mac OS X) and 24x faster on average than Valgrind's ptrcheck tool (on Linux). Currently, the debugging tool does not utilize all of the results from the SAFECode research. Features such as Automatic Pool Allocation and Inter-procedural static array bounds checking are either buggy or disabled. We're working on improving the quality of the code, and we hope to release a "production-speed" version of SAFECode in the near future. More information on SAFECode can be found here: http://safecode.cs.illinois.edu/index.html SAFECode can be checked out from SVN using the following command: svn co http://llvm.org/svn/llvm-project/safecode/trunk safecode Once checked out from SVN, you can find the documentation in safecode/docs. See the README file in the distribution for more details on documentation. -- John T.