<div dir="ltr"><div><div><div><div><div>It's now a multi-stage process.<br><br></div>First, there is a difference between a permanent forward declaration (i.e. the actual definition is in a different file) and a temporary forward declaration (i.e. it will appear later in the same file).<br><br></div>To create a permanent forward declaration:<br><br>    DICompositeType     *result = m_DIBuilder->createForwardDecl(<br>            dwarf::DW_TAG_structure_type,<br>            name,<br>            m_DICompileUnit,<br>            file,<br>            loc.m_Line);<br><br></div>To create a temporary forward declaration:<br><br>    DICompositeType     *result = m_DIBuilder->createReplaceableCompositeType(<br>            dwarf::DW_TAG_structure_type,<br>            name,<br>            m_DICompileUnit,<br>            file,<br>            loc.m_Line);<br><br></div>And then, once the final value of the temporary is known (and you GOTTA do this step otherwise you get an assert):<br><br>    DICompositeType     *result = m_DIBuilder->createStructType(<br>            m_DICompileUnit,<br>            name,<br>            file,<br>            loc.m_Line,<br>            sizeOf(actual) * 8, alignOf(actual) * 8,<br>            0, nullptr, elts);<br>   <br>    it = m_TmpStructDI.find(name);<br>    if (it != m_TmpStructDI.end()) {<br>        MDNode          *node = /* the result from createReplaceableCompositeType earlier */<br>        llvm::TempMDNode fwd_decl(node);<br><br>        m_DIBuilder->replaceTemporary(std::move(fwd_decl), result);<br><br></div>You will need to keep a map of outstanding temporary forward declarations to do this.<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Feb 24, 2016 at 5:09 PM, Rodney M. Bates via llvm-dev <span dir="ltr"><<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Before metadata was separated from values, I could create a debug info forward<br>
declaration and eventually resolve it using LLVMReplaceAllUsesWith in core.h.<br>
Now, I can't figure out how to resolve it.  I can find no function that seems<br>
to do this.  My one wild guess that giving the forward decl and the resolving<br>
decl the same UniqueId might do it is not working.<br>
<br>
I am currently using 3.6.1, but I see nothing the voluminous diff of DIBuilder<br>
from 3.6.1 to 3.7.1 that looks like it has anything to do with this.<span class="HOEnZb"><font color="#888888"><br>
-- <br>
Rodney Bates<br>
<a href="mailto:rodney.m.bates@acm.org" target="_blank">rodney.m.bates@acm.org</a><br>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</font></span></blockquote></div><br></div>