<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>