The purpose of the SAFECode project is to enable program safety without garbage collection and with minimal run-time checks using static analysis when possible and run-time checks when necessary. SAFECode defines a code representation with minimal semantic restrictions designed to enable static enforcement of safety, using aggressive compiler techniques developed in this project.
SAFECode is designed to provide the following safety guarantees:
- Array bounds checking (prevents pointers from overflowing from one memory object into another)
- Loads and stores only access valid memory objects
- Type safety for a subset of memory objects proven to be type-safe
- Sound operational semantics in the face of dangling pointer errors (i.e., all safety guarantees hold even when dangling pointers are dereferenced).
- Optional dangling pointer detection (induces more overhead)
The SAFECode and SVA research is funded by grants from AFRL Contract #FA8650-10-C-7022, the National Science Foundation, the DoD Multi-disciplinary University Research Initiative (MURI), Apple Computer, Inc., and the University of Illinois.