<div dir="ltr">What about updating the visitor to support dumping this?</div><br><div class="gmail_quote"><div dir="ltr">On Tue, Jun 21, 2016 at 11:39 AM Reid Kleckner via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: rnk<br>
Date: Tue Jun 21 13:33:01 2016<br>
New Revision: 273294<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=273294&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=273294&view=rev</a><br>
Log:<br>
[codeview] Add support for splitting field list records over 64KB<br>
<br>
The basic structure is that once a list record goes over 64K, the last<br>
subrecord of the list is an LF_INDEX record that refers to the next<br>
record. Because the type record graph must be toplogically sorted, this<br>
means we have to emit them in reverse order. We build the type record in<br>
order of declaration, so this means that if we don't want extra copies,<br>
we need to detect when we were about to split a record, and leave space<br>
for a continuation subrecord that will point to the eventual split<br>
top-level record.<br>
<br>
Also adds dumping support for these records.<br>
<br>
Next we should make sure that large method overload lists work properly.<br>
<br>
Modified:<br>
llvm/trunk/include/llvm/DebugInfo/CodeView/FieldListRecordBuilder.h<br>
llvm/trunk/include/llvm/DebugInfo/CodeView/ListRecordBuilder.h<br>
llvm/trunk/include/llvm/DebugInfo/CodeView/TypeRecord.h<br>
llvm/trunk/include/llvm/DebugInfo/CodeView/TypeRecordBuilder.h<br>
llvm/trunk/include/llvm/DebugInfo/CodeView/TypeRecords.def<br>
llvm/trunk/lib/DebugInfo/CodeView/ListRecordBuilder.cpp<br>
llvm/trunk/lib/DebugInfo/CodeView/TypeDumper.cpp<br>
llvm/trunk/lib/DebugInfo/CodeView/TypeRecord.cpp<br>
llvm/trunk/lib/DebugInfo/CodeView/TypeTableBuilder.cpp<br>
llvm/trunk/test/DebugInfo/COFF/enum.ll<br>
llvm/trunk/test/DebugInfo/COFF/types-data-members.ll<br>
llvm/trunk/test/DebugInfo/COFF/types-non-virtual-methods.ll<br>
llvm/trunk/test/DebugInfo/COFF/types-recursive-struct.ll<br>
llvm/trunk/test/DebugInfo/PDB/pdbdump-headers.test<br>
<br>
Modified: llvm/trunk/include/llvm/DebugInfo/CodeView/FieldListRecordBuilder.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/FieldListRecordBuilder.h?rev=273294&r1=273293&r2=273294&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/FieldListRecordBuilder.h?rev=273294&r1=273293&r2=273294&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/include/llvm/DebugInfo/CodeView/FieldListRecordBuilder.h (original)<br>
+++ llvm/trunk/include/llvm/DebugInfo/CodeView/FieldListRecordBuilder.h Tue Jun 21 13:33:01 2016<br>
@@ -47,7 +47,7 @@ private:<br>
public:<br>
FieldListRecordBuilder();<br>
<br>
- void reset() { ListRecordBuilder::reset(TypeRecordKind::FieldList); }<br>
+ void reset() { ListRecordBuilder::reset(); }<br>
<br>
void writeBaseClass(const BaseClassRecord &Record);<br>
void writeEnumerator(const EnumeratorRecord &Record);<br>
<br>
Modified: llvm/trunk/include/llvm/DebugInfo/CodeView/ListRecordBuilder.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/ListRecordBuilder.h?rev=273294&r1=273293&r2=273294&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/ListRecordBuilder.h?rev=273294&r1=273293&r2=273294&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/include/llvm/DebugInfo/CodeView/ListRecordBuilder.h (original)<br>
+++ llvm/trunk/include/llvm/DebugInfo/CodeView/ListRecordBuilder.h Tue Jun 21 13:33:01 2016<br>
@@ -14,6 +14,7 @@<br>
<br>
namespace llvm {<br>
namespace codeview {<br>
+class TypeTableBuilder;<br>
<br>
class ListRecordBuilder {<br>
private:<br>
@@ -28,13 +29,16 @@ protected:<br>
public:<br>
llvm::StringRef str() { return Builder.str(); }<br>
<br>
- void reset(TypeRecordKind K) {<br>
- Builder.reset(K);<br>
+ void reset() {<br>
+ Builder.reset(Kind);<br>
ContinuationOffsets.clear();<br>
- SubrecordCount = 0;<br>
+ SubrecordStart = 0;<br>
}<br>
<br>
- unsigned getSubrecordCount() { return SubrecordCount; }<br>
+ void writeListContinuation(const ListContinuationRecord &R);<br>
+<br>
+ /// Writes this list record as a possible sequence of records.<br>
+ TypeIndex writeListRecord(TypeTableBuilder &Table);<br>
<br>
protected:<br>
void finishSubRecord();<br>
@@ -42,9 +46,18 @@ protected:<br>
TypeRecordBuilder &getBuilder() { return Builder; }<br>
<br>
private:<br>
+ size_t getLastContinuationStart() const {<br>
+ return ContinuationOffsets.empty() ? 0 : ContinuationOffsets.back();<br>
+ }<br>
+ size_t getLastContinuationEnd() const { return Builder.size(); }<br>
+ unsigned getLastContinuationSize() const {<br>
+ return getLastContinuationEnd() - getLastContinuationStart();<br>
+ }<br>
+<br>
+ TypeRecordKind Kind;<br>
TypeRecordBuilder Builder;<br>
SmallVector<size_t, 4> ContinuationOffsets;<br>
- unsigned SubrecordCount = 0;<br>
+ size_t SubrecordStart = 0;<br>
};<br>
}<br>
}<br>
<br>
Modified: llvm/trunk/include/llvm/DebugInfo/CodeView/TypeRecord.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/TypeRecord.h?rev=273294&r1=273293&r2=273294&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/TypeRecord.h?rev=273294&r1=273293&r2=273294&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/include/llvm/DebugInfo/CodeView/TypeRecord.h (original)<br>
+++ llvm/trunk/include/llvm/DebugInfo/CodeView/TypeRecord.h Tue Jun 21 13:33:01 2016<br>
@@ -1169,6 +1169,29 @@ private:<br>
uint64_t VTableIndex;<br>
};<br>
<br>
+/// LF_INDEX - Used to chain two large LF_FIELDLIST or LF_METHODLIST records<br>
+/// together. The first will end in an LF_INDEX record that points to the next.<br>
+class ListContinuationRecord : public TypeRecord {<br>
+public:<br>
+ ListContinuationRecord(TypeIndex ContinuationIndex)<br>
+ : TypeRecord(TypeRecordKind::ListContinuation),<br>
+ ContinuationIndex(ContinuationIndex) {}<br>
+<br>
+ TypeIndex getContinuationIndex() const { return ContinuationIndex; }<br>
+<br>
+ bool remapTypeIndices(ArrayRef<TypeIndex> IndexMap);<br>
+<br>
+ static ErrorOr<ListContinuationRecord> deserialize(TypeRecordKind Kind,<br>
+ ArrayRef<uint8_t> &Data);<br>
+<br>
+private:<br>
+ struct Layout {<br>
+ ulittle16_t Pad0;<br>
+ TypeIndex ContinuationIndex;<br>
+ };<br>
+ TypeIndex ContinuationIndex;<br>
+};<br>
+<br>
typedef CVRecord<TypeLeafKind> CVType;<br>
typedef VarStreamArray<CVType> CVTypeArray;<br>
}<br>
<br>
Modified: llvm/trunk/include/llvm/DebugInfo/CodeView/TypeRecordBuilder.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/TypeRecordBuilder.h?rev=273294&r1=273293&r2=273294&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/TypeRecordBuilder.h?rev=273294&r1=273293&r2=273294&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/include/llvm/DebugInfo/CodeView/TypeRecordBuilder.h (original)<br>
+++ llvm/trunk/include/llvm/DebugInfo/CodeView/TypeRecordBuilder.h Tue Jun 21 13:33:01 2016<br>
@@ -43,11 +43,18 @@ public:<br>
void writeNullTerminatedString(const char *Value);<br>
void writeNullTerminatedString(StringRef Value);<br>
void writeGuid(StringRef Guid);<br>
+ void writeBytes(StringRef Value) { Stream << Value; }<br>
<br>
llvm::StringRef str();<br>
<br>
uint64_t size() const { return Stream.tell(); }<br>
<br>
+ void truncate(uint64_t Size) {<br>
+ // This works because raw_svector_ostream is not buffered.<br>
+ assert(Size < Buffer.size());<br>
+ Buffer.resize(Size);<br>
+ }<br>
+<br>
void reset(TypeRecordKind K) {<br>
Buffer.clear();<br>
writeTypeRecordKind(K);<br>
<br>
Modified: llvm/trunk/include/llvm/DebugInfo/CodeView/TypeRecords.def<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/TypeRecords.def?rev=273294&r1=273293&r2=273294&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/TypeRecords.def?rev=273294&r1=273293&r2=273294&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/include/llvm/DebugInfo/CodeView/TypeRecords.def (original)<br>
+++ llvm/trunk/include/llvm/DebugInfo/CodeView/TypeRecords.def Tue Jun 21 13:33:01 2016<br>
@@ -71,6 +71,7 @@ MEMBER_RECORD(LF_MEMBER, 0x150d, DataMem<br>
MEMBER_RECORD(LF_NESTTYPE, 0x1510, NestedType)<br>
MEMBER_RECORD(LF_ONEMETHOD, 0x1511, OneMethod)<br>
MEMBER_RECORD(LF_ENUMERATE, 0x1502, Enumerator)<br>
+MEMBER_RECORD(LF_INDEX, 0x1404, ListContinuation)<br>
<br>
// ID leaf records. Subsequent leaf types may be referenced from .debug$S.<br>
TYPE_RECORD(LF_FUNC_ID, 0x1601, FuncId)<br>
@@ -168,7 +169,6 @@ CV_TYPE(LF_DIMVARLU, 0x120a)<br>
// Member type records. These are generally not length prefixed, and appear<br>
// inside of a field list record.<br>
CV_TYPE(LF_FRIENDFCN_ST, 0x1403)<br>
-CV_TYPE(LF_INDEX, 0x1404)<br>
CV_TYPE(LF_MEMBER_ST, 0x1405)<br>
CV_TYPE(LF_STMEMBER_ST, 0x1406)<br>
CV_TYPE(LF_METHOD_ST, 0x1407)<br>
<br>
Modified: llvm/trunk/lib/DebugInfo/CodeView/ListRecordBuilder.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/CodeView/ListRecordBuilder.cpp?rev=273294&r1=273293&r2=273294&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/CodeView/ListRecordBuilder.cpp?rev=273294&r1=273293&r2=273294&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/DebugInfo/CodeView/ListRecordBuilder.cpp (original)<br>
+++ llvm/trunk/lib/DebugInfo/CodeView/ListRecordBuilder.cpp Tue Jun 21 13:33:01 2016<br>
@@ -7,27 +7,92 @@<br>
//<br>
//===----------------------------------------------------------------------===//<br>
<br>
+#include "llvm/ADT/SmallString.h"<br>
#include "llvm/DebugInfo/CodeView/ListRecordBuilder.h"<br>
+#include "llvm/DebugInfo/CodeView/TypeTableBuilder.h"<br>
<br>
using namespace llvm;<br>
using namespace codeview;<br>
<br>
-ListRecordBuilder::ListRecordBuilder(TypeRecordKind Kind) : Builder(Kind) {}<br>
+ListRecordBuilder::ListRecordBuilder(TypeRecordKind Kind)<br>
+ : Kind(Kind), Builder(Kind) {}<br>
<br>
-void ListRecordBuilder::finishSubRecord() {<br>
- SubrecordCount++;<br>
+void ListRecordBuilder::writeListContinuation(const ListContinuationRecord &R) {<br>
+ TypeRecordBuilder &Builder = getBuilder();<br>
+<br>
+ assert(getLastContinuationSize() < 65535 - 8 && "continuation won't fit");<br>
+<br>
+ Builder.writeTypeRecordKind(TypeRecordKind::ListContinuation);<br>
+ Builder.writeUInt16(0);<br>
+ Builder.writeTypeIndex(R.getContinuationIndex());<br>
+<br>
+ // End the current segment manually so that nothing comes after the<br>
+ // continuation.<br>
+ ContinuationOffsets.push_back(Builder.size());<br>
+ SubrecordStart = Builder.size();<br>
+}<br>
<br>
+void ListRecordBuilder::finishSubRecord() {<br>
// The builder starts at offset 2 in the actual CodeView buffer, so add an<br>
// additional offset of 2 before computing the alignment.<br>
uint32_t Remainder = (Builder.size() + 2) % 4;<br>
if (Remainder != 0) {<br>
for (int32_t PaddingBytesLeft = 4 - Remainder; PaddingBytesLeft > 0;<br>
--PaddingBytesLeft) {<br>
- Builder.writeUInt8(0xf0 + PaddingBytesLeft);<br>
+ Builder.writeUInt8(LF_PAD0 + PaddingBytesLeft);<br>
}<br>
}<br>
<br>
- // TODO: Split the list into multiple records if it's longer than 64KB, using<br>
- // a subrecord of TypeRecordKind::Index to chain the records together.<br>
- assert(Builder.size() < 65536);<br>
+ // Check if this subrecord makes the current segment not fit in 64K minus the<br>
+ // space for a continuation record (8 bytes). If the segment does not fit,<br>
+ // back up and insert a continuation record, sliding the current subrecord<br>
+ // down.<br>
+ if (getLastContinuationSize() > 65535 - 8) {<br>
+ SmallString<128> SubrecordCopy(Builder.str().slice(SubrecordStart, Builder.size()));<br>
+ Builder.truncate(SubrecordStart);<br>
+<br>
+ // Write a placeholder continuation record.<br>
+ Builder.writeTypeRecordKind(TypeRecordKind::ListContinuation);<br>
+ Builder.writeUInt16(0);<br>
+ Builder.writeUInt32(0);<br>
+ ContinuationOffsets.push_back(Builder.size());<br>
+ assert(Builder.size() == SubrecordStart + 8 && "wrong continuation size");<br>
+ assert(getLastContinuationSize() < 65535 && "segment too big");<br>
+<br>
+ // Start a new list record of the appropriate kind, and copy the previous<br>
+ // subrecord into place.<br>
+ Builder.writeTypeRecordKind(Kind);<br>
+ Builder.writeBytes(SubrecordCopy);<br>
+ }<br>
+<br>
+ SubrecordStart = Builder.size();<br>
+}<br>
+<br>
+TypeIndex ListRecordBuilder::writeListRecord(TypeTableBuilder &Table) {<br>
+ // Get the continuation segments as a reversed vector of StringRefs for<br>
+ // convenience.<br>
+ SmallVector<StringRef, 1> Segments;<br>
+ StringRef Data = str();<br>
+ size_t LastEnd = 0;<br>
+ for (size_t SegEnd : ContinuationOffsets) {<br>
+ Segments.push_back(Data.slice(LastEnd, SegEnd));<br>
+ LastEnd = SegEnd;<br>
+ }<br>
+ Segments.push_back(Data.slice(LastEnd, Builder.size()));<br>
+<br>
+ // Pop the last record off and emit it directly.<br>
+ StringRef LastRec = Segments.pop_back_val();<br>
+ TypeIndex ContinuationIndex = Table.writeRecord(LastRec);<br>
+<br>
+ // Emit each record with a continuation in reverse order, so that each one<br>
+ // references the previous record.<br>
+ for (StringRef Rec : reverse(Segments)) {<br>
+ assert(*reinterpret_cast<const ulittle16_t *>(Rec.data()) ==<br>
+ unsigned(Kind));<br>
+ ulittle32_t *ContinuationPtr =<br>
+ reinterpret_cast<ulittle32_t *>(const_cast<char *>(Rec.end())) - 1;<br>
+ *ContinuationPtr = ContinuationIndex.getIndex();<br>
+ ContinuationIndex = Table.writeRecord(Rec);<br>
+ }<br>
+ return ContinuationIndex;<br>
}<br>
<br>
Modified: llvm/trunk/lib/DebugInfo/CodeView/TypeDumper.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/CodeView/TypeDumper.cpp?rev=273294&r1=273293&r2=273294&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/CodeView/TypeDumper.cpp?rev=273294&r1=273293&r2=273294&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/DebugInfo/CodeView/TypeDumper.cpp (original)<br>
+++ llvm/trunk/lib/DebugInfo/CodeView/TypeDumper.cpp Tue Jun 21 13:33:01 2016<br>
@@ -195,6 +195,8 @@ static StringRef getLeafTypeName(TypeLea<br>
case ename: \<br>
return #name;<br>
#include "llvm/DebugInfo/CodeView/TypeRecords.def"<br>
+ case LF_FIELDLIST:<br>
+ return "FieldList";<br>
default:<br>
break;<br>
}<br>
@@ -214,6 +216,9 @@ Error CVTypeDumper::visitTypeBegin(const<br>
}<br>
<br>
Error CVTypeDumper::visitTypeEnd(const CVRecord<TypeLeafKind> &Record) {<br>
+ if (Record.Type == LF_FIELDLIST)<br>
+ Name = "<field list>";<br>
+<br>
// Always record some name for every type, even if Name is empty. CVUDTNames<br>
// is indexed by type index, and must have one entry for every type.<br>
recordType(Name);<br>
@@ -612,6 +617,12 @@ Error CVTypeDumper::visitVirtualBaseClas<br>
return Error::success();<br>
}<br>
<br>
+Error CVTypeDumper::visitListContinuation(ListContinuationRecord &Cont) {<br>
+ DictScope S(*W, "ListContinuation");<br>
+ printTypeIndex("ContinuationIndex", Cont.getContinuationIndex());<br>
+ return Error::success();<br>
+}<br>
+<br>
StringRef CVTypeDumper::getTypeName(TypeIndex TI) {<br>
if (TI.isNoneType())<br>
return "<no type>";<br>
<br>
Modified: llvm/trunk/lib/DebugInfo/CodeView/TypeRecord.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/CodeView/TypeRecord.cpp?rev=273294&r1=273293&r2=273294&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/CodeView/TypeRecord.cpp?rev=273294&r1=273293&r2=273294&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/DebugInfo/CodeView/TypeRecord.cpp (original)<br>
+++ llvm/trunk/lib/DebugInfo/CodeView/TypeRecord.cpp Tue Jun 21 13:33:01 2016<br>
@@ -365,6 +365,14 @@ VirtualBaseClassRecord::deserialize(Type<br>
Offset, Index);<br>
}<br>
<br>
+ErrorOr<ListContinuationRecord><br>
+ListContinuationRecord::deserialize(TypeRecordKind Kind,<br>
+ ArrayRef<uint8_t> &Data) {<br>
+ const Layout *L = nullptr;<br>
+ CV_DESERIALIZE(Data, L);<br>
+ return ListContinuationRecord(L->ContinuationIndex);<br>
+}<br>
+<br>
//===----------------------------------------------------------------------===//<br>
// Type index remapping<br>
//===----------------------------------------------------------------------===//<br>
@@ -556,3 +564,7 @@ bool VirtualBaseClassRecord::remapTypeIn<br>
Success &= remapIndex(IndexMap, VBPtrType);<br>
return Success;<br>
}<br>
+<br>
+bool ListContinuationRecord::remapTypeIndices(ArrayRef<TypeIndex> IndexMap) {<br>
+ return remapIndex(IndexMap, ContinuationIndex);<br>
+}<br>
<br>
Modified: llvm/trunk/lib/DebugInfo/CodeView/TypeTableBuilder.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/CodeView/TypeTableBuilder.cpp?rev=273294&r1=273293&r2=273294&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/CodeView/TypeTableBuilder.cpp?rev=273294&r1=273293&r2=273294&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/DebugInfo/CodeView/TypeTableBuilder.cpp (original)<br>
+++ llvm/trunk/lib/DebugInfo/CodeView/TypeTableBuilder.cpp Tue Jun 21 13:33:01 2016<br>
@@ -267,9 +267,7 @@ TypeIndex TypeTableBuilder::writeRecord(<br>
}<br>
<br>
TypeIndex TypeTableBuilder::writeFieldList(FieldListRecordBuilder &FieldList) {<br>
- // TODO: Split the list into multiple records if it's longer than 64KB, using<br>
- // a subrecord of TypeRecordKind::Index to chain the records together.<br>
- return writeRecord(FieldList.str());<br>
+ return FieldList.writeListRecord(*this);<br>
}<br>
<br>
TypeIndex TypeTableBuilder::writeMethodOverloadList(<br>
<br>
Modified: llvm/trunk/test/DebugInfo/COFF/enum.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/COFF/enum.ll?rev=273294&r1=273293&r2=273294&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/COFF/enum.ll?rev=273294&r1=273293&r2=273294&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/DebugInfo/COFF/enum.ll (original)<br>
+++ llvm/trunk/test/DebugInfo/COFF/enum.ll Tue Jun 21 13:33:01 2016<br>
@@ -5,7 +5,7 @@<br>
; E e;<br>
<br>
; CHECK: CodeViewTypes [<br>
-; CHECK: UnknownLeaf (0x1000) {<br>
+; CHECK: FieldList (0x1000) {<br>
; CHECK-NEXT: TypeLeafKind: LF_FIELDLIST (0x1203)<br>
; CHECK-NEXT: Enumerator {<br>
; CHECK-NEXT: AccessSpecifier: Public (0x3)<br>
@@ -19,7 +19,7 @@<br>
; CHECK-NEXT: Properties [ (0x0)<br>
; CHECK-NEXT: ]<br>
; CHECK-NEXT: UnderlyingType: int (0x74)<br>
-; CHECK-NEXT: FieldListType: BLAH (0x1000)<br>
+; CHECK-NEXT: FieldListType: <field list> (0x1000)<br>
; CHECK-NEXT: Name: E<br>
; CHECK-NEXT: }<br>
<br>
<br>
Modified: llvm/trunk/test/DebugInfo/COFF/types-data-members.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/COFF/types-data-members.ll?rev=273294&r1=273293&r2=273294&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/COFF/types-data-members.ll?rev=273294&r1=273293&r2=273294&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/DebugInfo/COFF/types-data-members.ll (original)<br>
+++ llvm/trunk/test/DebugInfo/COFF/types-data-members.ll Tue Jun 21 13:33:01 2016<br>
@@ -81,7 +81,7 @@<br>
; CHECK: Const (0x1)<br>
; CHECK: ]<br>
; CHECK: }<br>
-; CHECK: UnknownLeaf (0x1005) {<br>
+; CHECK: FieldList (0x1005) {<br>
; CHECK: TypeLeafKind: LF_FIELDLIST (0x1203)<br>
; CHECK: DataMember {<br>
; CHECK: AccessSpecifier: Public (0x3)<br>
@@ -113,7 +113,7 @@<br>
; CHECK: Properties [ (0x200)<br>
; CHECK: HasUniqueName (0x200)<br>
; CHECK: ]<br>
-; CHECK: FieldList: sdm (0x1005)<br>
+; CHECK: FieldList: <field list> (0x1005)<br>
; CHECK: DerivedFrom: 0x0<br>
; CHECK: VShape: 0x0<br>
; CHECK: SizeOf: 12<br>
@@ -132,7 +132,7 @@<br>
; CHECK: Name: Union<br>
; CHECK: LinkageName: .?ATUnion@@<br>
; CHECK: }<br>
-; CHECK: UnknownLeaf (0x1008) {<br>
+; CHECK: FieldList (0x1008) {<br>
; CHECK: TypeLeafKind: LF_FIELDLIST (0x1203)<br>
; CHECK: DataMember {<br>
; CHECK: AccessSpecifier: Public (0x3)<br>
@@ -153,7 +153,7 @@<br>
; CHECK: Properties [ (0x200)<br>
; CHECK: HasUniqueName (0x200)<br>
; CHECK: ]<br>
-; CHECK: FieldList: b (0x1008)<br>
+; CHECK: FieldList: <field list> (0x1008)<br>
; CHECK: SizeOf: 4<br>
; CHECK: Name: Union<br>
; CHECK: LinkageName: .?ATUnion@@<br>
@@ -171,7 +171,7 @@<br>
; CHECK: SizeOf: 0<br>
; CHECK: Name: Class<br>
; CHECK: }<br>
-; CHECK: UnknownLeaf (0x100B) {<br>
+; CHECK: FieldList (0x100B) {<br>
; CHECK: TypeLeafKind: LF_FIELDLIST (0x1203)<br>
; CHECK: DataMember {<br>
; CHECK: AccessSpecifier: Public (0x3)<br>
@@ -198,7 +198,7 @@<br>
; CHECK: Properties [ (0x200)<br>
; CHECK: HasUniqueName (0x200)<br>
; CHECK: ]<br>
-; CHECK: FieldList: prot (0x100B)<br>
+; CHECK: FieldList: <field list> (0x100B)<br>
; CHECK: DerivedFrom: 0x0<br>
; CHECK: VShape: 0x0<br>
; CHECK: SizeOf: 12<br>
@@ -249,7 +249,7 @@<br>
; CHECK: IsVolatile: 0<br>
; CHECK: IsUnaligned: 0<br>
; CHECK: }<br>
-; CHECK: UnknownLeaf (0x1011) {<br>
+; CHECK: FieldList (0x1011) {<br>
; CHECK: TypeLeafKind: LF_FIELDLIST (0x1203)<br>
; CHECK: DataMember {<br>
; CHECK: AccessSpecifier: Public (0x3)<br>
@@ -270,7 +270,7 @@<br>
; CHECK: Properties [ (0x200)<br>
; CHECK: HasUniqueName (0x200)<br>
; CHECK: ]<br>
-; CHECK: FieldList: d (0x1011)<br>
+; CHECK: FieldList: <field list> (0x1011)<br>
; CHECK: DerivedFrom: 0x0<br>
; CHECK: VShape: 0x0<br>
; CHECK: SizeOf: 48<br>
@@ -291,7 +291,7 @@<br>
; CHECK: Name: Nested<br>
; CHECK: LinkageName: .?AUNested@Class@@<br>
; CHECK: }<br>
-; CHECK: UnknownLeaf (0x1014) {<br>
+; CHECK: FieldList (0x1014) {<br>
; CHECK: TypeLeafKind: LF_FIELDLIST (0x1203)<br>
; CHECK: DataMember {<br>
; CHECK: AccessSpecifier: Public (0x3)<br>
@@ -306,7 +306,7 @@<br>
; CHECK: Properties [ (0x200)<br>
; CHECK: HasUniqueName (0x200)<br>
; CHECK: ]<br>
-; CHECK: FieldList: n (0x1014)<br>
+; CHECK: FieldList: <field list> (0x1014)<br>
; CHECK: DerivedFrom: 0x0<br>
; CHECK: VShape: 0x0<br>
; CHECK: SizeOf: 4<br>
<br>
Modified: llvm/trunk/test/DebugInfo/COFF/types-non-virtual-methods.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/COFF/types-non-virtual-methods.ll?rev=273294&r1=273293&r2=273294&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/COFF/types-non-virtual-methods.ll?rev=273294&r1=273293&r2=273294&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/DebugInfo/COFF/types-non-virtual-methods.ll (original)<br>
+++ llvm/trunk/test/DebugInfo/COFF/types-non-virtual-methods.ll Tue Jun 21 13:33:01 2016<br>
@@ -84,7 +84,7 @@<br>
; CHECK: ArgListType: () (0x1000)<br>
; CHECK: ThisAdjustment: 0<br>
; CHECK: }<br>
-; CHECK: UnknownLeaf (0x1006) {<br>
+; CHECK: FieldList (0x1006) {<br>
; CHECK: TypeLeafKind: LF_FIELDLIST (0x1203)<br>
; CHECK: OneMethod {<br>
; CHECK: AccessSpecifier: Public (0x3)<br>
@@ -112,7 +112,7 @@<br>
; CHECK: MemberCount: 4<br>
; CHECK: Properties [ (0x0)<br>
; CHECK: ]<br>
-; CHECK: FieldList: A::f_public (0x1006)<br>
+; CHECK: FieldList: <field list> (0x1006)<br>
; CHECK: DerivedFrom: 0x0<br>
; CHECK: VShape: 0x0<br>
; CHECK: SizeOf: 1<br>
@@ -202,7 +202,7 @@<br>
; CHECK: Type: void B::(int) (0x100E)<br>
; CHECK: ]<br>
; CHECK: }<br>
-; CHECK: UnknownLeaf (0x1010) {<br>
+; CHECK: FieldList (0x1010) {<br>
; CHECK: TypeLeafKind: LF_FIELDLIST (0x1203)<br>
; CHECK: OneMethod {<br>
; CHECK: AccessSpecifier: Private (0x1)<br>
@@ -220,7 +220,7 @@<br>
; CHECK: MemberCount: 3<br>
; CHECK: Properties [ (0x0)<br>
; CHECK: ]<br>
-; CHECK: FieldList: B::f (0x1010)<br>
+; CHECK: FieldList: <field list> (0x1010)<br>
; CHECK: DerivedFrom: 0x0<br>
; CHECK: VShape: 0x0<br>
; CHECK: SizeOf: 1<br>
<br>
Modified: llvm/trunk/test/DebugInfo/COFF/types-recursive-struct.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/COFF/types-recursive-struct.ll?rev=273294&r1=273293&r2=273294&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/COFF/types-recursive-struct.ll?rev=273294&r1=273293&r2=273294&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/DebugInfo/COFF/types-recursive-struct.ll (original)<br>
+++ llvm/trunk/test/DebugInfo/COFF/types-recursive-struct.ll Tue Jun 21 13:33:01 2016<br>
@@ -77,7 +77,7 @@<br>
; CHECK: IsVolatile: 0<br>
; CHECK: IsUnaligned: 0<br>
; CHECK: }<br>
-; CHECK: UnknownLeaf (0x1006) {<br>
+; CHECK: FieldList (0x1006) {<br>
; CHECK: TypeLeafKind: LF_FIELDLIST (0x1203)<br>
; CHECK: DataMember {<br>
; CHECK: AccessSpecifier: Public (0x3)<br>
@@ -91,13 +91,13 @@<br>
; CHECK: MemberCount: 1<br>
; CHECK: Properties [ (0x0)<br>
; CHECK: ]<br>
-; CHECK: FieldList: b (0x1006)<br>
+; CHECK: FieldList: <field list> (0x1006)<br>
; CHECK: DerivedFrom: 0x0<br>
; CHECK: VShape: 0x0<br>
; CHECK: SizeOf: 8<br>
; CHECK: Name: A<br>
; CHECK: }<br>
-; CHECK: UnknownLeaf (0x1008) {<br>
+; CHECK: FieldList (0x1008) {<br>
; CHECK: TypeLeafKind: LF_FIELDLIST (0x1203)<br>
; CHECK: DataMember {<br>
; CHECK: AccessSpecifier: Public (0x3)<br>
@@ -111,7 +111,7 @@<br>
; CHECK: MemberCount: 1<br>
; CHECK: Properties [ (0x0)<br>
; CHECK: ]<br>
-; CHECK: FieldList: a (0x1008)<br>
+; CHECK: FieldList: <field list> (0x1008)<br>
; CHECK: DerivedFrom: 0x0<br>
; CHECK: VShape: 0x0<br>
; CHECK: SizeOf: 8<br>
<br>
Modified: llvm/trunk/test/DebugInfo/PDB/pdbdump-headers.test<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/PDB/pdbdump-headers.test?rev=273294&r1=273293&r2=273294&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/PDB/pdbdump-headers.test?rev=273294&r1=273293&r2=273294&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/DebugInfo/PDB/pdbdump-headers.test (original)<br>
+++ llvm/trunk/test/DebugInfo/PDB/pdbdump-headers.test Tue Jun 21 13:33:01 2016<br>
@@ -105,7 +105,7 @@<br>
; EMPTY-NEXT: )<br>
; EMPTY-NEXT: }<br>
; EMPTY-NEXT: {<br>
-; EMPTY-NEXT: UnknownLeaf (0x1002) {<br>
+; EMPTY-NEXT: FieldList (0x1002) {<br>
; EMPTY-NEXT: TypeLeafKind: LF_FIELDLIST (0x1203)<br>
; EMPTY-NEXT: Enumerator {<br>
; EMPTY-NEXT: AccessSpecifier: Public (0x3)<br>
@@ -1112,7 +1112,7 @@<br>
; ALL: {<br>
; ALL: StringId (0x1058) {<br>
; ALL: TypeLeafKind: LF_STRING_ID (0x1605)<br>
-; ALL: Id: managed (0x100C)<br>
+; ALL: Id: <field list> (0x100C)<br>
; ALL: StringData: Kits\8.1\include\um" -I"C:\Program Files (x86)\Windows Kits\8.1\include\winrt" -TP -X<br>
; ALL: }<br>
; ALL: }<br>
@@ -1124,7 +1124,7 @@<br>
; ALL: ArgType: void __vc_attributes::threadingAttribute::(__vc_attributes::threadingAttribute::threading_e) (0x1007)<br>
; ALL: ArgType: void __vc_attributes::threadingAttribute::() (0x1008)<br>
; ALL: ArgType: 0x1009<br>
-; ALL: ArgType: value (0x100A)<br>
+; ALL: ArgType: <field list> (0x100A)<br>
; ALL: ArgType: __vc_attributes::event_receiverAttribute::type_e (0x100D)<br>
; ALL: ]<br>
; ALL: }<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div>