Debug Info: Use identifier to reference DIType in base type field of
authorManman Ren <manman.ren@gmail.com>
Thu, 5 Sep 2013 18:48:31 +0000 (18:48 +0000)
committerManman Ren <manman.ren@gmail.com>
Thu, 5 Sep 2013 18:48:31 +0000 (18:48 +0000)
commit60352032bf87498601f436c9ed77c235c82f3d29
treec7c74d94f287cf792e7cbd171ef14d1e4e240dd9
parent13c68ef88b23458a5030579e651fd204c8d3a0b8
Debug Info: Use identifier to reference DIType in base type field of
ptr_to_member.

We introduce a new class DITypeRef that represents a reference to a DIType.
It wraps around a Value*, which can be either an identifier in MDString
or an actual MDNode. The class has a helper function "resolve" that
finds the actual MDNode for a given DITypeRef.

We specialize getFieldAs to return a field that is a reference to a
DIType. To correctly access the base type field of ptr_to_member,
getClassType now calls getFieldAs<DITypeRef> to return a DITypeRef.

Also add a typedef for DITypeIdentifierMap and a helper
generateDITypeIdentifierMap in DebugInfo.h. In DwarfDebug.cpp, we keep
a DITypeIdentifierMap and call generateDITypeIdentifierMap to actually
populate the map.

Verifier is updated accordingly.

llvm-svn: 190081
llvm/include/llvm/DebugInfo.h
llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
llvm/lib/CodeGen/AsmPrinter/DwarfDebug.h
llvm/lib/IR/DIBuilder.cpp
llvm/lib/IR/DebugInfo.cpp
llvm/test/DebugInfo/tu-member-pointer.ll [new file with mode: 0644]