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