diff options
author | Bob Haarman <llvm@inglorion.net> | 2016-10-25 22:11:52 +0000 |
---|---|---|
committer | Bob Haarman <llvm@inglorion.net> | 2016-10-25 22:11:52 +0000 |
commit | 26a87bd0306cd9ac6754bf6039f79bd9c777f842 (patch) | |
tree | 3d1760068de99823484db35d3cf539746b3fe98e /llvm/lib/CodeGen/AsmPrinter | |
parent | de86241a097414640d1d410e68ac3287c24d9810 (diff) | |
download | bcm5719-llvm-26a87bd0306cd9ac6754bf6039f79bd9c777f842.tar.gz bcm5719-llvm-26a87bd0306cd9ac6754bf6039f79bd9c777f842.zip |
[codeview] support emitting indirect virtual base class information
Summary:
Fixes PR28281.
MSVC lists indirect virtual base classes in the field list of a class,
using LF_IVBCLASS records. This change makes LLVM emit such records
when processing DW_TAG_inheritance tags with the DIFlagVirtual and
(newly introduced) DIFlagIndirect tags.
Reviewers: rnk, ruiu, zturner
Differential Revision: https://reviews.llvm.org/D25578
llvm-svn: 285130
Diffstat (limited to 'llvm/lib/CodeGen/AsmPrinter')
-rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp b/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp index a305e3d3ab9..a1fd0dc8869 100644 --- a/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp @@ -1786,8 +1786,11 @@ CodeViewDebug::lowerRecordFieldList(const DICompositeType *Ty) { unsigned VBPtrOffset = 0; // FIXME: Despite the accessor name, the offset is really in bytes. unsigned VBTableIndex = I->getOffsetInBits() / 4; + auto RecordKind = (I->getFlags() & DINode::FlagIndirectVirtualBase) == DINode::FlagIndirectVirtualBase + ? TypeRecordKind::IndirectVirtualBaseClass + : TypeRecordKind::VirtualBaseClass; Fields.writeMemberType(VirtualBaseClassRecord( - translateAccessFlags(Ty->getTag(), I->getFlags()), + RecordKind, translateAccessFlags(Ty->getTag(), I->getFlags()), getTypeIndex(I->getBaseType()), getVBPTypeIndex(), VBPtrOffset, VBTableIndex)); } else { |