| #include <stdio.h> |
| #include <stdlib.h> |
| #include <unistd.h> |
| |
| #include "llvm/Pass.h" |
| #include "llvm/IR/Function.h" |
| |
| using namespace llvm; |
| |
| namespace { |
| |
| class TestLLVMPass : public FunctionPass { |
| |
| public: |
| |
| static char ID; |
| TestLLVMPass() : FunctionPass(ID) { } |
| |
| bool runOnFunction(Function &F) override; |
| |
| StringRef getPassName() const override { |
| return "Some LLVM pass"; |
| } |
| |
| }; |
| |
| } |
| |
| bool TestLLVMPass::runOnFunction(Function &F) { |
| // A couple examples of operations that previously caused segmentation faults |
| // https://github.com/rust-lang/rust/issues/31067 |
| |
| for (auto N = F.begin(); N != F.end(); ++N) { |
| /* code */ |
| } |
| |
| LLVMContext &C = F.getContext(); |
| IntegerType *Int8Ty = IntegerType::getInt8Ty(C); |
| PointerType::get(Int8Ty, 0); |
| return true; |
| } |
| |
| char TestLLVMPass::ID = 0; |
| |
| static RegisterPass<TestLLVMPass> RegisterAFLPass( |
| "some-llvm-function-pass", "Some LLVM pass"); |