[LLVMdev] Clang's approach to anonymous struct pointer parameters

Rick Mann rmann at latencyzero.com
Sun Jan 20 01:57:37 PST 2013

For the following code:

    struct XBeePacket;
    typedef void (*CompletionProc)(XBeePacket* inPacket, void* inParam2);
        bool            mField1;
        CompletionProc  mCompletionProc;

Why does clang emit this IR?

    %struct.XBeePacket = type { i8, {}* }
    define void
    @MyCompletionProc(%struct.XBeePacket* %inPacket, i8* %inParam2)
        nounwind uwtable ssp

It makes the struct field for the completion proc an an anonymous aggregate pointer. Is that better than making the first parameter to MyCompletionProc void* or something similar?

I guess there's no way in LLVM IR to forward-declare in a way that solves this, huh?


More information about the llvm-dev mailing list