[LLVMdev] compiling a call to function in compiler
Rob Nikander
rob.nikander at gmail.com
Mon Jan 17 18:03:59 PST 2011
On Mon, Jan 17, 2011 at 8:36 PM, Eric Christopher <echristo at apple.com> wrote:
>
> id testfunc(id a, id b) { ... }
> ...
> FunctionType *fn_type = FunctionType::get(id_type, argtypes, false);
> Value *fn = ConstantExpr::getIntToPtr(ConstantInt::get(int64_type,
> reinterpret_cast<int64_t>(testfunc)), fn_type);
> return builder.CreateCall2(fn, arg0val, arg1val); // <--
> assertion fails here
>
> What am I doing wrong? I can paste more code if needed.
>
> One of the types doesn't match the types of what you are trying to pass.
> You should debug which one it is and why the types aren't matching what
> you think they should be.
Okay, found it. My function was of type: "i8* (i8*, i8*)". I thought
that was okay, but now I see it needed to be "i8* (i8*, i8*)*" -- ie,
a pointer to the former type.
Rob
More information about the llvm-dev
mailing list