[LLVMdev] DIBuilder - what's with the null compile units?

Devang Patel dpatel at apple.com
Fri Oct 28 09:21:36 PDT 2011

On Oct 27, 2011, at 10:39 PM, Talin wrote:

> On Mon, Oct 24, 2011 at 9:17 AM, Devang Patel <dpatel at apple.com> wrote:
> On Oct 23, 2011, at 12:03 AM, Talin wrote:
>> Just a follow up on this - I am still having problems, I never did figure out a solution. (I've been running with debug off for the last month so that I could get work done.)
>> Here's what I am seeing: I am definitely calling DIBuilder::finalize(). I even put a debug print statement right after it, so that I could be sure that the code was being executed. I also insured that it was getting called before the module was written out, and that no additional debug information gets added after it has been called.
>> Yet despite this, the second-to-last parameter for DW_TAG_subprogram metadata is in fact null in the module dissassembly.
>> So essentially I am completely stumped.
> If you're using DIBuilder to create your subprogram then you'll see that it puts new node in AllSubprograms.
>   // Create a named metadata so that we do not lose this mdnode.                                                                                                               
>   AllSubprograms.push_back(Node);
> And follow AllSubprograms in DIBuilder::finalize()
> I traced through the code in DIBuilder::finalize():
>   for (unsigned i = 0, e = SPs.getNumElements(); i != e; ++i) {
>     DISubprogram SP(SPs.getElement(i));
>     if (NamedMDNode *NMD = getFnSpecificMDNode(M, SP)) {
>       SmallVector<Value *, 4> Variables;
>       for (unsigned ii = 0, ee = NMD->getNumOperands(); ii != ee; ++ii)
> It looks as if getFnSpecificMDNode() is always returning NULL in my case -  the body of the if statement never gets executed.

The two lines above this for loop is 

  DIArray SPs = getOrCreateArray(AllSubprograms);

This should populate your CompieUnit's   node that holds top level subprograms.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20111028/591f5402/attachment.html>

More information about the llvm-dev mailing list