[lld] r321883 - [PDB] Correctly link S_FILESTATIC records.

Zachary Turner via llvm-commits llvm-commits at lists.llvm.org
Fri Jan 5 11:12:40 PST 2018


Author: zturner
Date: Fri Jan  5 11:12:40 2018
New Revision: 321883

URL: http://llvm.org/viewvc/llvm-project?rev=321883&view=rev
Log:
[PDB] Correctly link S_FILESTATIC records.

This is not a record type that clang currently generates,
but it is a record that is encountered in object files generated
by cl.  This record is unusual in that it refers directly to
the string table instead of indirectly to the string table via
the FileChecksums table.  Because of this, it was previously
overlooked and we weren't remapping the string indices at all.
This would lead to crashes in MSVC when trying to display a
variable whose debug info involved an S_FILESTATIC.

Original bug report by Alexander Ganea

Differential Revision: https://reviews.llvm.org/D41718

Added:
    lld/trunk/test/COFF/Inputs/pdb-file-statics-a.yaml
    lld/trunk/test/COFF/Inputs/pdb-file-statics-b.yaml
    lld/trunk/test/COFF/pdb-file-static.test
Modified:
    lld/trunk/COFF/PDB.cpp
    lld/trunk/test/COFF/pdb-source-lines.test

Modified: lld/trunk/COFF/PDB.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/PDB.cpp?rev=321883&r1=321882&r2=321883&view=diff
==============================================================================
--- lld/trunk/COFF/PDB.cpp (original)
+++ lld/trunk/COFF/PDB.cpp Fri Jan  5 11:12:40 2018
@@ -47,6 +47,7 @@
 #include "llvm/Object/COFF.h"
 #include "llvm/Support/BinaryByteStream.h"
 #include "llvm/Support/Endian.h"
+#include "llvm/Support/FormatVariadic.h"
 #include "llvm/Support/JamCRC.h"
 #include "llvm/Support/Path.h"
 #include "llvm/Support/ScopedPrinter.h"
@@ -412,6 +413,36 @@ static void remapTypesInSymbolRecord(Obj
   }
 }
 
+static void
+recordStringTableReferenceAtOffset(MutableArrayRef<uint8_t> Contents,
+                                   uint32_t Offset,
+                                   std::vector<ulittle32_t *> &StrTableRefs) {
+  Contents =
+      Contents.drop_front(Offset).take_front(sizeof(support::ulittle32_t));
+  ulittle32_t *Index = reinterpret_cast<ulittle32_t *>(Contents.data());
+  StrTableRefs.push_back(Index);
+}
+
+static void
+recordStringTableReferences(SymbolKind Kind, MutableArrayRef<uint8_t> Contents,
+                            std::vector<ulittle32_t *> &StrTableRefs) {
+  // For now we only handle S_FILESTATIC, but we may need the same logic for
+  // S_DEFRANGE and S_DEFRANGE_SUBFIELD.  However, I cannot seem to generate any
+  // PDBs that contain these types of records, so because of the uncertainty
+  // they are omitted here until we can prove that it's necessary.
+  switch (Kind) {
+  case SymbolKind::S_FILESTATIC:
+    // FileStaticSym::ModFileOffset
+    recordStringTableReferenceAtOffset(Contents, 4, StrTableRefs);
+    break;
+  case SymbolKind::S_DEFRANGE:
+  case SymbolKind::S_DEFRANGE_SUBFIELD:
+    log("Not fixing up string table reference in S_DEFRANGE / "
+        "S_DEFRANGE_SUBFIELD record");
+    break;
+  }
+}
+
 static SymbolKind symbolKind(ArrayRef<uint8_t> RecordData) {
   const RecordPrefix *Prefix =
       reinterpret_cast<const RecordPrefix *>(RecordData.data());
@@ -628,6 +659,7 @@ static void mergeSymbolRecords(BumpPtrAl
                                pdb::GSIStreamBuilder &GsiBuilder,
                                const CVIndexMap &IndexMap,
                                TypeCollection &IDTable,
+                               std::vector<ulittle32_t *> &StringTableRefs,
                                BinaryStreamRef SymData) {
   // FIXME: Improve error recovery by warning and skipping records when
   // possible.
@@ -656,6 +688,10 @@ static void mergeSymbolRecords(BumpPtrAl
     // "real" symbols in a PDB.
     translateIdSymbols(NewData, IDTable);
 
+    // If this record refers to an offset in the object file's string table,
+    // add that item to the global PDB string table and re-write the index.
+    recordStringTableReferences(Sym.kind(), Contents, StringTableRefs);
+
     SymbolKind NewKind = symbolKind(NewData);
 
     // Fill in "Parent" and "End" fields by maintaining a stack of scopes.
@@ -710,6 +746,9 @@ void PDBLinker::addObjFile(ObjFile *File
   const CVIndexMap &IndexMap = mergeDebugT(File, ObjectIndexMap);
 
   // Now do all live .debug$S sections.
+  DebugStringTableSubsectionRef CVStrTab;
+  DebugChecksumsSubsectionRef Checksums;
+  std::vector<ulittle32_t *> StringTableReferences;
   for (SectionChunk *DebugChunk : File->getDebugChunks()) {
     if (!DebugChunk->isLive() || DebugChunk->getSectionName() != ".debug$S")
       continue;
@@ -723,14 +762,20 @@ void PDBLinker::addObjFile(ObjFile *File
     BinaryStreamReader Reader(RelocatedDebugContents, support::little);
     ExitOnErr(Reader.readArray(Subsections, RelocatedDebugContents.size()));
 
-    DebugStringTableSubsectionRef CVStrTab;
-    DebugChecksumsSubsectionRef Checksums;
     for (const DebugSubsectionRecord &SS : Subsections) {
       switch (SS.kind()) {
-      case DebugSubsectionKind::StringTable:
+      case DebugSubsectionKind::StringTable: {
+        auto Data = SS.getRecordData();
+        ArrayRef<uint8_t> Buffer;
+        cantFail(Data.readLongestContiguousChunk(0, Buffer));
+        assert(!CVStrTab.valid() &&
+               "Encountered multiple string table subsections!");
         ExitOnErr(CVStrTab.initialize(SS.getRecordData()));
         break;
+      }
       case DebugSubsectionKind::FileChecksums:
+        assert(!Checksums.valid() &&
+               "Encountered multiple checksum subsections!");
         ExitOnErr(Checksums.initialize(SS.getRecordData()));
         break;
       case DebugSubsectionKind::Lines:
@@ -741,10 +786,12 @@ void PDBLinker::addObjFile(ObjFile *File
       case DebugSubsectionKind::Symbols:
         if (Config->DebugGHashes) {
           mergeSymbolRecords(Alloc, File, Builder.getGsiBuilder(), IndexMap,
-                             GlobalIDTable, SS.getRecordData());
+                             GlobalIDTable, StringTableReferences,
+                             SS.getRecordData());
         } else {
           mergeSymbolRecords(Alloc, File, Builder.getGsiBuilder(), IndexMap,
-                             IDTable, SS.getRecordData());
+                             IDTable, StringTableReferences,
+                             SS.getRecordData());
         }
         break;
       default:
@@ -752,25 +799,47 @@ void PDBLinker::addObjFile(ObjFile *File
         break;
       }
     }
+  }
 
-    if (Checksums.valid()) {
-      // Make a new file checksum table that refers to offsets in the PDB-wide
-      // string table. Generally the string table subsection appears after the
-      // checksum table, so we have to do this after looping over all the
-      // subsections.
-      if (!CVStrTab.valid())
-        fatal(".debug$S sections must have both a string table subsection "
-              "and a checksum subsection table or neither");
-      auto NewChecksums = make_unique<DebugChecksumsSubsection>(PDBStrTab);
-      for (FileChecksumEntry &FC : Checksums) {
-        StringRef FileName = ExitOnErr(CVStrTab.getString(FC.FileNameOffset));
-        ExitOnErr(Builder.getDbiBuilder().addModuleSourceFile(*File->ModuleDBI,
-                                                              FileName));
-        NewChecksums->addChecksum(FileName, FC.Kind, FC.Checksum);
-      }
-      File->ModuleDBI->addDebugSubsection(std::move(NewChecksums));
+  // We should have seen all debug subsections across the entire object file now
+  // which means that if a StringTable subsection and Checksums subsection were
+  // present, now is the time to handle them.
+  if (!CVStrTab.valid()) {
+    if (Checksums.valid())
+      fatal(".debug$S sections with a checksums subsection must also contain a "
+            "string table subsection");
+
+    if (!StringTableReferences.empty())
+      warn("No StringTable subsection was encountered, but there are string "
+           "table references");
+    return;
+  }
+
+  // Rewrite each string table reference based on the value that the string
+  // assumes in the final PDB.
+  for (ulittle32_t *Ref : StringTableReferences) {
+    auto ExpectedString = CVStrTab.getString(*Ref);
+    if (!ExpectedString) {
+      warn("Invalid string table reference");
+      consumeError(ExpectedString.takeError());
+      continue;
     }
+
+    *Ref = PDBStrTab.insert(*ExpectedString);
+  }
+
+  // Make a new file checksum table that refers to offsets in the PDB-wide
+  // string table. Generally the string table subsection appears after the
+  // checksum table, so we have to do this after looping over all the
+  // subsections.
+  auto NewChecksums = make_unique<DebugChecksumsSubsection>(PDBStrTab);
+  for (FileChecksumEntry &FC : Checksums) {
+    StringRef FileName = ExitOnErr(CVStrTab.getString(FC.FileNameOffset));
+    ExitOnErr(Builder.getDbiBuilder().addModuleSourceFile(*File->ModuleDBI,
+                                                          FileName));
+    NewChecksums->addChecksum(FileName, FC.Kind, FC.Checksum);
   }
+  File->ModuleDBI->addDebugSubsection(std::move(NewChecksums));
 }
 
 static PublicSym32 createPublic(Defined *Def) {

Added: lld/trunk/test/COFF/Inputs/pdb-file-statics-a.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/Inputs/pdb-file-statics-a.yaml?rev=321883&view=auto
==============================================================================
--- lld/trunk/test/COFF/Inputs/pdb-file-statics-a.yaml (added)
+++ lld/trunk/test/COFF/Inputs/pdb-file-statics-a.yaml Fri Jan  5 11:12:40 2018
@@ -0,0 +1,1812 @@
+--- !COFF
+header:
+  Machine:         IMAGE_FILE_MACHINE_AMD64
+  Characteristics: [  ]
+sections:
+  - Name:            .drectve
+    Characteristics: [ IMAGE_SCN_LNK_INFO, IMAGE_SCN_LNK_REMOVE ]
+    Alignment:       1
+    SectionData:     2020202F44454641554C544C49423A224C4942434D5422202F44454641554C544C49423A224F4C444E414D45532220
+  - Name:            '.debug$S'
+    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
+    Alignment:       1
+    Subsections:
+      - !Symbols
+        Records:
+          - Kind:            S_OBJNAME
+            ObjNameSym:
+              Signature:       0
+              ObjectName:      'D:\src\llvmbuild\cl\Debug\x64\a.obj'
+          - Kind:            S_COMPILE3
+            Compile3Sym:
+              Flags:           [ SecurityChecks, HotPatch ]
+              Machine:         X64
+              FrontendMajor:   19
+              FrontendMinor:   11
+              FrontendBuild:   25547
+              FrontendQFE:     0
+              BackendMajor:    19
+              BackendMinor:    11
+              BackendBuild:    25547
+              BackendQFE:      0
+              Version:         'Microsoft (R) Optimizing Compiler'
+      - !Symbols
+        Records:
+          - Kind:            S_LDATA32
+            DataSym:
+              Type:            116
+              DisplayName:     x
+          - Kind:            S_UDT
+            UDTSym:
+              Type:            4193
+              UDTName:         '__vc_attributes::event_sourceAttribute'
+          - Kind:            S_UDT
+            UDTSym:
+              Type:            4185
+              UDTName:         '__vc_attributes::event_sourceAttribute::optimize_e'
+          - Kind:            S_UDT
+            UDTSym:
+              Type:            4182
+              UDTName:         '__vc_attributes::event_sourceAttribute::type_e'
+          - Kind:            S_UDT
+            UDTSym:
+              Type:            4178
+              UDTName:         '__vc_attributes::helper_attributes::v1_alttypeAttribute'
+          - Kind:            S_UDT
+            UDTSym:
+              Type:            4172
+              UDTName:         '__vc_attributes::helper_attributes::v1_alttypeAttribute::type_e'
+          - Kind:            S_UDT
+            UDTSym:
+              Type:            4168
+              UDTName:         '__vc_attributes::helper_attributes::usageAttribute'
+          - Kind:            S_UDT
+            UDTSym:
+              Type:            4162
+              UDTName:         '__vc_attributes::helper_attributes::usageAttribute::usage_e'
+          - Kind:            S_UDT
+            UDTSym:
+              Type:            4158
+              UDTName:         '__vc_attributes::threadingAttribute'
+          - Kind:            S_UDT
+            UDTSym:
+              Type:            4150
+              UDTName:         '__vc_attributes::threadingAttribute::threading_e'
+          - Kind:            S_UDT
+            UDTSym:
+              Type:            4146
+              UDTName:         '__vc_attributes::aggregatableAttribute'
+          - Kind:            S_UDT
+            UDTSym:
+              Type:            4138
+              UDTName:         '__vc_attributes::aggregatableAttribute::type_e'
+          - Kind:            S_UDT
+            UDTSym:
+              Type:            4134
+              UDTName:         '__vc_attributes::event_receiverAttribute'
+          - Kind:            S_UDT
+            UDTSym:
+              Type:            4124
+              UDTName:         '__vc_attributes::event_receiverAttribute::type_e'
+          - Kind:            S_UDT
+            UDTSym:
+              Type:            4120
+              UDTName:         '__vc_attributes::moduleAttribute'
+          - Kind:            S_UDT
+            UDTSym:
+              Type:            4106
+              UDTName:         '__vc_attributes::moduleAttribute::type_e'
+      - !FileChecksums
+        Checksums:
+          - FileName:        'd:\src\llvmbuild\cl\debug\x64\a.cpp'
+            Kind:            MD5
+            Checksum:        108D915B38B79821EA2169DBD317C259
+      - !InlineeLines
+        HasExtraFiles:   false
+        Sites:
+          - FileName:        'd:\src\llvmbuild\cl\debug\x64\a.cpp'
+            LineNum:         6
+            Inlinee:         4099
+      - !StringTable
+        Strings:
+          - 'd:\src\llvmbuild\cl\debug\x64\a.cpp'
+          - 'D:\src\llvmbuild\cl\Debug\x64\a.obj'
+      - !Symbols
+        Records:
+          - Kind:            S_BUILDINFO
+            BuildInfoSym:
+              BuildId:         4203
+    Relocations:
+      - VirtualAddress:  132
+        SymbolName:      '?x@@3HA'
+        Type:            IMAGE_REL_AMD64_SECREL
+      - VirtualAddress:  136
+        SymbolName:      '?x@@3HA'
+        Type:            IMAGE_REL_AMD64_SECTION
+  - Name:            '.debug$T'
+    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
+    Alignment:       1
+    Types:
+      - Kind:            LF_ARGLIST
+        ArgList:
+          ArgIndices:      [ 116 ]
+      - Kind:            LF_PROCEDURE
+        Procedure:
+          ReturnType:      3
+          CallConv:        NearC
+          Options:         [ None ]
+          ParameterCount:  1
+          ArgumentList:    4096
+      - Kind:            LF_POINTER
+        Pointer:
+          ReferentType:    1648
+          Attrs:           65548
+      - Kind:            LF_FUNC_ID
+        FuncId:
+          ParentScope:     0
+          FunctionType:    4097
+          Name:            a
+      - Kind:            LF_ARGLIST
+        ArgList:
+          ArgIndices:      [ 116, 4098 ]
+      - Kind:            LF_PROCEDURE
+        Procedure:
+          ReturnType:      116
+          CallConv:        NearC
+          Options:         [ None ]
+          ParameterCount:  2
+          ArgumentList:    4100
+      - Kind:            LF_FUNC_ID
+        FuncId:
+          ParentScope:     0
+          FunctionType:    4101
+          Name:            main
+      - Kind:            LF_FUNC_ID
+        FuncId:
+          ParentScope:     0
+          FunctionType:    4097
+          Name:            b
+      - Kind:            LF_STRUCTURE
+        Class:
+          MemberCount:     0
+          Options:         [ None, ForwardReference, HasUniqueName ]
+          FieldList:       0
+          Name:            '__vc_attributes::moduleAttribute'
+          UniqueName:      '.?AUmoduleAttribute at __vc_attributes@@'
+          DerivationList:  0
+          VTableShape:     0
+          Size:            0
+      - Kind:            LF_FIELDLIST
+        FieldList:
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           1
+              Name:            dll
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           2
+              Name:            exe
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           3
+              Name:            service
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           4
+              Name:            unspecified
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           2
+              Name:            EXE
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           3
+              Name:            SERVICE
+      - Kind:            LF_ENUM
+        Enum:
+          NumEnumerators:  6
+          Options:         [ None, Nested, HasUniqueName ]
+          FieldList:       4105
+          Name:            '__vc_attributes::moduleAttribute::type_e'
+          UniqueName:      '.?AW4type_e at moduleAttribute@__vc_attributes@@'
+          UnderlyingType:  116
+      - Kind:            LF_STRING_ID
+        StringId:
+          Id:              0
+          String:          'd:\src\llvmbuild\cl\debug\x64\predefined c++ attributes (compiler internal)'
+      - Kind:            LF_UDT_SRC_LINE
+        UdtSourceLine:
+          UDT:             4106
+          SourceFile:      4107
+          LineNumber:      482
+      - Kind:            LF_MODIFIER
+        Modifier:
+          ModifiedType:    112
+          Modifiers:       [ None, Const ]
+      - Kind:            LF_POINTER
+        Pointer:
+          ReferentType:    4109
+          Attrs:           65548
+      - Kind:            LF_ARGLIST
+        ArgList:
+          ArgIndices:      [ 4106, 4110, 4110, 4110, 116, 48, 4110, 116,
+                             4110, 4110, 116, 48, 48, 4110, 4110 ]
+      - Kind:            LF_POINTER
+        Pointer:
+          ReferentType:    4104
+          Attrs:           66572
+      - Kind:            LF_MFUNCTION
+        MemberFunction:
+          ReturnType:      3
+          ClassType:       4104
+          ThisType:        4112
+          CallConv:        NearC
+          Options:         [ None, Constructor ]
+          ParameterCount:  15
+          ArgumentList:    4111
+          ThisPointerAdjustment: 0
+      - Kind:            LF_ARGLIST
+        ArgList:
+          ArgIndices:      [ 4106 ]
+      - Kind:            LF_MFUNCTION
+        MemberFunction:
+          ReturnType:      3
+          ClassType:       4104
+          ThisType:        4112
+          CallConv:        NearC
+          Options:         [ None, Constructor ]
+          ParameterCount:  1
+          ArgumentList:    4114
+          ThisPointerAdjustment: 0
+      - Kind:            LF_ARGLIST
+        ArgList:
+          ArgIndices:      [  ]
+      - Kind:            LF_MFUNCTION
+        MemberFunction:
+          ReturnType:      3
+          ClassType:       4104
+          ThisType:        4112
+          CallConv:        NearC
+          Options:         [ None, Constructor ]
+          ParameterCount:  0
+          ArgumentList:    4116
+          ThisPointerAdjustment: 0
+      - Kind:            LF_METHODLIST
+        MethodOverloadList:
+          Methods:
+            - Type:            4113
+              Attrs:           3
+              VFTableOffset:   -1
+              Name:            ''
+            - Type:            4115
+              Attrs:           3
+              VFTableOffset:   -1
+              Name:            ''
+            - Type:            4117
+              Attrs:           3
+              VFTableOffset:   -1
+              Name:            ''
+      - Kind:            LF_FIELDLIST
+        FieldList:
+          - Kind:            LF_NESTTYPE
+            NestedType:
+              Type:            4106
+              Name:            type_e
+          - Kind:            LF_METHOD
+            OverloadedMethod:
+              NumOverloads:    3
+              MethodList:      4118
+              Name:            moduleAttribute
+          - Kind:            LF_MEMBER
+            DataMember:
+              Attrs:           3
+              Type:            4106
+              FieldOffset:     0
+              Name:            type
+          - Kind:            LF_MEMBER
+            DataMember:
+              Attrs:           3
+              Type:            4110
+              FieldOffset:     8
+              Name:            name
+          - Kind:            LF_MEMBER
+            DataMember:
+              Attrs:           3
+              Type:            4110
+              FieldOffset:     16
+              Name:            version
+          - Kind:            LF_MEMBER
+            DataMember:
+              Attrs:           3
+              Type:            4110
+              FieldOffset:     24
+              Name:            uuid
+          - Kind:            LF_MEMBER
+            DataMember:
+              Attrs:           3
+              Type:            116
+              FieldOffset:     32
+              Name:            lcid
+          - Kind:            LF_MEMBER
+            DataMember:
+              Attrs:           3
+              Type:            48
+              FieldOffset:     36
+              Name:            control
+          - Kind:            LF_MEMBER
+            DataMember:
+              Attrs:           3
+              Type:            4110
+              FieldOffset:     40
+              Name:            helpstring
+          - Kind:            LF_MEMBER
+            DataMember:
+              Attrs:           3
+              Type:            116
+              FieldOffset:     48
+              Name:            helpstringcontext
+          - Kind:            LF_MEMBER
+            DataMember:
+              Attrs:           3
+              Type:            4110
+              FieldOffset:     56
+              Name:            helpstringdll
+          - Kind:            LF_MEMBER
+            DataMember:
+              Attrs:           3
+              Type:            4110
+              FieldOffset:     64
+              Name:            helpfile
+          - Kind:            LF_MEMBER
+            DataMember:
+              Attrs:           3
+              Type:            116
+              FieldOffset:     72
+              Name:            helpcontext
+          - Kind:            LF_MEMBER
+            DataMember:
+              Attrs:           3
+              Type:            48
+              FieldOffset:     76
+              Name:            hidden
+          - Kind:            LF_MEMBER
+            DataMember:
+              Attrs:           3
+              Type:            48
+              FieldOffset:     77
+              Name:            restricted
+          - Kind:            LF_MEMBER
+            DataMember:
+              Attrs:           3
+              Type:            4110
+              FieldOffset:     80
+              Name:            custom
+          - Kind:            LF_MEMBER
+            DataMember:
+              Attrs:           3
+              Type:            4110
+              FieldOffset:     88
+              Name:            resource_name
+      - Kind:            LF_STRUCTURE
+        Class:
+          MemberCount:     19
+          Options:         [ None, HasConstructorOrDestructor, ContainsNestedClass, HasUniqueName ]
+          FieldList:       4119
+          Name:            '__vc_attributes::moduleAttribute'
+          UniqueName:      '.?AUmoduleAttribute at __vc_attributes@@'
+          DerivationList:  0
+          VTableShape:     0
+          Size:            96
+      - Kind:            LF_UDT_SRC_LINE
+        UdtSourceLine:
+          UDT:             4120
+          SourceFile:      4107
+          LineNumber:      481
+      - Kind:            LF_STRUCTURE
+        Class:
+          MemberCount:     0
+          Options:         [ None, ForwardReference, HasUniqueName ]
+          FieldList:       0
+          Name:            '__vc_attributes::event_receiverAttribute'
+          UniqueName:      '.?AUevent_receiverAttribute at __vc_attributes@@'
+          DerivationList:  0
+          VTableShape:     0
+          Size:            0
+      - Kind:            LF_FIELDLIST
+        FieldList:
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           0
+              Name:            native
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           1
+              Name:            com
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           2
+              Name:            managed
+      - Kind:            LF_ENUM
+        Enum:
+          NumEnumerators:  3
+          Options:         [ None, Nested, HasUniqueName ]
+          FieldList:       4123
+          Name:            '__vc_attributes::event_receiverAttribute::type_e'
+          UniqueName:      '.?AW4type_e at event_receiverAttribute@__vc_attributes@@'
+          UnderlyingType:  116
+      - Kind:            LF_UDT_SRC_LINE
+        UdtSourceLine:
+          UDT:             4124
+          SourceFile:      4107
+          LineNumber:      136
+      - Kind:            LF_ARGLIST
+        ArgList:
+          ArgIndices:      [ 4124, 48 ]
+      - Kind:            LF_POINTER
+        Pointer:
+          ReferentType:    4122
+          Attrs:           66572
+      - Kind:            LF_MFUNCTION
+        MemberFunction:
+          ReturnType:      3
+          ClassType:       4122
+          ThisType:        4127
+          CallConv:        NearC
+          Options:         [ None, Constructor ]
+          ParameterCount:  2
+          ArgumentList:    4126
+          ThisPointerAdjustment: 0
+      - Kind:            LF_ARGLIST
+        ArgList:
+          ArgIndices:      [ 4124 ]
+      - Kind:            LF_MFUNCTION
+        MemberFunction:
+          ReturnType:      3
+          ClassType:       4122
+          ThisType:        4127
+          CallConv:        NearC
+          Options:         [ None, Constructor ]
+          ParameterCount:  1
+          ArgumentList:    4129
+          ThisPointerAdjustment: 0
+      - Kind:            LF_MFUNCTION
+        MemberFunction:
+          ReturnType:      3
+          ClassType:       4122
+          ThisType:        4127
+          CallConv:        NearC
+          Options:         [ None, Constructor ]
+          ParameterCount:  0
+          ArgumentList:    4116
+          ThisPointerAdjustment: 0
+      - Kind:            LF_METHODLIST
+        MethodOverloadList:
+          Methods:
+            - Type:            4128
+              Attrs:           3
+              VFTableOffset:   -1
+              Name:            ''
+            - Type:            4130
+              Attrs:           3
+              VFTableOffset:   -1
+              Name:            ''
+            - Type:            4131
+              Attrs:           3
+              VFTableOffset:   -1
+              Name:            ''
+      - Kind:            LF_FIELDLIST
+        FieldList:
+          - Kind:            LF_NESTTYPE
+            NestedType:
+              Type:            4124
+              Name:            type_e
+          - Kind:            LF_METHOD
+            OverloadedMethod:
+              NumOverloads:    3
+              MethodList:      4132
+              Name:            event_receiverAttribute
+          - Kind:            LF_MEMBER
+            DataMember:
+              Attrs:           3
+              Type:            4124
+              FieldOffset:     0
+              Name:            type
+          - Kind:            LF_MEMBER
+            DataMember:
+              Attrs:           3
+              Type:            48
+              FieldOffset:     4
+              Name:            layout_dependent
+      - Kind:            LF_STRUCTURE
+        Class:
+          MemberCount:     6
+          Options:         [ None, HasConstructorOrDestructor, ContainsNestedClass, HasUniqueName ]
+          FieldList:       4133
+          Name:            '__vc_attributes::event_receiverAttribute'
+          UniqueName:      '.?AUevent_receiverAttribute at __vc_attributes@@'
+          DerivationList:  0
+          VTableShape:     0
+          Size:            8
+      - Kind:            LF_UDT_SRC_LINE
+        UdtSourceLine:
+          UDT:             4134
+          SourceFile:      4107
+          LineNumber:      135
+      - Kind:            LF_STRUCTURE
+        Class:
+          MemberCount:     0
+          Options:         [ None, ForwardReference, HasUniqueName ]
+          FieldList:       0
+          Name:            '__vc_attributes::aggregatableAttribute'
+          UniqueName:      '.?AUaggregatableAttribute at __vc_attributes@@'
+          DerivationList:  0
+          VTableShape:     0
+          Size:            0
+      - Kind:            LF_FIELDLIST
+        FieldList:
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           0
+              Name:            never
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           1
+              Name:            allowed
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           2
+              Name:            always
+      - Kind:            LF_ENUM
+        Enum:
+          NumEnumerators:  3
+          Options:         [ None, Nested, HasUniqueName ]
+          FieldList:       4137
+          Name:            '__vc_attributes::aggregatableAttribute::type_e'
+          UniqueName:      '.?AW4type_e at aggregatableAttribute@__vc_attributes@@'
+          UnderlyingType:  116
+      - Kind:            LF_UDT_SRC_LINE
+        UdtSourceLine:
+          UDT:             4138
+          SourceFile:      4107
+          LineNumber:      545
+      - Kind:            LF_ARGLIST
+        ArgList:
+          ArgIndices:      [ 4138 ]
+      - Kind:            LF_POINTER
+        Pointer:
+          ReferentType:    4136
+          Attrs:           66572
+      - Kind:            LF_MFUNCTION
+        MemberFunction:
+          ReturnType:      3
+          ClassType:       4136
+          ThisType:        4141
+          CallConv:        NearC
+          Options:         [ None, Constructor ]
+          ParameterCount:  1
+          ArgumentList:    4140
+          ThisPointerAdjustment: 0
+      - Kind:            LF_MFUNCTION
+        MemberFunction:
+          ReturnType:      3
+          ClassType:       4136
+          ThisType:        4141
+          CallConv:        NearC
+          Options:         [ None, Constructor ]
+          ParameterCount:  0
+          ArgumentList:    4116
+          ThisPointerAdjustment: 0
+      - Kind:            LF_METHODLIST
+        MethodOverloadList:
+          Methods:
+            - Type:            4142
+              Attrs:           3
+              VFTableOffset:   -1
+              Name:            ''
+            - Type:            4143
+              Attrs:           3
+              VFTableOffset:   -1
+              Name:            ''
+      - Kind:            LF_FIELDLIST
+        FieldList:
+          - Kind:            LF_NESTTYPE
+            NestedType:
+              Type:            4138
+              Name:            type_e
+          - Kind:            LF_METHOD
+            OverloadedMethod:
+              NumOverloads:    2
+              MethodList:      4144
+              Name:            aggregatableAttribute
+          - Kind:            LF_MEMBER
+            DataMember:
+              Attrs:           3
+              Type:            4138
+              FieldOffset:     0
+              Name:            type
+      - Kind:            LF_STRUCTURE
+        Class:
+          MemberCount:     4
+          Options:         [ None, HasConstructorOrDestructor, ContainsNestedClass, HasUniqueName ]
+          FieldList:       4145
+          Name:            '__vc_attributes::aggregatableAttribute'
+          UniqueName:      '.?AUaggregatableAttribute at __vc_attributes@@'
+          DerivationList:  0
+          VTableShape:     0
+          Size:            4
+      - Kind:            LF_UDT_SRC_LINE
+        UdtSourceLine:
+          UDT:             4146
+          SourceFile:      4107
+          LineNumber:      544
+      - Kind:            LF_STRUCTURE
+        Class:
+          MemberCount:     0
+          Options:         [ None, ForwardReference, HasUniqueName ]
+          FieldList:       0
+          Name:            '__vc_attributes::threadingAttribute'
+          UniqueName:      '.?AUthreadingAttribute at __vc_attributes@@'
+          DerivationList:  0
+          VTableShape:     0
+          Size:            0
+      - Kind:            LF_FIELDLIST
+        FieldList:
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           1
+              Name:            apartment
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           2
+              Name:            single
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           3
+              Name:            free
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           4
+              Name:            neutral
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           5
+              Name:            both
+      - Kind:            LF_ENUM
+        Enum:
+          NumEnumerators:  5
+          Options:         [ None, Nested, HasUniqueName ]
+          FieldList:       4149
+          Name:            '__vc_attributes::threadingAttribute::threading_e'
+          UniqueName:      '.?AW4threading_e at threadingAttribute@__vc_attributes@@'
+          UnderlyingType:  116
+      - Kind:            LF_UDT_SRC_LINE
+        UdtSourceLine:
+          UDT:             4150
+          SourceFile:      4107
+          LineNumber:      423
+      - Kind:            LF_ARGLIST
+        ArgList:
+          ArgIndices:      [ 4150 ]
+      - Kind:            LF_POINTER
+        Pointer:
+          ReferentType:    4148
+          Attrs:           66572
+      - Kind:            LF_MFUNCTION
+        MemberFunction:
+          ReturnType:      3
+          ClassType:       4148
+          ThisType:        4153
+          CallConv:        NearC
+          Options:         [ None, Constructor ]
+          ParameterCount:  1
+          ArgumentList:    4152
+          ThisPointerAdjustment: 0
+      - Kind:            LF_MFUNCTION
+        MemberFunction:
+          ReturnType:      3
+          ClassType:       4148
+          ThisType:        4153
+          CallConv:        NearC
+          Options:         [ None, Constructor ]
+          ParameterCount:  0
+          ArgumentList:    4116
+          ThisPointerAdjustment: 0
+      - Kind:            LF_METHODLIST
+        MethodOverloadList:
+          Methods:
+            - Type:            4154
+              Attrs:           3
+              VFTableOffset:   -1
+              Name:            ''
+            - Type:            4155
+              Attrs:           3
+              VFTableOffset:   -1
+              Name:            ''
+      - Kind:            LF_FIELDLIST
+        FieldList:
+          - Kind:            LF_NESTTYPE
+            NestedType:
+              Type:            4150
+              Name:            threading_e
+          - Kind:            LF_METHOD
+            OverloadedMethod:
+              NumOverloads:    2
+              MethodList:      4156
+              Name:            threadingAttribute
+          - Kind:            LF_MEMBER
+            DataMember:
+              Attrs:           3
+              Type:            4150
+              FieldOffset:     0
+              Name:            value
+      - Kind:            LF_STRUCTURE
+        Class:
+          MemberCount:     4
+          Options:         [ None, HasConstructorOrDestructor, ContainsNestedClass, HasUniqueName ]
+          FieldList:       4157
+          Name:            '__vc_attributes::threadingAttribute'
+          UniqueName:      '.?AUthreadingAttribute at __vc_attributes@@'
+          DerivationList:  0
+          VTableShape:     0
+          Size:            4
+      - Kind:            LF_UDT_SRC_LINE
+        UdtSourceLine:
+          UDT:             4158
+          SourceFile:      4107
+          LineNumber:      422
+      - Kind:            LF_STRUCTURE
+        Class:
+          MemberCount:     0
+          Options:         [ None, ForwardReference, HasUniqueName ]
+          FieldList:       0
+          Name:            '__vc_attributes::helper_attributes::usageAttribute'
+          UniqueName:      '.?AUusageAttribute at helper_attributes@__vc_attributes@@'
+          DerivationList:  0
+          VTableShape:     0
+          Size:            0
+      - Kind:            LF_FIELDLIST
+        FieldList:
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           0
+              Name:            eAnyUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           1
+              Name:            eCoClassUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           2
+              Name:            eCOMInterfaceUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           6
+              Name:            eInterfaceUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           8
+              Name:            eMemberUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           16
+              Name:            eMethodUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           32
+              Name:            eInterfaceMethodUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           64
+              Name:            eInterfaceMemberUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           128
+              Name:            eCoClassMemberUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           256
+              Name:            eCoClassMethodUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           768
+              Name:            eGlobalMethodUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           1024
+              Name:            eGlobalDataUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           2048
+              Name:            eClassUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           4096
+              Name:            eInterfaceParameterUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           12288
+              Name:            eMethodParameterUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           16384
+              Name:            eIDLModuleUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           32768
+              Name:            eAnonymousUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           65536
+              Name:            eTypedefUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           131072
+              Name:            eUnionUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           262144
+              Name:            eEnumUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           524288
+              Name:            eDefineTagUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           1048576
+              Name:            eStructUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           2097152
+              Name:            eLocalUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           4194304
+              Name:            ePropertyUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           8388608
+              Name:            eEventUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           16777216
+              Name:            eTemplateUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           16777216
+              Name:            eModuleUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           33554432
+              Name:            eIllegalUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           67108864
+              Name:            eAsynchronousUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           4161535
+              Name:            eAnyIDLUsage
+      - Kind:            LF_ENUM
+        Enum:
+          NumEnumerators:  30
+          Options:         [ None, Nested, HasUniqueName ]
+          FieldList:       4161
+          Name:            '__vc_attributes::helper_attributes::usageAttribute::usage_e'
+          UniqueName:      '.?AW4usage_e at usageAttribute@helper_attributes at __vc_attributes@@'
+          UnderlyingType:  116
+      - Kind:            LF_UDT_SRC_LINE
+        UdtSourceLine:
+          UDT:             4162
+          SourceFile:      4107
+          LineNumber:      51
+      - Kind:            LF_ARGLIST
+        ArgList:
+          ArgIndices:      [ 117 ]
+      - Kind:            LF_POINTER
+        Pointer:
+          ReferentType:    4160
+          Attrs:           66572
+      - Kind:            LF_MFUNCTION
+        MemberFunction:
+          ReturnType:      3
+          ClassType:       4160
+          ThisType:        4165
+          CallConv:        NearC
+          Options:         [ None, Constructor ]
+          ParameterCount:  1
+          ArgumentList:    4164
+          ThisPointerAdjustment: 0
+      - Kind:            LF_FIELDLIST
+        FieldList:
+          - Kind:            LF_NESTTYPE
+            NestedType:
+              Type:            4162
+              Name:            usage_e
+          - Kind:            LF_ONEMETHOD
+            OneMethod:
+              Type:            4166
+              Attrs:           3
+              VFTableOffset:   -1
+              Name:            usageAttribute
+          - Kind:            LF_MEMBER
+            DataMember:
+              Attrs:           3
+              Type:            117
+              FieldOffset:     0
+              Name:            value
+      - Kind:            LF_STRUCTURE
+        Class:
+          MemberCount:     3
+          Options:         [ None, HasConstructorOrDestructor, ContainsNestedClass, HasUniqueName ]
+          FieldList:       4167
+          Name:            '__vc_attributes::helper_attributes::usageAttribute'
+          UniqueName:      '.?AUusageAttribute at helper_attributes@__vc_attributes@@'
+          DerivationList:  0
+          VTableShape:     0
+          Size:            4
+      - Kind:            LF_UDT_SRC_LINE
+        UdtSourceLine:
+          UDT:             4168
+          SourceFile:      4107
+          LineNumber:      49
+      - Kind:            LF_STRUCTURE
+        Class:
+          MemberCount:     0
+          Options:         [ None, ForwardReference, HasUniqueName ]
+          FieldList:       0
+          Name:            '__vc_attributes::helper_attributes::v1_alttypeAttribute'
+          UniqueName:      '.?AUv1_alttypeAttribute at helper_attributes@__vc_attributes@@'
+          DerivationList:  0
+          VTableShape:     0
+          Size:            0
+      - Kind:            LF_FIELDLIST
+        FieldList:
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           0
+              Name:            eBoolean
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           1
+              Name:            eInteger
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           2
+              Name:            eFloat
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           3
+              Name:            eDouble
+      - Kind:            LF_ENUM
+        Enum:
+          NumEnumerators:  4
+          Options:         [ None, Nested, HasUniqueName ]
+          FieldList:       4171
+          Name:            '__vc_attributes::helper_attributes::v1_alttypeAttribute::type_e'
+          UniqueName:      '.?AW4type_e at v1_alttypeAttribute@helper_attributes at __vc_attributes@@'
+          UnderlyingType:  116
+      - Kind:            LF_UDT_SRC_LINE
+        UdtSourceLine:
+          UDT:             4172
+          SourceFile:      4107
+          LineNumber:      38
+      - Kind:            LF_ARGLIST
+        ArgList:
+          ArgIndices:      [ 4172 ]
+      - Kind:            LF_POINTER
+        Pointer:
+          ReferentType:    4170
+          Attrs:           66572
+      - Kind:            LF_MFUNCTION
+        MemberFunction:
+          ReturnType:      3
+          ClassType:       4170
+          ThisType:        4175
+          CallConv:        NearC
+          Options:         [ None, Constructor ]
+          ParameterCount:  1
+          ArgumentList:    4174
+          ThisPointerAdjustment: 0
+      - Kind:            LF_FIELDLIST
+        FieldList:
+          - Kind:            LF_NESTTYPE
+            NestedType:
+              Type:            4172
+              Name:            type_e
+          - Kind:            LF_ONEMETHOD
+            OneMethod:
+              Type:            4176
+              Attrs:           3
+              VFTableOffset:   -1
+              Name:            v1_alttypeAttribute
+          - Kind:            LF_MEMBER
+            DataMember:
+              Attrs:           3
+              Type:            4172
+              FieldOffset:     0
+              Name:            type
+      - Kind:            LF_STRUCTURE
+        Class:
+          MemberCount:     3
+          Options:         [ None, HasConstructorOrDestructor, ContainsNestedClass, HasUniqueName ]
+          FieldList:       4177
+          Name:            '__vc_attributes::helper_attributes::v1_alttypeAttribute'
+          UniqueName:      '.?AUv1_alttypeAttribute at helper_attributes@__vc_attributes@@'
+          DerivationList:  0
+          VTableShape:     0
+          Size:            4
+      - Kind:            LF_UDT_SRC_LINE
+        UdtSourceLine:
+          UDT:             4178
+          SourceFile:      4107
+          LineNumber:      37
+      - Kind:            LF_STRUCTURE
+        Class:
+          MemberCount:     0
+          Options:         [ None, ForwardReference, HasUniqueName ]
+          FieldList:       0
+          Name:            '__vc_attributes::event_sourceAttribute'
+          UniqueName:      '.?AUevent_sourceAttribute at __vc_attributes@@'
+          DerivationList:  0
+          VTableShape:     0
+          Size:            0
+      - Kind:            LF_FIELDLIST
+        FieldList:
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           0
+              Name:            native
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           1
+              Name:            com
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           2
+              Name:            managed
+      - Kind:            LF_ENUM
+        Enum:
+          NumEnumerators:  3
+          Options:         [ None, Nested, HasUniqueName ]
+          FieldList:       4181
+          Name:            '__vc_attributes::event_sourceAttribute::type_e'
+          UniqueName:      '.?AW4type_e at event_sourceAttribute@__vc_attributes@@'
+          UnderlyingType:  116
+      - Kind:            LF_UDT_SRC_LINE
+        UdtSourceLine:
+          UDT:             4182
+          SourceFile:      4107
+          LineNumber:      1142
+      - Kind:            LF_FIELDLIST
+        FieldList:
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           0
+              Name:            speed
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           1
+              Name:            size
+      - Kind:            LF_ENUM
+        Enum:
+          NumEnumerators:  2
+          Options:         [ None, Nested, HasUniqueName ]
+          FieldList:       4184
+          Name:            '__vc_attributes::event_sourceAttribute::optimize_e'
+          UniqueName:      '.?AW4optimize_e at event_sourceAttribute@__vc_attributes@@'
+          UnderlyingType:  116
+      - Kind:            LF_UDT_SRC_LINE
+        UdtSourceLine:
+          UDT:             4185
+          SourceFile:      4107
+          LineNumber:      1145
+      - Kind:            LF_ARGLIST
+        ArgList:
+          ArgIndices:      [ 4182 ]
+      - Kind:            LF_POINTER
+        Pointer:
+          ReferentType:    4180
+          Attrs:           66572
+      - Kind:            LF_MFUNCTION
+        MemberFunction:
+          ReturnType:      3
+          ClassType:       4180
+          ThisType:        4188
+          CallConv:        NearC
+          Options:         [ None, Constructor ]
+          ParameterCount:  1
+          ArgumentList:    4187
+          ThisPointerAdjustment: 0
+      - Kind:            LF_MFUNCTION
+        MemberFunction:
+          ReturnType:      3
+          ClassType:       4180
+          ThisType:        4188
+          CallConv:        NearC
+          Options:         [ None, Constructor ]
+          ParameterCount:  0
+          ArgumentList:    4116
+          ThisPointerAdjustment: 0
+      - Kind:            LF_METHODLIST
+        MethodOverloadList:
+          Methods:
+            - Type:            4189
+              Attrs:           3
+              VFTableOffset:   -1
+              Name:            ''
+            - Type:            4190
+              Attrs:           3
+              VFTableOffset:   -1
+              Name:            ''
+      - Kind:            LF_FIELDLIST
+        FieldList:
+          - Kind:            LF_NESTTYPE
+            NestedType:
+              Type:            4182
+              Name:            type_e
+          - Kind:            LF_NESTTYPE
+            NestedType:
+              Type:            4185
+              Name:            optimize_e
+          - Kind:            LF_METHOD
+            OverloadedMethod:
+              NumOverloads:    2
+              MethodList:      4191
+              Name:            event_sourceAttribute
+          - Kind:            LF_MEMBER
+            DataMember:
+              Attrs:           3
+              Type:            4182
+              FieldOffset:     0
+              Name:            type
+          - Kind:            LF_MEMBER
+            DataMember:
+              Attrs:           3
+              Type:            4185
+              FieldOffset:     4
+              Name:            optimize
+          - Kind:            LF_MEMBER
+            DataMember:
+              Attrs:           3
+              Type:            48
+              FieldOffset:     8
+              Name:            decorate
+      - Kind:            LF_STRUCTURE
+        Class:
+          MemberCount:     7
+          Options:         [ None, HasConstructorOrDestructor, ContainsNestedClass, HasUniqueName ]
+          FieldList:       4192
+          Name:            '__vc_attributes::event_sourceAttribute'
+          UniqueName:      '.?AUevent_sourceAttribute at __vc_attributes@@'
+          DerivationList:  0
+          VTableShape:     0
+          Size:            12
+      - Kind:            LF_UDT_SRC_LINE
+        UdtSourceLine:
+          UDT:             4193
+          SourceFile:      4107
+          LineNumber:      1141
+      - Kind:            LF_STRING_ID
+        StringId:
+          Id:              0
+          String:          'D:\src\llvmbuild\cl\Debug\x64'
+      - Kind:            LF_STRING_ID
+        StringId:
+          Id:              0
+          String:          'C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.11.25503\bin\HostX64\x64\cl.exe'
+      - Kind:            LF_STRING_ID
+        StringId:
+          Id:              0
+          String:          '-Z7 -O1 -c -MT -I"C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.11.25503\ATLMFC\include" -I"C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.11.25503\include" -I"C:\Program'
+      - Kind:            LF_STRING_ID
+        StringId:
+          Id:              0
+          String:          ' Files (x86)\Windows Kits\NETFXSDK\4.6.1\include\um" -I"C:\Program Files (x86)\Windows Kits\10\include\10.0.16299.0\ucrt" -I"C:\Program Files (x86)\Windows Kits\10\include\10.0.16299.0\shared" -I"C:\Program Files (x86)\Windows Kits\10\include\10.0.16299.0\um"'
+      - Kind:            LF_SUBSTR_LIST
+        StringList:
+          StringIndices:   [ 4197, 4198 ]
+      - Kind:            LF_STRING_ID
+        StringId:
+          Id:              4199
+          String:          ' -I"C:\Program Files (x86)\Windows Kits\10\include\10.0.16299.0\winrt" -TP -X'
+      - Kind:            LF_STRING_ID
+        StringId:
+          Id:              0
+          String:          a.cpp
+      - Kind:            LF_STRING_ID
+        StringId:
+          Id:              0
+          String:          'D:\src\llvmbuild\cl\Debug\x64\vc140.pdb'
+      - Kind:            LF_BUILDINFO
+        BuildInfo:
+          ArgIndices:      [ 4195, 4196, 4201, 4202, 4200 ]
+  - Name:            .bss
+    Characteristics: [ IMAGE_SCN_CNT_UNINITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
+    Alignment:       4
+    SectionData:     ''
+  - Name:            '.text$mn'
+    Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+    Alignment:       4
+    SectionData:     4883EC288B0D0000000085C97405E8000000004883C428C3
+    Relocations:
+      - VirtualAddress:  6
+        SymbolName:      '?x@@3HA'
+        Type:            IMAGE_REL_AMD64_REL32
+      - VirtualAddress:  15
+        SymbolName:      '?b@@YAXH at Z'
+        Type:            IMAGE_REL_AMD64_REL32
+  - Name:            '.debug$S'
+    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
+    Alignment:       1
+    Subsections:
+      - !Symbols
+        Records:
+          - Kind:            S_GPROC32_ID
+            ProcSym:
+              CodeSize:        24
+              DbgStart:        4
+              DbgEnd:          19
+              FunctionType:    4099
+              Flags:           [ HasOptimizedDebugInfo ]
+              DisplayName:     a
+          - Kind:            S_LOCAL
+            LocalSym:
+              Type:            116
+              Flags:           [ IsParameter ]
+              VarName:         __formal
+          - Kind:            S_DEFRANGE_REGISTER
+            DefRangeRegisterSym:
+          - Kind:            S_DEFRANGE_FRAMEPOINTER_REL_FULL_SCOPE
+            DefRangeFramePointerRelFullScopeSym:
+          - Kind:            S_CALLEES
+            CallerSym:
+              FuncID:          [ 4103 ]
+          - Kind:            S_FILESTATIC
+            FileStaticSym:
+              Index:           116
+              ModFilenameOffset: 37
+              Flags:           [ IsEnregisteredGlobal, IsEnregisteredStatic ]
+              Name:            x
+          - Kind:            S_DEFRANGE_REGISTER
+            DefRangeRegisterSym:
+          - Kind:            S_FRAMEPROC
+            FrameProcSym:
+              TotalFrameBytes: 40
+              PaddingFrameBytes: 0
+              OffsetToPadding: 0
+              BytesOfCalleeSavedRegisters: 0
+              OffsetOfExceptionHandler: 0
+              SectionIdOfExceptionHandler: 0
+              Flags:           [ AsynchronousExceptionHandling, Inlined ]
+          - Kind:            S_REGREL32
+            RegRelativeSym:
+              Offset:          48
+              Type:            116
+              Register:        RSP
+              VarName:         __formal
+          - Kind:            S_PROC_ID_END
+            ScopeEndSym:
+      - !Lines
+        CodeSize:        24
+        Flags:           [  ]
+        RelocOffset:     0
+        RelocSegment:    0
+        Blocks:
+          - FileName:        'd:\src\llvmbuild\cl\debug\x64\a.cpp'
+            Lines:
+              - Offset:          0
+                LineStart:       5
+                IsStatement:     true
+                EndDelta:        0
+              - Offset:          4
+                LineStart:       6
+                IsStatement:     true
+                EndDelta:        0
+              - Offset:          14
+                LineStart:       7
+                IsStatement:     true
+                EndDelta:        0
+              - Offset:          19
+                LineStart:       8
+                IsStatement:     true
+                EndDelta:        0
+            Columns:
+    Relocations:
+      - VirtualAddress:  44
+        SymbolName:      '?a@@YAXH at Z'
+        Type:            IMAGE_REL_AMD64_SECREL
+      - VirtualAddress:  48
+        SymbolName:      '?a@@YAXH at Z'
+        Type:            IMAGE_REL_AMD64_SECTION
+      - VirtualAddress:  80
+        SymbolName:      '?a@@YAXH at Z'
+        Type:            IMAGE_REL_AMD64_SECREL
+      - VirtualAddress:  84
+        SymbolName:      '?a@@YAXH at Z'
+        Type:            IMAGE_REL_AMD64_SECTION
+      - VirtualAddress:  132
+        SymbolName:      '?a@@YAXH at Z'
+        Type:            IMAGE_REL_AMD64_SECREL
+      - VirtualAddress:  136
+        SymbolName:      '?a@@YAXH at Z'
+        Type:            IMAGE_REL_AMD64_SECTION
+      - VirtualAddress:  208
+        SymbolName:      '?a@@YAXH at Z'
+        Type:            IMAGE_REL_AMD64_SECREL
+      - VirtualAddress:  212
+        SymbolName:      '?a@@YAXH at Z'
+        Type:            IMAGE_REL_AMD64_SECTION
+  - Name:            '.text$mn'
+    Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+    Alignment:       4
+    SectionData:     4883EC288B050000000085C0740D8BC8E8000000008B05000000004883C428C3
+    Relocations:
+      - VirtualAddress:  6
+        SymbolName:      '?x@@3HA'
+        Type:            IMAGE_REL_AMD64_REL32
+      - VirtualAddress:  17
+        SymbolName:      '?b@@YAXH at Z'
+        Type:            IMAGE_REL_AMD64_REL32
+      - VirtualAddress:  23
+        SymbolName:      '?x@@3HA'
+        Type:            IMAGE_REL_AMD64_REL32
+  - Name:            '.debug$S'
+    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
+    Alignment:       1
+    Subsections:
+      - !Symbols
+        Records:
+          - Kind:            S_GPROC32_ID
+            ProcSym:
+              CodeSize:        32
+              DbgStart:        4
+              DbgEnd:          27
+              FunctionType:    4102
+              Flags:           [ HasOptimizedDebugInfo ]
+              DisplayName:     main
+          - Kind:            S_LOCAL
+            LocalSym:
+              Type:            116
+              Flags:           [ IsParameter ]
+              VarName:         argc
+          - Kind:            S_DEFRANGE_REGISTER
+            DefRangeRegisterSym:
+          - Kind:            S_DEFRANGE_REGISTER
+            DefRangeRegisterSym:
+          - Kind:            S_DEFRANGE_FRAMEPOINTER_REL_FULL_SCOPE
+            DefRangeFramePointerRelFullScopeSym:
+          - Kind:            S_LOCAL
+            LocalSym:
+              Type:            4098
+              Flags:           [ IsParameter ]
+              VarName:         argv
+          - Kind:            S_DEFRANGE_REGISTER
+            DefRangeRegisterSym:
+          - Kind:            S_DEFRANGE_REGISTER
+            DefRangeRegisterSym:
+          - Kind:            S_DEFRANGE_FRAMEPOINTER_REL_FULL_SCOPE
+            DefRangeFramePointerRelFullScopeSym:
+          - Kind:            S_INLINESITE
+            InlineSiteSym:
+              Inlinee:         4099
+          - Kind:            S_CALLEES
+            CallerSym:
+              FuncID:          [ 4103 ]
+          - Kind:            S_INLINESITE_END
+            ScopeEndSym:
+          - Kind:            S_FILESTATIC
+            FileStaticSym:
+              Index:           116
+              ModFilenameOffset: 37
+              Flags:           [ IsEnregisteredGlobal, IsEnregisteredStatic ]
+              Name:            x
+          - Kind:            S_DEFRANGE_REGISTER
+            DefRangeRegisterSym:
+          - Kind:            S_FRAMEPROC
+            FrameProcSym:
+              TotalFrameBytes: 40
+              PaddingFrameBytes: 0
+              OffsetToPadding: 0
+              BytesOfCalleeSavedRegisters: 0
+              OffsetOfExceptionHandler: 0
+              SectionIdOfExceptionHandler: 0
+              Flags:           [ AsynchronousExceptionHandling ]
+          - Kind:            S_INLINEES
+            CallerSym:
+              FuncID:          [ 4099 ]
+          - Kind:            S_REGREL32
+            RegRelativeSym:
+              Offset:          48
+              Type:            116
+              Register:        RSP
+              VarName:         argc
+          - Kind:            S_REGREL32
+            RegRelativeSym:
+              Offset:          56
+              Type:            4098
+              Register:        RSP
+              VarName:         argv
+          - Kind:            S_PROC_ID_END
+            ScopeEndSym:
+      - !Lines
+        CodeSize:        32
+        Flags:           [  ]
+        RelocOffset:     0
+        RelocSegment:    0
+        Blocks:
+          - FileName:        'd:\src\llvmbuild\cl\debug\x64\a.cpp'
+            Lines:
+              - Offset:          0
+                LineStart:       10
+                IsStatement:     true
+                EndDelta:        0
+              - Offset:          4
+                LineStart:       11
+                IsStatement:     true
+                EndDelta:        0
+              - Offset:          27
+                LineStart:       13
+                IsStatement:     true
+                EndDelta:        0
+            Columns:
+    Relocations:
+      - VirtualAddress:  44
+        SymbolName:      main
+        Type:            IMAGE_REL_AMD64_SECREL
+      - VirtualAddress:  48
+        SymbolName:      main
+        Type:            IMAGE_REL_AMD64_SECTION
+      - VirtualAddress:  79
+        SymbolName:      main
+        Type:            IMAGE_REL_AMD64_SECREL
+      - VirtualAddress:  83
+        SymbolName:      main
+        Type:            IMAGE_REL_AMD64_SECTION
+      - VirtualAddress:  95
+        SymbolName:      main
+        Type:            IMAGE_REL_AMD64_SECREL
+      - VirtualAddress:  99
+        SymbolName:      main
+        Type:            IMAGE_REL_AMD64_SECTION
+      - VirtualAddress:  134
+        SymbolName:      main
+        Type:            IMAGE_REL_AMD64_SECREL
+      - VirtualAddress:  138
+        SymbolName:      main
+        Type:            IMAGE_REL_AMD64_SECTION
+      - VirtualAddress:  150
+        SymbolName:      main
+        Type:            IMAGE_REL_AMD64_SECREL
+      - VirtualAddress:  154
+        SymbolName:      main
+        Type:            IMAGE_REL_AMD64_SECTION
+      - VirtualAddress:  229
+        SymbolName:      main
+        Type:            IMAGE_REL_AMD64_SECREL
+      - VirtualAddress:  233
+        SymbolName:      main
+        Type:            IMAGE_REL_AMD64_SECTION
+      - VirtualAddress:  336
+        SymbolName:      main
+        Type:            IMAGE_REL_AMD64_SECREL
+      - VirtualAddress:  340
+        SymbolName:      main
+        Type:            IMAGE_REL_AMD64_SECTION
+  - Name:            .xdata
+    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_READ ]
+    Alignment:       4
+    SectionData:     '0104010004420000'
+  - Name:            .pdata
+    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_READ ]
+    Alignment:       4
+    SectionData:     '000000001800000000000000'
+    Relocations:
+      - VirtualAddress:  0
+        SymbolName:      '$LN5'
+        Type:            IMAGE_REL_AMD64_ADDR32NB
+      - VirtualAddress:  4
+        SymbolName:      '$LN5'
+        Type:            IMAGE_REL_AMD64_ADDR32NB
+      - VirtualAddress:  8
+        SymbolName:      '$unwind$?a@@YAXH at Z'
+        Type:            IMAGE_REL_AMD64_ADDR32NB
+  - Name:            .xdata
+    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_READ ]
+    Alignment:       4
+    SectionData:     '0104010004420000'
+  - Name:            .pdata
+    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_READ ]
+    Alignment:       4
+    SectionData:     '000000002000000000000000'
+    Relocations:
+      - VirtualAddress:  0
+        SymbolName:      '$LN7'
+        Type:            IMAGE_REL_AMD64_ADDR32NB
+      - VirtualAddress:  4
+        SymbolName:      '$LN7'
+        Type:            IMAGE_REL_AMD64_ADDR32NB
+      - VirtualAddress:  8
+        SymbolName:      '$unwind$main'
+        Type:            IMAGE_REL_AMD64_ADDR32NB
+symbols:
+  - Name:            '@comp.id'
+    Value:           17130443
+    SectionNumber:   -1
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+  - Name:            '@feat.00'
+    Value:           2147484048
+    SectionNumber:   -1
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+  - Name:            .drectve
+    Value:           0
+    SectionNumber:   1
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+    SectionDefinition:
+      Length:          47
+      NumberOfRelocations: 0
+      NumberOfLinenumbers: 0
+      CheckSum:        0
+      Number:          0
+  - Name:            '.debug$S'
+    Value:           0
+    SectionNumber:   2
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+    SectionDefinition:
+      Length:          1120
+      NumberOfRelocations: 2
+      NumberOfLinenumbers: 0
+      CheckSum:        0
+      Number:          0
+  - Name:            '.debug$T'
+    Value:           0
+    SectionNumber:   3
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+    SectionDefinition:
+      Length:          6700
+      NumberOfRelocations: 0
+      NumberOfLinenumbers: 0
+      CheckSum:        0
+      Number:          0
+  - Name:            .bss
+    Value:           0
+    SectionNumber:   4
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+    SectionDefinition:
+      Length:          4
+      NumberOfRelocations: 0
+      NumberOfLinenumbers: 0
+      CheckSum:        0
+      Number:          0
+  - Name:            '?x@@3HA'
+    Value:           0
+    SectionNumber:   4
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+  - Name:            '.text$mn'
+    Value:           0
+    SectionNumber:   5
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+    SectionDefinition:
+      Length:          24
+      NumberOfRelocations: 2
+      NumberOfLinenumbers: 0
+      CheckSum:        211387054
+      Number:          0
+      Selection:       IMAGE_COMDAT_SELECT_NODUPLICATES
+  - Name:            '.debug$S'
+    Value:           0
+    SectionNumber:   6
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+    SectionDefinition:
+      Length:          264
+      NumberOfRelocations: 8
+      NumberOfLinenumbers: 0
+      CheckSum:        0
+      Number:          5
+      Selection:       IMAGE_COMDAT_SELECT_ASSOCIATIVE
+  - Name:            '.text$mn'
+    Value:           0
+    SectionNumber:   7
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+    SectionDefinition:
+      Length:          32
+      NumberOfRelocations: 3
+      NumberOfLinenumbers: 0
+      CheckSum:        3834856183
+      Number:          0
+      Selection:       IMAGE_COMDAT_SELECT_NODUPLICATES
+  - Name:            '.debug$S'
+    Value:           0
+    SectionNumber:   8
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+    SectionDefinition:
+      Length:          384
+      NumberOfRelocations: 14
+      NumberOfLinenumbers: 0
+      CheckSum:        0
+      Number:          7
+      Selection:       IMAGE_COMDAT_SELECT_ASSOCIATIVE
+  - Name:            '?b@@YAXH at Z'
+    Value:           0
+    SectionNumber:   0
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_FUNCTION
+    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
+  - Name:            '?a@@YAXH at Z'
+    Value:           0
+    SectionNumber:   5
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_FUNCTION
+    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
+  - Name:            main
+    Value:           0
+    SectionNumber:   7
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_FUNCTION
+    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
+  - Name:            '$LN5'
+    Value:           0
+    SectionNumber:   5
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_LABEL
+  - Name:            '$LN7'
+    Value:           0
+    SectionNumber:   7
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_LABEL
+  - Name:            .xdata
+    Value:           0
+    SectionNumber:   9
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+    SectionDefinition:
+      Length:          8
+      NumberOfRelocations: 0
+      NumberOfLinenumbers: 0
+      CheckSum:        264583633
+      Number:          5
+      Selection:       IMAGE_COMDAT_SELECT_ASSOCIATIVE
+  - Name:            '$unwind$?a@@YAXH at Z'
+    Value:           0
+    SectionNumber:   9
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+  - Name:            .pdata
+    Value:           0
+    SectionNumber:   10
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+    SectionDefinition:
+      Length:          12
+      NumberOfRelocations: 3
+      NumberOfLinenumbers: 0
+      CheckSum:        2942184094
+      Number:          5
+      Selection:       IMAGE_COMDAT_SELECT_ASSOCIATIVE
+  - Name:            '$pdata$?a@@YAXH at Z'
+    Value:           0
+    SectionNumber:   10
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+  - Name:            .xdata
+    Value:           0
+    SectionNumber:   11
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+    SectionDefinition:
+      Length:          8
+      NumberOfRelocations: 0
+      NumberOfLinenumbers: 0
+      CheckSum:        264583633
+      Number:          7
+      Selection:       IMAGE_COMDAT_SELECT_ASSOCIATIVE
+  - Name:            '$unwind$main'
+    Value:           0
+    SectionNumber:   11
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+  - Name:            .pdata
+    Value:           0
+    SectionNumber:   12
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+    SectionDefinition:
+      Length:          12
+      NumberOfRelocations: 3
+      NumberOfLinenumbers: 0
+      CheckSum:        4185285206
+      Number:          7
+      Selection:       IMAGE_COMDAT_SELECT_ASSOCIATIVE
+  - Name:            '$pdata$main'
+    Value:           0
+    SectionNumber:   12
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+...

Added: lld/trunk/test/COFF/Inputs/pdb-file-statics-b.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/Inputs/pdb-file-statics-b.yaml?rev=321883&view=auto
==============================================================================
--- lld/trunk/test/COFF/Inputs/pdb-file-statics-b.yaml (added)
+++ lld/trunk/test/COFF/Inputs/pdb-file-statics-b.yaml Fri Jan  5 11:12:40 2018
@@ -0,0 +1,1537 @@
+--- !COFF
+header:
+  Machine:         IMAGE_FILE_MACHINE_AMD64
+  Characteristics: [  ]
+sections:
+  - Name:            .drectve
+    Characteristics: [ IMAGE_SCN_LNK_INFO, IMAGE_SCN_LNK_REMOVE ]
+    Alignment:       1
+    SectionData:     2020202F44454641554C544C49423A224C4942434D5422202F44454641554C544C49423A224F4C444E414D45532220
+  - Name:            '.debug$S'
+    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
+    Alignment:       1
+    Subsections:
+      - !Symbols
+        Records:
+          - Kind:            S_OBJNAME
+            ObjNameSym:
+              Signature:       0
+              ObjectName:      'D:\src\llvmbuild\cl\Debug\x64\b.obj'
+          - Kind:            S_COMPILE3
+            Compile3Sym:
+              Flags:           [ SecurityChecks, HotPatch ]
+              Machine:         X64
+              FrontendMajor:   19
+              FrontendMinor:   11
+              FrontendBuild:   25547
+              FrontendQFE:     0
+              BackendMajor:    19
+              BackendMinor:    11
+              BackendBuild:    25547
+              BackendQFE:      0
+              Version:         'Microsoft (R) Optimizing Compiler'
+      - !Symbols
+        Records:
+          - Kind:            S_LDATA32
+            DataSym:
+              Type:            116
+              DisplayName:     y
+          - Kind:            S_UDT
+            UDTSym:
+              Type:            4189
+              UDTName:         '__vc_attributes::event_sourceAttribute'
+          - Kind:            S_UDT
+            UDTSym:
+              Type:            4181
+              UDTName:         '__vc_attributes::event_sourceAttribute::optimize_e'
+          - Kind:            S_UDT
+            UDTSym:
+              Type:            4178
+              UDTName:         '__vc_attributes::event_sourceAttribute::type_e'
+          - Kind:            S_UDT
+            UDTSym:
+              Type:            4174
+              UDTName:         '__vc_attributes::helper_attributes::v1_alttypeAttribute'
+          - Kind:            S_UDT
+            UDTSym:
+              Type:            4168
+              UDTName:         '__vc_attributes::helper_attributes::v1_alttypeAttribute::type_e'
+          - Kind:            S_UDT
+            UDTSym:
+              Type:            4164
+              UDTName:         '__vc_attributes::helper_attributes::usageAttribute'
+          - Kind:            S_UDT
+            UDTSym:
+              Type:            4158
+              UDTName:         '__vc_attributes::helper_attributes::usageAttribute::usage_e'
+          - Kind:            S_UDT
+            UDTSym:
+              Type:            4154
+              UDTName:         '__vc_attributes::threadingAttribute'
+          - Kind:            S_UDT
+            UDTSym:
+              Type:            4146
+              UDTName:         '__vc_attributes::threadingAttribute::threading_e'
+          - Kind:            S_UDT
+            UDTSym:
+              Type:            4142
+              UDTName:         '__vc_attributes::aggregatableAttribute'
+          - Kind:            S_UDT
+            UDTSym:
+              Type:            4134
+              UDTName:         '__vc_attributes::aggregatableAttribute::type_e'
+          - Kind:            S_UDT
+            UDTSym:
+              Type:            4130
+              UDTName:         '__vc_attributes::event_receiverAttribute'
+          - Kind:            S_UDT
+            UDTSym:
+              Type:            4120
+              UDTName:         '__vc_attributes::event_receiverAttribute::type_e'
+          - Kind:            S_UDT
+            UDTSym:
+              Type:            4116
+              UDTName:         '__vc_attributes::moduleAttribute'
+          - Kind:            S_UDT
+            UDTSym:
+              Type:            4102
+              UDTName:         '__vc_attributes::moduleAttribute::type_e'
+      - !FileChecksums
+        Checksums:
+          - FileName:        'd:\src\llvmbuild\cl\debug\x64\b.cpp'
+            Kind:            MD5
+            Checksum:        2B9F08E2C7D63D3033E1997500CE3C53
+      - !StringTable
+        Strings:
+          - 'd:\src\llvmbuild\cl\debug\x64\b.cpp'
+          - 'D:\src\llvmbuild\cl\Debug\x64\b.obj'
+      - !Symbols
+        Records:
+          - Kind:            S_BUILDINFO
+            BuildInfoSym:
+              BuildId:         4199
+    Relocations:
+      - VirtualAddress:  132
+        SymbolName:      '?y@@3HA'
+        Type:            IMAGE_REL_AMD64_SECREL
+      - VirtualAddress:  136
+        SymbolName:      '?y@@3HA'
+        Type:            IMAGE_REL_AMD64_SECTION
+  - Name:            '.debug$T'
+    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
+    Alignment:       1
+    Types:
+      - Kind:            LF_ARGLIST
+        ArgList:
+          ArgIndices:      [ 116 ]
+      - Kind:            LF_PROCEDURE
+        Procedure:
+          ReturnType:      3
+          CallConv:        NearC
+          Options:         [ None ]
+          ParameterCount:  1
+          ArgumentList:    4096
+      - Kind:            LF_FUNC_ID
+        FuncId:
+          ParentScope:     0
+          FunctionType:    4097
+          Name:            b
+      - Kind:            LF_FUNC_ID
+        FuncId:
+          ParentScope:     0
+          FunctionType:    4097
+          Name:            a
+      - Kind:            LF_STRUCTURE
+        Class:
+          MemberCount:     0
+          Options:         [ None, ForwardReference, HasUniqueName ]
+          FieldList:       0
+          Name:            '__vc_attributes::moduleAttribute'
+          UniqueName:      '.?AUmoduleAttribute at __vc_attributes@@'
+          DerivationList:  0
+          VTableShape:     0
+          Size:            0
+      - Kind:            LF_FIELDLIST
+        FieldList:
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           1
+              Name:            dll
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           2
+              Name:            exe
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           3
+              Name:            service
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           4
+              Name:            unspecified
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           2
+              Name:            EXE
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           3
+              Name:            SERVICE
+      - Kind:            LF_ENUM
+        Enum:
+          NumEnumerators:  6
+          Options:         [ None, Nested, HasUniqueName ]
+          FieldList:       4101
+          Name:            '__vc_attributes::moduleAttribute::type_e'
+          UniqueName:      '.?AW4type_e at moduleAttribute@__vc_attributes@@'
+          UnderlyingType:  116
+      - Kind:            LF_STRING_ID
+        StringId:
+          Id:              0
+          String:          'd:\src\llvmbuild\cl\debug\x64\predefined c++ attributes (compiler internal)'
+      - Kind:            LF_UDT_SRC_LINE
+        UdtSourceLine:
+          UDT:             4102
+          SourceFile:      4103
+          LineNumber:      482
+      - Kind:            LF_MODIFIER
+        Modifier:
+          ModifiedType:    112
+          Modifiers:       [ None, Const ]
+      - Kind:            LF_POINTER
+        Pointer:
+          ReferentType:    4105
+          Attrs:           65548
+      - Kind:            LF_ARGLIST
+        ArgList:
+          ArgIndices:      [ 4102, 4106, 4106, 4106, 116, 48, 4106, 116,
+                             4106, 4106, 116, 48, 48, 4106, 4106 ]
+      - Kind:            LF_POINTER
+        Pointer:
+          ReferentType:    4100
+          Attrs:           66572
+      - Kind:            LF_MFUNCTION
+        MemberFunction:
+          ReturnType:      3
+          ClassType:       4100
+          ThisType:        4108
+          CallConv:        NearC
+          Options:         [ None, Constructor ]
+          ParameterCount:  15
+          ArgumentList:    4107
+          ThisPointerAdjustment: 0
+      - Kind:            LF_ARGLIST
+        ArgList:
+          ArgIndices:      [ 4102 ]
+      - Kind:            LF_MFUNCTION
+        MemberFunction:
+          ReturnType:      3
+          ClassType:       4100
+          ThisType:        4108
+          CallConv:        NearC
+          Options:         [ None, Constructor ]
+          ParameterCount:  1
+          ArgumentList:    4110
+          ThisPointerAdjustment: 0
+      - Kind:            LF_ARGLIST
+        ArgList:
+          ArgIndices:      [  ]
+      - Kind:            LF_MFUNCTION
+        MemberFunction:
+          ReturnType:      3
+          ClassType:       4100
+          ThisType:        4108
+          CallConv:        NearC
+          Options:         [ None, Constructor ]
+          ParameterCount:  0
+          ArgumentList:    4112
+          ThisPointerAdjustment: 0
+      - Kind:            LF_METHODLIST
+        MethodOverloadList:
+          Methods:
+            - Type:            4109
+              Attrs:           3
+              VFTableOffset:   -1
+              Name:            ''
+            - Type:            4111
+              Attrs:           3
+              VFTableOffset:   -1
+              Name:            ''
+            - Type:            4113
+              Attrs:           3
+              VFTableOffset:   -1
+              Name:            ''
+      - Kind:            LF_FIELDLIST
+        FieldList:
+          - Kind:            LF_NESTTYPE
+            NestedType:
+              Type:            4102
+              Name:            type_e
+          - Kind:            LF_METHOD
+            OverloadedMethod:
+              NumOverloads:    3
+              MethodList:      4114
+              Name:            moduleAttribute
+          - Kind:            LF_MEMBER
+            DataMember:
+              Attrs:           3
+              Type:            4102
+              FieldOffset:     0
+              Name:            type
+          - Kind:            LF_MEMBER
+            DataMember:
+              Attrs:           3
+              Type:            4106
+              FieldOffset:     8
+              Name:            name
+          - Kind:            LF_MEMBER
+            DataMember:
+              Attrs:           3
+              Type:            4106
+              FieldOffset:     16
+              Name:            version
+          - Kind:            LF_MEMBER
+            DataMember:
+              Attrs:           3
+              Type:            4106
+              FieldOffset:     24
+              Name:            uuid
+          - Kind:            LF_MEMBER
+            DataMember:
+              Attrs:           3
+              Type:            116
+              FieldOffset:     32
+              Name:            lcid
+          - Kind:            LF_MEMBER
+            DataMember:
+              Attrs:           3
+              Type:            48
+              FieldOffset:     36
+              Name:            control
+          - Kind:            LF_MEMBER
+            DataMember:
+              Attrs:           3
+              Type:            4106
+              FieldOffset:     40
+              Name:            helpstring
+          - Kind:            LF_MEMBER
+            DataMember:
+              Attrs:           3
+              Type:            116
+              FieldOffset:     48
+              Name:            helpstringcontext
+          - Kind:            LF_MEMBER
+            DataMember:
+              Attrs:           3
+              Type:            4106
+              FieldOffset:     56
+              Name:            helpstringdll
+          - Kind:            LF_MEMBER
+            DataMember:
+              Attrs:           3
+              Type:            4106
+              FieldOffset:     64
+              Name:            helpfile
+          - Kind:            LF_MEMBER
+            DataMember:
+              Attrs:           3
+              Type:            116
+              FieldOffset:     72
+              Name:            helpcontext
+          - Kind:            LF_MEMBER
+            DataMember:
+              Attrs:           3
+              Type:            48
+              FieldOffset:     76
+              Name:            hidden
+          - Kind:            LF_MEMBER
+            DataMember:
+              Attrs:           3
+              Type:            48
+              FieldOffset:     77
+              Name:            restricted
+          - Kind:            LF_MEMBER
+            DataMember:
+              Attrs:           3
+              Type:            4106
+              FieldOffset:     80
+              Name:            custom
+          - Kind:            LF_MEMBER
+            DataMember:
+              Attrs:           3
+              Type:            4106
+              FieldOffset:     88
+              Name:            resource_name
+      - Kind:            LF_STRUCTURE
+        Class:
+          MemberCount:     19
+          Options:         [ None, HasConstructorOrDestructor, ContainsNestedClass, HasUniqueName ]
+          FieldList:       4115
+          Name:            '__vc_attributes::moduleAttribute'
+          UniqueName:      '.?AUmoduleAttribute at __vc_attributes@@'
+          DerivationList:  0
+          VTableShape:     0
+          Size:            96
+      - Kind:            LF_UDT_SRC_LINE
+        UdtSourceLine:
+          UDT:             4116
+          SourceFile:      4103
+          LineNumber:      481
+      - Kind:            LF_STRUCTURE
+        Class:
+          MemberCount:     0
+          Options:         [ None, ForwardReference, HasUniqueName ]
+          FieldList:       0
+          Name:            '__vc_attributes::event_receiverAttribute'
+          UniqueName:      '.?AUevent_receiverAttribute at __vc_attributes@@'
+          DerivationList:  0
+          VTableShape:     0
+          Size:            0
+      - Kind:            LF_FIELDLIST
+        FieldList:
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           0
+              Name:            native
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           1
+              Name:            com
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           2
+              Name:            managed
+      - Kind:            LF_ENUM
+        Enum:
+          NumEnumerators:  3
+          Options:         [ None, Nested, HasUniqueName ]
+          FieldList:       4119
+          Name:            '__vc_attributes::event_receiverAttribute::type_e'
+          UniqueName:      '.?AW4type_e at event_receiverAttribute@__vc_attributes@@'
+          UnderlyingType:  116
+      - Kind:            LF_UDT_SRC_LINE
+        UdtSourceLine:
+          UDT:             4120
+          SourceFile:      4103
+          LineNumber:      136
+      - Kind:            LF_ARGLIST
+        ArgList:
+          ArgIndices:      [ 4120, 48 ]
+      - Kind:            LF_POINTER
+        Pointer:
+          ReferentType:    4118
+          Attrs:           66572
+      - Kind:            LF_MFUNCTION
+        MemberFunction:
+          ReturnType:      3
+          ClassType:       4118
+          ThisType:        4123
+          CallConv:        NearC
+          Options:         [ None, Constructor ]
+          ParameterCount:  2
+          ArgumentList:    4122
+          ThisPointerAdjustment: 0
+      - Kind:            LF_ARGLIST
+        ArgList:
+          ArgIndices:      [ 4120 ]
+      - Kind:            LF_MFUNCTION
+        MemberFunction:
+          ReturnType:      3
+          ClassType:       4118
+          ThisType:        4123
+          CallConv:        NearC
+          Options:         [ None, Constructor ]
+          ParameterCount:  1
+          ArgumentList:    4125
+          ThisPointerAdjustment: 0
+      - Kind:            LF_MFUNCTION
+        MemberFunction:
+          ReturnType:      3
+          ClassType:       4118
+          ThisType:        4123
+          CallConv:        NearC
+          Options:         [ None, Constructor ]
+          ParameterCount:  0
+          ArgumentList:    4112
+          ThisPointerAdjustment: 0
+      - Kind:            LF_METHODLIST
+        MethodOverloadList:
+          Methods:
+            - Type:            4124
+              Attrs:           3
+              VFTableOffset:   -1
+              Name:            ''
+            - Type:            4126
+              Attrs:           3
+              VFTableOffset:   -1
+              Name:            ''
+            - Type:            4127
+              Attrs:           3
+              VFTableOffset:   -1
+              Name:            ''
+      - Kind:            LF_FIELDLIST
+        FieldList:
+          - Kind:            LF_NESTTYPE
+            NestedType:
+              Type:            4120
+              Name:            type_e
+          - Kind:            LF_METHOD
+            OverloadedMethod:
+              NumOverloads:    3
+              MethodList:      4128
+              Name:            event_receiverAttribute
+          - Kind:            LF_MEMBER
+            DataMember:
+              Attrs:           3
+              Type:            4120
+              FieldOffset:     0
+              Name:            type
+          - Kind:            LF_MEMBER
+            DataMember:
+              Attrs:           3
+              Type:            48
+              FieldOffset:     4
+              Name:            layout_dependent
+      - Kind:            LF_STRUCTURE
+        Class:
+          MemberCount:     6
+          Options:         [ None, HasConstructorOrDestructor, ContainsNestedClass, HasUniqueName ]
+          FieldList:       4129
+          Name:            '__vc_attributes::event_receiverAttribute'
+          UniqueName:      '.?AUevent_receiverAttribute at __vc_attributes@@'
+          DerivationList:  0
+          VTableShape:     0
+          Size:            8
+      - Kind:            LF_UDT_SRC_LINE
+        UdtSourceLine:
+          UDT:             4130
+          SourceFile:      4103
+          LineNumber:      135
+      - Kind:            LF_STRUCTURE
+        Class:
+          MemberCount:     0
+          Options:         [ None, ForwardReference, HasUniqueName ]
+          FieldList:       0
+          Name:            '__vc_attributes::aggregatableAttribute'
+          UniqueName:      '.?AUaggregatableAttribute at __vc_attributes@@'
+          DerivationList:  0
+          VTableShape:     0
+          Size:            0
+      - Kind:            LF_FIELDLIST
+        FieldList:
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           0
+              Name:            never
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           1
+              Name:            allowed
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           2
+              Name:            always
+      - Kind:            LF_ENUM
+        Enum:
+          NumEnumerators:  3
+          Options:         [ None, Nested, HasUniqueName ]
+          FieldList:       4133
+          Name:            '__vc_attributes::aggregatableAttribute::type_e'
+          UniqueName:      '.?AW4type_e at aggregatableAttribute@__vc_attributes@@'
+          UnderlyingType:  116
+      - Kind:            LF_UDT_SRC_LINE
+        UdtSourceLine:
+          UDT:             4134
+          SourceFile:      4103
+          LineNumber:      545
+      - Kind:            LF_ARGLIST
+        ArgList:
+          ArgIndices:      [ 4134 ]
+      - Kind:            LF_POINTER
+        Pointer:
+          ReferentType:    4132
+          Attrs:           66572
+      - Kind:            LF_MFUNCTION
+        MemberFunction:
+          ReturnType:      3
+          ClassType:       4132
+          ThisType:        4137
+          CallConv:        NearC
+          Options:         [ None, Constructor ]
+          ParameterCount:  1
+          ArgumentList:    4136
+          ThisPointerAdjustment: 0
+      - Kind:            LF_MFUNCTION
+        MemberFunction:
+          ReturnType:      3
+          ClassType:       4132
+          ThisType:        4137
+          CallConv:        NearC
+          Options:         [ None, Constructor ]
+          ParameterCount:  0
+          ArgumentList:    4112
+          ThisPointerAdjustment: 0
+      - Kind:            LF_METHODLIST
+        MethodOverloadList:
+          Methods:
+            - Type:            4138
+              Attrs:           3
+              VFTableOffset:   -1
+              Name:            ''
+            - Type:            4139
+              Attrs:           3
+              VFTableOffset:   -1
+              Name:            ''
+      - Kind:            LF_FIELDLIST
+        FieldList:
+          - Kind:            LF_NESTTYPE
+            NestedType:
+              Type:            4134
+              Name:            type_e
+          - Kind:            LF_METHOD
+            OverloadedMethod:
+              NumOverloads:    2
+              MethodList:      4140
+              Name:            aggregatableAttribute
+          - Kind:            LF_MEMBER
+            DataMember:
+              Attrs:           3
+              Type:            4134
+              FieldOffset:     0
+              Name:            type
+      - Kind:            LF_STRUCTURE
+        Class:
+          MemberCount:     4
+          Options:         [ None, HasConstructorOrDestructor, ContainsNestedClass, HasUniqueName ]
+          FieldList:       4141
+          Name:            '__vc_attributes::aggregatableAttribute'
+          UniqueName:      '.?AUaggregatableAttribute at __vc_attributes@@'
+          DerivationList:  0
+          VTableShape:     0
+          Size:            4
+      - Kind:            LF_UDT_SRC_LINE
+        UdtSourceLine:
+          UDT:             4142
+          SourceFile:      4103
+          LineNumber:      544
+      - Kind:            LF_STRUCTURE
+        Class:
+          MemberCount:     0
+          Options:         [ None, ForwardReference, HasUniqueName ]
+          FieldList:       0
+          Name:            '__vc_attributes::threadingAttribute'
+          UniqueName:      '.?AUthreadingAttribute at __vc_attributes@@'
+          DerivationList:  0
+          VTableShape:     0
+          Size:            0
+      - Kind:            LF_FIELDLIST
+        FieldList:
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           1
+              Name:            apartment
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           2
+              Name:            single
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           3
+              Name:            free
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           4
+              Name:            neutral
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           5
+              Name:            both
+      - Kind:            LF_ENUM
+        Enum:
+          NumEnumerators:  5
+          Options:         [ None, Nested, HasUniqueName ]
+          FieldList:       4145
+          Name:            '__vc_attributes::threadingAttribute::threading_e'
+          UniqueName:      '.?AW4threading_e at threadingAttribute@__vc_attributes@@'
+          UnderlyingType:  116
+      - Kind:            LF_UDT_SRC_LINE
+        UdtSourceLine:
+          UDT:             4146
+          SourceFile:      4103
+          LineNumber:      423
+      - Kind:            LF_ARGLIST
+        ArgList:
+          ArgIndices:      [ 4146 ]
+      - Kind:            LF_POINTER
+        Pointer:
+          ReferentType:    4144
+          Attrs:           66572
+      - Kind:            LF_MFUNCTION
+        MemberFunction:
+          ReturnType:      3
+          ClassType:       4144
+          ThisType:        4149
+          CallConv:        NearC
+          Options:         [ None, Constructor ]
+          ParameterCount:  1
+          ArgumentList:    4148
+          ThisPointerAdjustment: 0
+      - Kind:            LF_MFUNCTION
+        MemberFunction:
+          ReturnType:      3
+          ClassType:       4144
+          ThisType:        4149
+          CallConv:        NearC
+          Options:         [ None, Constructor ]
+          ParameterCount:  0
+          ArgumentList:    4112
+          ThisPointerAdjustment: 0
+      - Kind:            LF_METHODLIST
+        MethodOverloadList:
+          Methods:
+            - Type:            4150
+              Attrs:           3
+              VFTableOffset:   -1
+              Name:            ''
+            - Type:            4151
+              Attrs:           3
+              VFTableOffset:   -1
+              Name:            ''
+      - Kind:            LF_FIELDLIST
+        FieldList:
+          - Kind:            LF_NESTTYPE
+            NestedType:
+              Type:            4146
+              Name:            threading_e
+          - Kind:            LF_METHOD
+            OverloadedMethod:
+              NumOverloads:    2
+              MethodList:      4152
+              Name:            threadingAttribute
+          - Kind:            LF_MEMBER
+            DataMember:
+              Attrs:           3
+              Type:            4146
+              FieldOffset:     0
+              Name:            value
+      - Kind:            LF_STRUCTURE
+        Class:
+          MemberCount:     4
+          Options:         [ None, HasConstructorOrDestructor, ContainsNestedClass, HasUniqueName ]
+          FieldList:       4153
+          Name:            '__vc_attributes::threadingAttribute'
+          UniqueName:      '.?AUthreadingAttribute at __vc_attributes@@'
+          DerivationList:  0
+          VTableShape:     0
+          Size:            4
+      - Kind:            LF_UDT_SRC_LINE
+        UdtSourceLine:
+          UDT:             4154
+          SourceFile:      4103
+          LineNumber:      422
+      - Kind:            LF_STRUCTURE
+        Class:
+          MemberCount:     0
+          Options:         [ None, ForwardReference, HasUniqueName ]
+          FieldList:       0
+          Name:            '__vc_attributes::helper_attributes::usageAttribute'
+          UniqueName:      '.?AUusageAttribute at helper_attributes@__vc_attributes@@'
+          DerivationList:  0
+          VTableShape:     0
+          Size:            0
+      - Kind:            LF_FIELDLIST
+        FieldList:
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           0
+              Name:            eAnyUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           1
+              Name:            eCoClassUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           2
+              Name:            eCOMInterfaceUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           6
+              Name:            eInterfaceUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           8
+              Name:            eMemberUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           16
+              Name:            eMethodUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           32
+              Name:            eInterfaceMethodUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           64
+              Name:            eInterfaceMemberUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           128
+              Name:            eCoClassMemberUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           256
+              Name:            eCoClassMethodUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           768
+              Name:            eGlobalMethodUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           1024
+              Name:            eGlobalDataUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           2048
+              Name:            eClassUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           4096
+              Name:            eInterfaceParameterUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           12288
+              Name:            eMethodParameterUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           16384
+              Name:            eIDLModuleUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           32768
+              Name:            eAnonymousUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           65536
+              Name:            eTypedefUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           131072
+              Name:            eUnionUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           262144
+              Name:            eEnumUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           524288
+              Name:            eDefineTagUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           1048576
+              Name:            eStructUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           2097152
+              Name:            eLocalUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           4194304
+              Name:            ePropertyUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           8388608
+              Name:            eEventUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           16777216
+              Name:            eTemplateUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           16777216
+              Name:            eModuleUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           33554432
+              Name:            eIllegalUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           67108864
+              Name:            eAsynchronousUsage
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           4161535
+              Name:            eAnyIDLUsage
+      - Kind:            LF_ENUM
+        Enum:
+          NumEnumerators:  30
+          Options:         [ None, Nested, HasUniqueName ]
+          FieldList:       4157
+          Name:            '__vc_attributes::helper_attributes::usageAttribute::usage_e'
+          UniqueName:      '.?AW4usage_e at usageAttribute@helper_attributes at __vc_attributes@@'
+          UnderlyingType:  116
+      - Kind:            LF_UDT_SRC_LINE
+        UdtSourceLine:
+          UDT:             4158
+          SourceFile:      4103
+          LineNumber:      51
+      - Kind:            LF_ARGLIST
+        ArgList:
+          ArgIndices:      [ 117 ]
+      - Kind:            LF_POINTER
+        Pointer:
+          ReferentType:    4156
+          Attrs:           66572
+      - Kind:            LF_MFUNCTION
+        MemberFunction:
+          ReturnType:      3
+          ClassType:       4156
+          ThisType:        4161
+          CallConv:        NearC
+          Options:         [ None, Constructor ]
+          ParameterCount:  1
+          ArgumentList:    4160
+          ThisPointerAdjustment: 0
+      - Kind:            LF_FIELDLIST
+        FieldList:
+          - Kind:            LF_NESTTYPE
+            NestedType:
+              Type:            4158
+              Name:            usage_e
+          - Kind:            LF_ONEMETHOD
+            OneMethod:
+              Type:            4162
+              Attrs:           3
+              VFTableOffset:   -1
+              Name:            usageAttribute
+          - Kind:            LF_MEMBER
+            DataMember:
+              Attrs:           3
+              Type:            117
+              FieldOffset:     0
+              Name:            value
+      - Kind:            LF_STRUCTURE
+        Class:
+          MemberCount:     3
+          Options:         [ None, HasConstructorOrDestructor, ContainsNestedClass, HasUniqueName ]
+          FieldList:       4163
+          Name:            '__vc_attributes::helper_attributes::usageAttribute'
+          UniqueName:      '.?AUusageAttribute at helper_attributes@__vc_attributes@@'
+          DerivationList:  0
+          VTableShape:     0
+          Size:            4
+      - Kind:            LF_UDT_SRC_LINE
+        UdtSourceLine:
+          UDT:             4164
+          SourceFile:      4103
+          LineNumber:      49
+      - Kind:            LF_STRUCTURE
+        Class:
+          MemberCount:     0
+          Options:         [ None, ForwardReference, HasUniqueName ]
+          FieldList:       0
+          Name:            '__vc_attributes::helper_attributes::v1_alttypeAttribute'
+          UniqueName:      '.?AUv1_alttypeAttribute at helper_attributes@__vc_attributes@@'
+          DerivationList:  0
+          VTableShape:     0
+          Size:            0
+      - Kind:            LF_FIELDLIST
+        FieldList:
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           0
+              Name:            eBoolean
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           1
+              Name:            eInteger
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           2
+              Name:            eFloat
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           3
+              Name:            eDouble
+      - Kind:            LF_ENUM
+        Enum:
+          NumEnumerators:  4
+          Options:         [ None, Nested, HasUniqueName ]
+          FieldList:       4167
+          Name:            '__vc_attributes::helper_attributes::v1_alttypeAttribute::type_e'
+          UniqueName:      '.?AW4type_e at v1_alttypeAttribute@helper_attributes at __vc_attributes@@'
+          UnderlyingType:  116
+      - Kind:            LF_UDT_SRC_LINE
+        UdtSourceLine:
+          UDT:             4168
+          SourceFile:      4103
+          LineNumber:      38
+      - Kind:            LF_ARGLIST
+        ArgList:
+          ArgIndices:      [ 4168 ]
+      - Kind:            LF_POINTER
+        Pointer:
+          ReferentType:    4166
+          Attrs:           66572
+      - Kind:            LF_MFUNCTION
+        MemberFunction:
+          ReturnType:      3
+          ClassType:       4166
+          ThisType:        4171
+          CallConv:        NearC
+          Options:         [ None, Constructor ]
+          ParameterCount:  1
+          ArgumentList:    4170
+          ThisPointerAdjustment: 0
+      - Kind:            LF_FIELDLIST
+        FieldList:
+          - Kind:            LF_NESTTYPE
+            NestedType:
+              Type:            4168
+              Name:            type_e
+          - Kind:            LF_ONEMETHOD
+            OneMethod:
+              Type:            4172
+              Attrs:           3
+              VFTableOffset:   -1
+              Name:            v1_alttypeAttribute
+          - Kind:            LF_MEMBER
+            DataMember:
+              Attrs:           3
+              Type:            4168
+              FieldOffset:     0
+              Name:            type
+      - Kind:            LF_STRUCTURE
+        Class:
+          MemberCount:     3
+          Options:         [ None, HasConstructorOrDestructor, ContainsNestedClass, HasUniqueName ]
+          FieldList:       4173
+          Name:            '__vc_attributes::helper_attributes::v1_alttypeAttribute'
+          UniqueName:      '.?AUv1_alttypeAttribute at helper_attributes@__vc_attributes@@'
+          DerivationList:  0
+          VTableShape:     0
+          Size:            4
+      - Kind:            LF_UDT_SRC_LINE
+        UdtSourceLine:
+          UDT:             4174
+          SourceFile:      4103
+          LineNumber:      37
+      - Kind:            LF_STRUCTURE
+        Class:
+          MemberCount:     0
+          Options:         [ None, ForwardReference, HasUniqueName ]
+          FieldList:       0
+          Name:            '__vc_attributes::event_sourceAttribute'
+          UniqueName:      '.?AUevent_sourceAttribute at __vc_attributes@@'
+          DerivationList:  0
+          VTableShape:     0
+          Size:            0
+      - Kind:            LF_FIELDLIST
+        FieldList:
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           0
+              Name:            native
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           1
+              Name:            com
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           2
+              Name:            managed
+      - Kind:            LF_ENUM
+        Enum:
+          NumEnumerators:  3
+          Options:         [ None, Nested, HasUniqueName ]
+          FieldList:       4177
+          Name:            '__vc_attributes::event_sourceAttribute::type_e'
+          UniqueName:      '.?AW4type_e at event_sourceAttribute@__vc_attributes@@'
+          UnderlyingType:  116
+      - Kind:            LF_UDT_SRC_LINE
+        UdtSourceLine:
+          UDT:             4178
+          SourceFile:      4103
+          LineNumber:      1142
+      - Kind:            LF_FIELDLIST
+        FieldList:
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           0
+              Name:            speed
+          - Kind:            LF_ENUMERATE
+            Enumerator:
+              Attrs:           3
+              Value:           1
+              Name:            size
+      - Kind:            LF_ENUM
+        Enum:
+          NumEnumerators:  2
+          Options:         [ None, Nested, HasUniqueName ]
+          FieldList:       4180
+          Name:            '__vc_attributes::event_sourceAttribute::optimize_e'
+          UniqueName:      '.?AW4optimize_e at event_sourceAttribute@__vc_attributes@@'
+          UnderlyingType:  116
+      - Kind:            LF_UDT_SRC_LINE
+        UdtSourceLine:
+          UDT:             4181
+          SourceFile:      4103
+          LineNumber:      1145
+      - Kind:            LF_ARGLIST
+        ArgList:
+          ArgIndices:      [ 4178 ]
+      - Kind:            LF_POINTER
+        Pointer:
+          ReferentType:    4176
+          Attrs:           66572
+      - Kind:            LF_MFUNCTION
+        MemberFunction:
+          ReturnType:      3
+          ClassType:       4176
+          ThisType:        4184
+          CallConv:        NearC
+          Options:         [ None, Constructor ]
+          ParameterCount:  1
+          ArgumentList:    4183
+          ThisPointerAdjustment: 0
+      - Kind:            LF_MFUNCTION
+        MemberFunction:
+          ReturnType:      3
+          ClassType:       4176
+          ThisType:        4184
+          CallConv:        NearC
+          Options:         [ None, Constructor ]
+          ParameterCount:  0
+          ArgumentList:    4112
+          ThisPointerAdjustment: 0
+      - Kind:            LF_METHODLIST
+        MethodOverloadList:
+          Methods:
+            - Type:            4185
+              Attrs:           3
+              VFTableOffset:   -1
+              Name:            ''
+            - Type:            4186
+              Attrs:           3
+              VFTableOffset:   -1
+              Name:            ''
+      - Kind:            LF_FIELDLIST
+        FieldList:
+          - Kind:            LF_NESTTYPE
+            NestedType:
+              Type:            4178
+              Name:            type_e
+          - Kind:            LF_NESTTYPE
+            NestedType:
+              Type:            4181
+              Name:            optimize_e
+          - Kind:            LF_METHOD
+            OverloadedMethod:
+              NumOverloads:    2
+              MethodList:      4187
+              Name:            event_sourceAttribute
+          - Kind:            LF_MEMBER
+            DataMember:
+              Attrs:           3
+              Type:            4178
+              FieldOffset:     0
+              Name:            type
+          - Kind:            LF_MEMBER
+            DataMember:
+              Attrs:           3
+              Type:            4181
+              FieldOffset:     4
+              Name:            optimize
+          - Kind:            LF_MEMBER
+            DataMember:
+              Attrs:           3
+              Type:            48
+              FieldOffset:     8
+              Name:            decorate
+      - Kind:            LF_STRUCTURE
+        Class:
+          MemberCount:     7
+          Options:         [ None, HasConstructorOrDestructor, ContainsNestedClass, HasUniqueName ]
+          FieldList:       4188
+          Name:            '__vc_attributes::event_sourceAttribute'
+          UniqueName:      '.?AUevent_sourceAttribute at __vc_attributes@@'
+          DerivationList:  0
+          VTableShape:     0
+          Size:            12
+      - Kind:            LF_UDT_SRC_LINE
+        UdtSourceLine:
+          UDT:             4189
+          SourceFile:      4103
+          LineNumber:      1141
+      - Kind:            LF_STRING_ID
+        StringId:
+          Id:              0
+          String:          'D:\src\llvmbuild\cl\Debug\x64'
+      - Kind:            LF_STRING_ID
+        StringId:
+          Id:              0
+          String:          'C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.11.25503\bin\HostX64\x64\cl.exe'
+      - Kind:            LF_STRING_ID
+        StringId:
+          Id:              0
+          String:          '-Z7 -O1 -c -MT -I"C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.11.25503\ATLMFC\include" -I"C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.11.25503\include" -I"C:\Program'
+      - Kind:            LF_STRING_ID
+        StringId:
+          Id:              0
+          String:          ' Files (x86)\Windows Kits\NETFXSDK\4.6.1\include\um" -I"C:\Program Files (x86)\Windows Kits\10\include\10.0.16299.0\ucrt" -I"C:\Program Files (x86)\Windows Kits\10\include\10.0.16299.0\shared" -I"C:\Program Files (x86)\Windows Kits\10\include\10.0.16299.0\um"'
+      - Kind:            LF_SUBSTR_LIST
+        StringList:
+          StringIndices:   [ 4193, 4194 ]
+      - Kind:            LF_STRING_ID
+        StringId:
+          Id:              4195
+          String:          ' -I"C:\Program Files (x86)\Windows Kits\10\include\10.0.16299.0\winrt" -TP -X'
+      - Kind:            LF_STRING_ID
+        StringId:
+          Id:              0
+          String:          b.cpp
+      - Kind:            LF_STRING_ID
+        StringId:
+          Id:              0
+          String:          'D:\src\llvmbuild\cl\Debug\x64\vc140.pdb'
+      - Kind:            LF_BUILDINFO
+        BuildInfo:
+          ArgIndices:      [ 4191, 4192, 4197, 4198, 4196 ]
+  - Name:            .bss
+    Characteristics: [ IMAGE_SCN_CNT_UNINITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
+    Alignment:       4
+    SectionData:     ''
+  - Name:            '.text$mn'
+    Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+    Alignment:       4
+    SectionData:     4883EC288B0D0000000085C97405E8000000004883C428C3
+    Relocations:
+      - VirtualAddress:  6
+        SymbolName:      '?y@@3HA'
+        Type:            IMAGE_REL_AMD64_REL32
+      - VirtualAddress:  15
+        SymbolName:      '?a@@YAXH at Z'
+        Type:            IMAGE_REL_AMD64_REL32
+  - Name:            '.debug$S'
+    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
+    Alignment:       1
+    Subsections:
+      - !Symbols
+        Records:
+          - Kind:            S_GPROC32_ID
+            ProcSym:
+              CodeSize:        24
+              DbgStart:        4
+              DbgEnd:          19
+              FunctionType:    4098
+              Flags:           [ HasOptimizedDebugInfo ]
+              DisplayName:     b
+          - Kind:            S_LOCAL
+            LocalSym:
+              Type:            116
+              Flags:           [ IsParameter ]
+              VarName:         __formal
+          - Kind:            S_DEFRANGE_REGISTER
+            DefRangeRegisterSym:
+          - Kind:            S_DEFRANGE_FRAMEPOINTER_REL_FULL_SCOPE
+            DefRangeFramePointerRelFullScopeSym:
+          - Kind:            S_CALLEES
+            CallerSym:
+              FuncID:          [ 4099 ]
+          - Kind:            S_FILESTATIC
+            FileStaticSym:
+              Index:           116
+              ModFilenameOffset: 37
+              Flags:           [ IsEnregisteredGlobal, IsEnregisteredStatic ]
+              Name:            y
+          - Kind:            S_DEFRANGE_REGISTER
+            DefRangeRegisterSym:
+          - Kind:            S_FRAMEPROC
+            FrameProcSym:
+              TotalFrameBytes: 40
+              PaddingFrameBytes: 0
+              OffsetToPadding: 0
+              BytesOfCalleeSavedRegisters: 0
+              OffsetOfExceptionHandler: 0
+              SectionIdOfExceptionHandler: 0
+              Flags:           [ AsynchronousExceptionHandling ]
+          - Kind:            S_REGREL32
+            RegRelativeSym:
+              Offset:          48
+              Type:            116
+              Register:        RSP
+              VarName:         __formal
+          - Kind:            S_PROC_ID_END
+            ScopeEndSym:
+      - !Lines
+        CodeSize:        24
+        Flags:           [  ]
+        RelocOffset:     0
+        RelocSegment:    0
+        Blocks:
+          - FileName:        'd:\src\llvmbuild\cl\debug\x64\b.cpp'
+            Lines:
+              - Offset:          0
+                LineStart:       5
+                IsStatement:     true
+                EndDelta:        0
+              - Offset:          4
+                LineStart:       6
+                IsStatement:     true
+                EndDelta:        0
+              - Offset:          14
+                LineStart:       7
+                IsStatement:     true
+                EndDelta:        0
+              - Offset:          19
+                LineStart:       8
+                IsStatement:     true
+                EndDelta:        0
+            Columns:
+    Relocations:
+      - VirtualAddress:  44
+        SymbolName:      '?b@@YAXH at Z'
+        Type:            IMAGE_REL_AMD64_SECREL
+      - VirtualAddress:  48
+        SymbolName:      '?b@@YAXH at Z'
+        Type:            IMAGE_REL_AMD64_SECTION
+      - VirtualAddress:  80
+        SymbolName:      '?b@@YAXH at Z'
+        Type:            IMAGE_REL_AMD64_SECREL
+      - VirtualAddress:  84
+        SymbolName:      '?b@@YAXH at Z'
+        Type:            IMAGE_REL_AMD64_SECTION
+      - VirtualAddress:  132
+        SymbolName:      '?b@@YAXH at Z'
+        Type:            IMAGE_REL_AMD64_SECREL
+      - VirtualAddress:  136
+        SymbolName:      '?b@@YAXH at Z'
+        Type:            IMAGE_REL_AMD64_SECTION
+      - VirtualAddress:  208
+        SymbolName:      '?b@@YAXH at Z'
+        Type:            IMAGE_REL_AMD64_SECREL
+      - VirtualAddress:  212
+        SymbolName:      '?b@@YAXH at Z'
+        Type:            IMAGE_REL_AMD64_SECTION
+  - Name:            .xdata
+    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_READ ]
+    Alignment:       4
+    SectionData:     '0104010004420000'
+  - Name:            .pdata
+    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_READ ]
+    Alignment:       4
+    SectionData:     '000000001800000000000000'
+    Relocations:
+      - VirtualAddress:  0
+        SymbolName:      '$LN5'
+        Type:            IMAGE_REL_AMD64_ADDR32NB
+      - VirtualAddress:  4
+        SymbolName:      '$LN5'
+        Type:            IMAGE_REL_AMD64_ADDR32NB
+      - VirtualAddress:  8
+        SymbolName:      '$unwind$?b@@YAXH at Z'
+        Type:            IMAGE_REL_AMD64_ADDR32NB
+symbols:
+  - Name:            '@comp.id'
+    Value:           17130443
+    SectionNumber:   -1
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+  - Name:            '@feat.00'
+    Value:           2147484048
+    SectionNumber:   -1
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+  - Name:            .drectve
+    Value:           0
+    SectionNumber:   1
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+    SectionDefinition:
+      Length:          47
+      NumberOfRelocations: 0
+      NumberOfLinenumbers: 0
+      CheckSum:        0
+      Number:          0
+  - Name:            '.debug$S'
+    Value:           0
+    SectionNumber:   2
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+    SectionDefinition:
+      Length:          1096
+      NumberOfRelocations: 2
+      NumberOfLinenumbers: 0
+      CheckSum:        0
+      Number:          0
+  - Name:            '.debug$T'
+    Value:           0
+    SectionNumber:   3
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+    SectionDefinition:
+      Length:          6636
+      NumberOfRelocations: 0
+      NumberOfLinenumbers: 0
+      CheckSum:        0
+      Number:          0
+  - Name:            .bss
+    Value:           0
+    SectionNumber:   4
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+    SectionDefinition:
+      Length:          4
+      NumberOfRelocations: 0
+      NumberOfLinenumbers: 0
+      CheckSum:        0
+      Number:          0
+  - Name:            '?y@@3HA'
+    Value:           0
+    SectionNumber:   4
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+  - Name:            '.text$mn'
+    Value:           0
+    SectionNumber:   5
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+    SectionDefinition:
+      Length:          24
+      NumberOfRelocations: 2
+      NumberOfLinenumbers: 0
+      CheckSum:        211387054
+      Number:          0
+      Selection:       IMAGE_COMDAT_SELECT_NODUPLICATES
+  - Name:            '.debug$S'
+    Value:           0
+    SectionNumber:   6
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+    SectionDefinition:
+      Length:          264
+      NumberOfRelocations: 8
+      NumberOfLinenumbers: 0
+      CheckSum:        0
+      Number:          5
+      Selection:       IMAGE_COMDAT_SELECT_ASSOCIATIVE
+  - Name:            '?a@@YAXH at Z'
+    Value:           0
+    SectionNumber:   0
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_FUNCTION
+    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
+  - Name:            '?b@@YAXH at Z'
+    Value:           0
+    SectionNumber:   5
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_FUNCTION
+    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
+  - Name:            '$LN5'
+    Value:           0
+    SectionNumber:   5
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_LABEL
+  - Name:            .xdata
+    Value:           0
+    SectionNumber:   7
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+    SectionDefinition:
+      Length:          8
+      NumberOfRelocations: 0
+      NumberOfLinenumbers: 0
+      CheckSum:        264583633
+      Number:          5
+      Selection:       IMAGE_COMDAT_SELECT_ASSOCIATIVE
+  - Name:            '$unwind$?b@@YAXH at Z'
+    Value:           0
+    SectionNumber:   7
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+  - Name:            .pdata
+    Value:           0
+    SectionNumber:   8
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+    SectionDefinition:
+      Length:          12
+      NumberOfRelocations: 3
+      NumberOfLinenumbers: 0
+      CheckSum:        2942184094
+      Number:          5
+      Selection:       IMAGE_COMDAT_SELECT_ASSOCIATIVE
+  - Name:            '$pdata$?b@@YAXH at Z'
+    Value:           0
+    SectionNumber:   8
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+...

Added: lld/trunk/test/COFF/pdb-file-static.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/pdb-file-static.test?rev=321883&view=auto
==============================================================================
--- lld/trunk/test/COFF/pdb-file-static.test (added)
+++ lld/trunk/test/COFF/pdb-file-static.test Fri Jan  5 11:12:40 2018
@@ -0,0 +1,51 @@
+# RUN: yaml2obj %S/Inputs/pdb-file-statics-a.yaml > %t.a.obj
+# RUN: yaml2obj %S/Inputs/pdb-file-statics-b.yaml > %t.b.obj
+# RUN: lld-link %t.a.obj %t.b.obj /nodefaultlib /entry:main /debug /pdb:%t.pdb
+# RUN: llvm-pdbutil dump -symbols %t.pdb | FileCheck %s
+
+# S_FILESTATIC records are unique in that they refer to the string table, but
+# they do *not* go through the file checksums table.  They refer directly to
+# the string table.  This makes for special handling in the linker, so it
+# deserves a custom test.
+
+# Clang doesn't currently generate these records, but MSVC does, so we have to
+# be able to correctly link them.  These records are only generated when
+# optimizations are turned on.
+
+# // a.cpp
+# // cl.exe /Z7 /O1 /c a.cpp
+# static int x = 0;
+#
+# void b(int);
+#
+# void a(int) {
+#   if (x)
+#     b(x);
+# }
+#
+# int main(int argc, char **argv) {
+#   a(argc);
+#   return x;
+# }
+#
+# // b.cpp
+# // cl.exe /Z7 /O1 /c a.cpp
+# void a(int);
+#
+# static int y = 0;
+#
+# void b(int) {
+#   if (y)
+#     a(y);
+# }
+
+# CHECK:                           Symbols
+# CHECK: ============================================================
+# CHECK-LABEL:   Mod 0000 | `{{.*}}a.obj`:
+# CHECK:              232 | S_FILESTATIC [size = 16] `x`
+# CHECK-NEXT:               type = 0x0074 (int), file name = 1 (D:\src\llvmbuild\cl\Debug\x64\a.obj), flags = enreg global | enreg static
+# CHECK:         Mod 0001 | `{{.*}}b.obj`:
+# CHECK:              232 | S_FILESTATIC [size = 16] `y`
+# CHECK-NEXT:               type = 0x0074 (int), file name = 73 (D:\src\llvmbuild\cl\Debug\x64\b.obj), flags = enreg global | enreg static
+# CHECK-LABEL:   Mod 0002 | `* Linker *`:
+

Modified: lld/trunk/test/COFF/pdb-source-lines.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/pdb-source-lines.test?rev=321883&r1=321882&r2=321883&view=diff
==============================================================================
--- lld/trunk/test/COFF/pdb-source-lines.test (original)
+++ lld/trunk/test/COFF/pdb-source-lines.test Fri Jan  5 11:12:40 2018
@@ -64,14 +64,6 @@ CHECK-NEXT:                   LineStart:
 CHECK-NEXT:                   IsStatement:     true
 CHECK-NEXT:                   EndDelta:        0
 CHECK-NEXT:               Columns:
-CHECK-NEXT:         - !FileChecksums
-CHECK-NEXT:           Checksums:
-CHECK-NEXT:             - FileName:        '{{.*}}pdb_lines_1.c'
-CHECK-NEXT:               Kind:            MD5
-CHECK-NEXT:               Checksum:        4EB19DCD86C3BA2238A255C718572E7B
-CHECK-NEXT:             - FileName:        '{{.*}}foo.h'
-CHECK-NEXT:               Kind:            MD5
-CHECK-NEXT:               Checksum:        061EB73ABB642532857A4F1D9CBAC323
 CHECK-NEXT:         - !Lines
 CHECK-NEXT:           CodeSize:        14
 CHECK-NEXT:           Flags:           [  ]
@@ -93,6 +85,14 @@ CHECK-NEXT:                   LineStart:
 CHECK-NEXT:                   IsStatement:     true
 CHECK-NEXT:                   EndDelta:        0
 CHECK-NEXT:               Columns:
+CHECK-NEXT:         - !FileChecksums
+CHECK-NEXT:           Checksums:
+CHECK-NEXT:             - FileName:        '{{.*}}pdb_lines_1.c'
+CHECK-NEXT:               Kind:            MD5
+CHECK-NEXT:               Checksum:        4EB19DCD86C3BA2238A255C718572E7B
+CHECK-NEXT:             - FileName:        '{{.*}}foo.h'
+CHECK-NEXT:               Kind:            MD5
+CHECK-NEXT:               Checksum:        061EB73ABB642532857A4F1D9CBAC323
 
 CHECK-LABEL:    - Module:          {{.*}}pdb_lines_2.obj
 CHECK-NEXT:       ObjFile:         {{.*}}pdb_lines_2.obj




More information about the llvm-commits mailing list