updated for llvm 3.2