#include #include "llvm/IR/BasicBlock.h" #include "llvm/IR/Constants.h" #include "llvm/IR/DerivedTypes.h" #include "llvm/IR/Function.h" #include "llvm/IR/IRBuilder.h" #include "llvm/IR/IRPrintingPasses.h" #include "llvm/IR/LLVMContext.h" #include "llvm/IR/Module.h" #include "llvm/IR/PassManager.h" #include "llvm/IR/Type.h" #include "llvm/IR/Verifier.h" #include "llvm/Pass.h" #include "llvm/Support/raw_ostream.h" using namespace llvm; int main( int argc, char **argv ) { // test for now... LLVMContext llvm_ctx; Module llvm_module( "VMProtect 2 Static Devirtualizer", llvm_ctx ); IRBuilder<> ir_builder( llvm_ctx ); FunctionType *FT = FunctionType::get( Type::getVoidTy( llvm_ctx ), false ); Function *F = Function::Create( FT, Function::ExternalLinkage, "test_func", llvm_module ); F->setCallingConv( CallingConv::C ); auto basic_block = BasicBlock::Create( llvm_ctx, "test", F ); ir_builder.SetInsertPoint( basic_block ); ir_builder.CreateRetVoid(); basic_block->print( outs() ); }