Clang is a widely used C/C++/ObjC front-end to the llvm compiler back-end. Clang also supports CUDA and OpenCL extensions. Unfortunately Clang lacks several features that would make it more extensible, and suitable for static and dynamic program analysis. The goal of these projects is to add such functionality. Some of the features listed below may sound a bit pedestrian, but they will all greatly simplify future analysis efforts.
- Ocaml or Haskel bindings
- Simplifying the AST to resemble CIL, or simply moving side-effects out of expressions.
- A reasonably generic whole-program type-qualifier checking and inference engine.
Experience with a large C++ project, and a Compilers course.