Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- extern (C) void hello() {
- import core.stdc.stdio : printf;
- printf("Hello there!");
- }
- private void testFunctionPass() {
- auto printfType = LLVMFunctionType(LLVMInt32Type(),
- [LLVMPointerType(LLVMInt8Type(), 0)].ptr, 1, 1);
- auto llvmPrintf = LLVMAddFunction(moduleBuilder.module_, "printf", printfType);
- auto passedType = LLVMFunctionType(LLVMVoidType(), null, 0, 0);
- auto passedPtrType = LLVMPointerType(passedType, 0);
- auto testFunctionType = LLVMFunctionType(LLVMVoidType(), &passedPtrType, 1, 0);
- auto testFunction = LLVMAddFunction(moduleBuilder.module_, "fp_pass_test", testFunctionType);
- auto entryBlock = LLVMAppendBasicBlock(testFunction, "entry");
- auto builder = LLVMCreateBuilder();
- auto paramValue = LLVMGetParam(testFunction, 0);
- LLVMPositionBuilderAtEnd(builder, entryBlock);
- auto pointerPrintFormat = LLVMBuildGlobalStringPtr(builder, "received ptr: %x\n", "");
- LLVMBuildCall(builder, llvmPrintf, [pointerPrintFormat, paramValue].ptr, 2, "");
- LLVMBuildCall(builder, paramValue, null, 0, "");
- LLVMBuildRetVoid(builder);
- LLVMDisposeBuilder(builder);
- LLVMVerifyModule(moduleBuilder.module_, LLVMPrintMessageAction, null);
- LLVMDumpValue(testFunction);
- void* passedPtr = &hello;
- LLVMGenericValueRef passedPtrGeneric = LLVMCreateGenericValueOfPointer(passedPtr);
- auto unwrapped = LLVMGenericValueToPointer(passedPtrGeneric);
- import core.stdc.stdio : printf;
- printf("passed ptr: %x\n", passedPtr);
- printf("unwrapped ptr: %x\n", unwrapped);
- LLVMRunFunction(interpreter, testFunction, 1, &passedPtrGeneric);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement