[llvm-dev] How to resolve debug info forward types
David Jones via llvm-dev
llvm-dev at lists.llvm.org
Wed Feb 24 14:15:58 PST 2016
It's now a multi-stage process.
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).
To create a permanent forward declaration:
DICompositeType *result = m_DIBuilder->createForwardDecl(
dwarf::DW_TAG_structure_type,
name,
m_DICompileUnit,
file,
loc.m_Line);
To create a temporary forward declaration:
DICompositeType *result =
m_DIBuilder->createReplaceableCompositeType(
dwarf::DW_TAG_structure_type,
name,
m_DICompileUnit,
file,
loc.m_Line);
And then, once the final value of the temporary is known (and you GOTTA do
this step otherwise you get an assert):
DICompositeType *result = m_DIBuilder->createStructType(
m_DICompileUnit,
name,
file,
loc.m_Line,
sizeOf(actual) * 8, alignOf(actual) * 8,
0, nullptr, elts);
it = m_TmpStructDI.find(name);
if (it != m_TmpStructDI.end()) {
MDNode *node = /* the result from
createReplaceableCompositeType earlier */
llvm::TempMDNode fwd_decl(node);
m_DIBuilder->replaceTemporary(std::move(fwd_decl), result);
You will need to keep a map of outstanding temporary forward declarations
to do this.
On Wed, Feb 24, 2016 at 5:09 PM, Rodney M. Bates via llvm-dev <
llvm-dev at lists.llvm.org> wrote:
> Before metadata was separated from values, I could create a debug info
> forward
> declaration and eventually resolve it using LLVMReplaceAllUsesWith in
> core.h.
> Now, I can't figure out how to resolve it. I can find no function that
> seems
> to do this. My one wild guess that giving the forward decl and the
> resolving
> decl the same UniqueId might do it is not working.
>
> I am currently using 3.6.1, but I see nothing the voluminous diff of
> DIBuilder
> from 3.6.1 to 3.7.1 that looks like it has anything to do with this.
> --
> Rodney Bates
> rodney.m.bates at acm.org
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160224/a7fdec81/attachment.html>
More information about the llvm-dev
mailing list