compiling a call to function in compiler


I'm trying to follow the advice from this message:,
to create a call instruction from a function pointer. But I'm

   Assertion failed: (isa<X>(Val) && "cast<Ty>() argument of
incompatible type!"),
   function cast, file /usr/local/include/llvm/Support/Casting.h, line 202.

Code snippets...

    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.


Ah. excellent.