[LLVMdev] RefineAbstractType

David Greene dag at cray.com
Wed Nov 12 14:59:02 PST 2008

Is there some reason that RefineAbstractType doesn't recurse down DerivedTypes
and further resolve abstract types?

In Fortran it is possible to have a routine that takes a function pointer to a 
routine with the same signature.  This is not possible to express in C/C++.
I'm not sure it's possible to express in LLVM either without using varargs
(opinions welcome).

In a simpler C++ example, we end upcreating a function pointer type:

void (...) * (opaque *)

We want to resolve "opaque" to be

void (...)

Note that this isn't the same issue as in Fortran (it's not a recursive type) 
but it serves the purpose for this question.

Unfortunately, calling FunctionType::refineAbstractType(opaque, void (...)) 
doesn't work because RefineAbstractType doesn't recurse down into the
pointee types.  It ends up giving back

void (...) * (opaque *)

so it didn't resolve anything.

It's not clear how to fix this without a core LLVM change because the pointee
depth could be arbitrary (pointer to pointer to pointer...).



More information about the llvm-dev mailing list