How to implement function pointer?

Hi, I’m learning to use llvm api to generate IR code, I got two good tutorials, https://llvm.org/docs/tutorial/ and https://www.ibm.com/developerworks/library/os-createcompilerllvm1/index.html, but non of those showed how to implement a function pointer(or at least there is but I didn’t find out).

For example I got a c style code like this:

int foo(int i) {
return ++i;
}

int (*p)(int);

int main() {
p = foo;
p(3);
}

I turn it into IR code and found the sytex of a function pointer is:
@p = global i32 (i32)* null, align 8
I tried play with llvm::PointerType but I cannot get the sytex, so could anyone teach me how to do this?

Hi Yafei,

you’re looking for the FunctionType.

Cheers,
Philip

Hi Philip,
Isn’t function pointer a pointer first? I checked FunctionType and still have no idea about how to do this, can you show me which api in FunctionType should I use?

Hi Yafei,

a Value whose type is a FunctionType is a function pointer. You use FunctionType::get to create such a type given the return type and the argument types. Or you call foo->getType() if foo is a Function* :slight_smile:

Cheers,
Philip