[LLVMdev] [un]wrapping llvm:DITypeRef

Duncan P. N. Exon Smith dexonsmith at apple.com
Mon Jul 27 20:55:32 PDT 2015


> On 2015-Jul-25, at 15:44, Rodney M. Bates <rodney_bates at lcwb.coop> wrote:
> 
> In trying to write a C binding for DIBuilder of llvm 3.6.1, I can't see a way to unwrap
> llvm::DITypeRef, declared in include/llvm/IR/DebugInfo.h.  This is a class with one
> data member, a pointer to Metadata.
> 
> If I try to make my C type a struct with one pointer, I can't cast it to DITypeRef.
> If I try to go inside the classes and use the pointer, I can cast, but can't construct
> a DITypeRef when unwrapping, as both its pointer field 'Val' and the constructor are
> private.

This was probably an oversight.  Frankly, I'm not sure DITypeRef should
really be in the DIBuilder API -- frontends should probably just pass
in a DIType.

Note that in ToT, DITypeRef has completely changed; it's a typedef from
`TypedDINodeRef<DIType>` and has a public constructor from `Metadata*`.

I suggest you just make the constructor public in your local copy of
LLVM; even better, work off of the LLVM 3.7 branch (better still, work
off of ToT).



More information about the llvm-dev mailing list