summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorReid Kleckner <rnk@google.com>2018-05-17 20:47:22 +0000
committerReid Kleckner <rnk@google.com>2018-05-17 20:47:22 +0000
commitf40f85868e690eefc3bb65f030e5f7890d349794 (patch)
treebb04d9404c9065f113511b0ff14b273595c3e2e8
parent0d8fa1b6fda2acf85f01ec550781ccd70a547967 (diff)
downloadbcm5719-llvm-f40f85868e690eefc3bb65f030e5f7890d349794.tar.gz
bcm5719-llvm-f40f85868e690eefc3bb65f030e5f7890d349794.zip
[codeview] Include record prefix in global type hashing
The prefix includes type kind, which is important to preserve. Two different type leafs can easily have the same interior record contents as another type. We ran into this issue in PR37492 where a bitfield type record collided with a const modifier record. Their contents were bitwise identical, but their kinds were different. llvm-svn: 332664
-rw-r--r--lld/test/COFF/Inputs/pdb-hashes-1.yaml140
-rw-r--r--lld/test/COFF/Inputs/pdb-hashes-2-missing.yaml45
-rw-r--r--lld/test/COFF/Inputs/pdb-hashes-2.yaml77
-rw-r--r--lld/test/COFF/pdb-global-hashes.test4
-rw-r--r--llvm/lib/DebugInfo/CodeView/TypeHashing.cpp1
-rw-r--r--llvm/test/DebugInfo/COFF/global-type-hashes.ll55
-rw-r--r--llvm/test/DebugInfo/COFF/pr37492.ll63
-rw-r--r--llvm/test/DebugInfo/PDB/obj-globalhash.test22
8 files changed, 270 insertions, 137 deletions
diff --git a/lld/test/COFF/Inputs/pdb-hashes-1.yaml b/lld/test/COFF/Inputs/pdb-hashes-1.yaml
index ba11ed1bf78..80670117489 100644
--- a/lld/test/COFF/Inputs/pdb-hashes-1.yaml
+++ b/lld/test/COFF/Inputs/pdb-hashes-1.yaml
@@ -6,7 +6,7 @@ sections:
- Name: .text
Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
Alignment: 16
- SectionData: 5589E55683EC188B450C8B4D088D55F4C745F8000000008B7508894DF089D18934248945ECE80000000083EC048D4DF4890C248945E8E80000000083C4185E5DC3
+ SectionData: 5589E55683EC188B450C8B4D08C745F8000000008B55088D75F4894DF089F18914248945ECE80000000083EC048D4DF4890C248945E8E80000000083C4185E5DC3
Relocations:
- VirtualAddress: 38
SymbolName: '??0Foo@NS@@QAE@H@Z'
@@ -33,7 +33,7 @@ sections:
- Name: '.debug$S'
Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
Alignment: 4
- SectionData: 04000000F10000002F0000002D003C1101000000070006000000000000007017000000000000636C616E672076657273696F6E20362E302E30200000F50000008400000000000000000000004100000000000000080000000000000052000000070000000400000001000000400000000000000008000000000000007F0000000600040000000000030000003E000000000000000800000000000000BD0000000400040000000000040000003D000000000000000800000000000000FA0000000300080000000000F1000000960000002A00471100000000000000000000000041000000000000000000000003100000000000000000006D61696E000D003E1174000000010061726763001200451116000000080000001700000000002A000D003E11001000000100617267760012004511160000000C0000001700000000002A000A003E1109100000000066001200451116000000F4FFFFFF1700000000002A0002004F110000F200000030000000000000000000000041000000000000000300000024000000000000000300000017000000040000003000000005000000F1000000100000000E000811091000004E533A3A466F6F00F40000003000000001000000100165C9E387F88362A8EB2B49539DD5A65500002B00000010019303CF100D518DAF59C31DA01FEF4AFC0000F30000004801000000443A5C7372635C6C6C766D6275696C645C636C616E675C44656275675C7838365C6F626A312E63707000443A5C7372635C6C6C766D6275696C645C636C616E675C44656275675C7838365C6F626A2E6800245430202E7261536561726368203D202465697020245430205E203D2024657370202454302034202B203D2000245430202E7261536561726368203D202465697020245430205E203D2024657370202454302034202B203D2024656270202454302034202D205E203D200024543020246562702034202B203D202465697020245430205E203D2024657370202454302034202B203D2024656270202454302034202D205E203D200024543020246562702034202B203D202465697020245430205E203D2024657370202454302034202B203D2024656270202454302034202D205E203D2024657369202454302038202D205E203D2000
+ SectionData: 04000000F10000002F0000002D003C110100000007000700000000000000581B000000000000636C616E672076657273696F6E20372E302E30200000F5000000840000000000000000000000410000000000000008000000000000004400000007000000040000000100000040000000000000000800000000000000710000000600040000000000030000003E000000000000000800000000000000AF0000000400040000000000040000003D000000000000000800000000000000EC0000000300080000000000F1000000960000002A00471100000000000000000000000041000000000000000000000003100000000000000000006D61696E000D003E1174000000010061726763001200451116000000080000001400000000002D000D003E11001000000100617267760012004511160000000C0000001400000000002D000A003E1109100000000066001200451116000000F4FFFFFF1400000000002D0002004F110000F200000030000000000000000000000041000000000000000300000024000000000000000400000014000000050000002D00000006000000F1000000100000000E000811091000004E533A3A466F6F00F4000000300000000100000010013469AC0DCAB9F1D7ED0FC4FA74E3983A0000240000001001C6036A3E7D29B0AB68FEE19A35B11BCD0000F30000003C01000000433A5C7372635C6C6C766D2D70726F6A6563745C6275696C645C6F626A312E63707000433A5C7372635C6C6C766D2D70726F6A6563745C6275696C645C6F626A2E6800245430202E7261536561726368203D202465697020245430205E203D2024657370202454302034202B203D2000245430202E7261536561726368203D202465697020245430205E203D2024657370202454302034202B203D2024656270202454302034202D205E203D200024543020246562702034202B203D202465697020245430205E203D2024657370202454302034202B203D2024656270202454302034202D205E203D200024543020246562702034202B203D202465697020245430205E203D2024657370202454302034202B203D2024656270202454302034202D205E203D2024657369202454302038202D205E203D20000000
Subsections:
- !Symbols
Records:
@@ -41,15 +41,15 @@ sections:
Compile3Sym:
Flags: [ ]
Machine: Pentium3
- FrontendMajor: 6
+ FrontendMajor: 7
FrontendMinor: 0
FrontendBuild: 0
FrontendQFE: 0
- BackendMajor: 6000
+ BackendMajor: 7000
BackendMinor: 0
BackendBuild: 0
BackendQFE: 0
- Version: 'clang version 6.0.0 '
+ Version: 'clang version 7.0.0 '
- !FrameData
Frames:
- CodeSize: 65
@@ -99,16 +99,46 @@ sections:
Type: 116
Flags: [ IsParameter ]
VarName: argc
+ - Kind: S_DEFRANGE_REGISTER_REL
+ DefRangeRegisterRelSym:
+ Register: 22
+ Flags: 0
+ BasePointerOffset: 8
+ Range:
+ OffsetStart: 20
+ ISectStart: 0
+ Range: 45
+ Gaps:
- Kind: S_LOCAL
LocalSym:
Type: 4096
Flags: [ IsParameter ]
VarName: argv
+ - Kind: S_DEFRANGE_REGISTER_REL
+ DefRangeRegisterRelSym:
+ Register: 22
+ Flags: 0
+ BasePointerOffset: 12
+ Range:
+ OffsetStart: 20
+ ISectStart: 0
+ Range: 45
+ Gaps:
- Kind: S_LOCAL
LocalSym:
Type: 4105
Flags: [ ]
VarName: f
+ - Kind: S_DEFRANGE_REGISTER_REL
+ DefRangeRegisterRelSym:
+ Register: 22
+ Flags: 0
+ BasePointerOffset: -12
+ Range:
+ OffsetStart: 20
+ ISectStart: 0
+ Range: 45
+ Gaps:
- Kind: S_PROC_ID_END
ScopeEndSym:
- !Lines
@@ -117,20 +147,20 @@ sections:
RelocOffset: 0
RelocSegment: 0
Blocks:
- - FileName: 'D:\src\llvmbuild\clang\Debug\x86\obj1.cpp'
+ - FileName: 'C:\src\llvm-project\build\obj1.cpp'
Lines:
- Offset: 0
- LineStart: 3
- IsStatement: false
- EndDelta: 0
- - Offset: 23
LineStart: 4
IsStatement: false
EndDelta: 0
- - Offset: 48
+ - Offset: 20
LineStart: 5
IsStatement: false
EndDelta: 0
+ - Offset: 45
+ LineStart: 6
+ IsStatement: false
+ EndDelta: 0
Columns:
- !Symbols
Records:
@@ -140,20 +170,22 @@ sections:
UDTName: 'NS::Foo'
- !FileChecksums
Checksums:
- - FileName: 'D:\src\llvmbuild\clang\Debug\x86\obj1.cpp'
+ - FileName: 'C:\src\llvm-project\build\obj1.cpp'
Kind: MD5
- Checksum: 65C9E387F88362A8EB2B49539DD5A655
- - FileName: 'D:\src\llvmbuild\clang\Debug\x86\obj.h'
+ Checksum: 3469AC0DCAB9F1D7ED0FC4FA74E3983A
+ - FileName: 'C:\src\llvm-project\build\obj.h'
Kind: MD5
- Checksum: 9303CF100D518DAF59C31DA01FEF4AFC
+ Checksum: C6036A3E7D29B0AB68FEE19A35B11BCD
- !StringTable
Strings:
- - 'D:\src\llvmbuild\clang\Debug\x86\obj1.cpp'
- - 'D:\src\llvmbuild\clang\Debug\x86\obj.h'
+ - 'C:\src\llvm-project\build\obj1.cpp'
+ - 'C:\src\llvm-project\build\obj.h'
- '$T0 .raSearch = $eip $T0 ^ = $esp $T0 4 + = '
- '$T0 .raSearch = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = '
- '$T0 $ebp 4 + = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = '
- '$T0 $ebp 4 + = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = $esi $T0 8 - ^ = '
+ - ''
+ - ''
Relocations:
- VirtualAddress: 68
SymbolName: _main
@@ -191,7 +223,7 @@ sections:
- Name: '.debug$T'
Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
Alignment: 4
- SectionData: 040000000A000210700400000A8000000E0001120200000074000000001000000E0008107400000000000200011000001200011600000000021000006D61696E00F3F2F12A0005150000800200000000000000000000000000004E533A3A466F6F002E3F4155466F6F404E53404000F10A000210041000000A8000000A00011201000000740000001A0009100300000004100000051000000B00010006100000000000001A0003120D15030074000000000058001115030007100000466F6F002A0005150200000208100000000000000000000004004E533A3A466F6F002E3F4155466F6F404E53404000F12E00051600000000443A5C7372635C6C6C766D6275696C645C636C616E675C44656275675C7838365C6F626A2E6800F10E000616091000000A100000020000000E0002160410000007100000466F6F00
+ SectionData: 040000000A000210700400000A8000000E0001120200000074000000001000000E0008107400000000000200011000001200011600000000021000006D61696E00F3F2F12A0005150000800200000000000000000000000000004E533A3A466F6F002E3F4155466F6F404E53404000F10A000210041000000A8000000A00011201000000740000001A0009100300000004100000051000000B00010006100000000000001A0003120D15030074000000000058001115030007100000466F6F002A0005150200000208100000000000000000000004004E533A3A466F6F002E3F4155466F6F404E53404000F12600051600000000433A5C7372635C6C6C766D2D70726F6A6563745C6275696C645C6F626A2E68000E000616091000000A100000030000000E0002160410000007100000466F6F00
Types:
- Kind: LF_POINTER
Pointer:
@@ -266,12 +298,12 @@ sections:
- Kind: LF_STRING_ID
StringId:
Id: 0
- String: 'D:\src\llvmbuild\clang\Debug\x86\obj.h'
+ String: 'C:\src\llvm-project\build\obj.h'
- Kind: LF_UDT_SRC_LINE
UdtSourceLine:
UDT: 4105
SourceFile: 4106
- LineNumber: 2
+ LineNumber: 3
- Kind: LF_MFUNC_ID
MemberFuncId:
ClassType: 4100
@@ -280,28 +312,28 @@ sections:
- Name: '.debug$H'
Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
Alignment: 4
- SectionData: C5C93301000000009E56666824DC4B12E25261D4E09E6E9DA0F4EE31FDEC3D2D96287486127C66070B248ED52E421F55074AE5CC2D68AF9F0A3BEF23993968F7FD82CA84BF0439C1A64C9070C6A6ADB0A34D21DAD0FFC3E99E616EF06A14EA74A2420F9062A1FB04917E5975E3A50EABE5E8FE3945468547C19DC681D0BFB3B797DD91CA4D7F1953C314442D5549419E78044E38A0BF16BFFAA5EE9C0103E7DBFE9941E63379C0B0C0A9021B711ACC4F67008974EBF441031BDD653F6935DFF3112C6A5346EF2AC94B9B7EB56EF55CFA0AF6C1846743F43D846BB19517E12E8873BBA90CC41DD1BEAC89CBA8897AC1BA46762E2557A82D894CEAE81AEF8680D723D403D9A4481F0E28683A98
+ SectionData: C5C9330100000000624A7FEE7323656B7F1C5A63800309EE1ED8BB5B0EB2C87AD629AA9E5C98B7A3ED69DB1355707DF1624E463ACE08649D0FC35F163E20CC43089ADCA64B712C03EDA4CB88537EBAE4005A09006A9FB389476700689419512EFB395F1A23ADA4E788EB7A90DA146E89F004E6185E87867C58B4AC836CBBD1301D1BC1BDEEB7F3A86BB7ECCF6632585CDC7606E4CCAB0C6E6E190E3091E4290AFF7BA25E9E8209892CA91CCBF55A49FCB303335DC553B426E3AC635C1883F35475E9A4A12ED6396BC795E5D801DB74B371743A7A9E69529643FB49E2201DD99ECA4F72B2213D30B9768BAE6EB7C1150155B4421347349E771F26985B869638BAA4FE40A80C07611AAF09B6A4
GlobalHashes:
Version: 0
HashAlgorithm: 0
HashValues:
- - 9E56666824DC4B12E25261D4E09E6E9DA0F4EE31
- - FDEC3D2D96287486127C66070B248ED52E421F55
- - 074AE5CC2D68AF9F0A3BEF23993968F7FD82CA84
- - BF0439C1A64C9070C6A6ADB0A34D21DAD0FFC3E9
- - 9E616EF06A14EA74A2420F9062A1FB04917E5975
- - E3A50EABE5E8FE3945468547C19DC681D0BFB3B7
- - 97DD91CA4D7F1953C314442D5549419E78044E38
- - A0BF16BFFAA5EE9C0103E7DBFE9941E63379C0B0
- - C0A9021B711ACC4F67008974EBF441031BDD653F
- - 6935DFF3112C6A5346EF2AC94B9B7EB56EF55CFA
- - 0AF6C1846743F43D846BB19517E12E8873BBA90C
- - C41DD1BEAC89CBA8897AC1BA46762E2557A82D89
- - 4CEAE81AEF8680D723D403D9A4481F0E28683A98
+ - 624A7FEE7323656B7F1C5A63800309EE1ED8BB5B
+ - 0EB2C87AD629AA9E5C98B7A3ED69DB1355707DF1
+ - 624E463ACE08649D0FC35F163E20CC43089ADCA6
+ - 4B712C03EDA4CB88537EBAE4005A09006A9FB389
+ - 476700689419512EFB395F1A23ADA4E788EB7A90
+ - DA146E89F004E6185E87867C58B4AC836CBBD130
+ - 1D1BC1BDEEB7F3A86BB7ECCF6632585CDC7606E4
+ - CCAB0C6E6E190E3091E4290AFF7BA25E9E820989
+ - 2CA91CCBF55A49FCB303335DC553B426E3AC635C
+ - 1883F35475E9A4A12ED6396BC795E5D801DB74B3
+ - 71743A7A9E69529643FB49E2201DD99ECA4F72B2
+ - 213D30B9768BAE6EB7C1150155B4421347349E77
+ - 1F26985B869638BAA4FE40A80C07611AAF09B6A4
- Name: '.debug$S'
Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
Alignment: 4
- SectionData: 04000000F500000064000000000000000000000020000000000000000400000000000000520000000600000004000000010000001F0000000000000004000000000000007F0000000500040000000000030000001D000000000000000400000000000000BD0000000300040000000000F10000007B000000320047110000000000000000000000002000000000000000000000000C100000000000000000004E533A3A466F6F3A3A466F6F000D003E1105100000010074686973001200451116000000FCFFFFFF0F000000000011000A003E1174000000010078001200451116000000080000000F0000000000110002004F1100F2000000200000000000000000000000200000001800000001000000140000000000000003000000
+ SectionData: 04000000F500000064000000000000000000000020000000000000000400000000000000440000000600000004000000010000001F000000000000000400000000000000710000000500040000000000030000001D000000000000000400000000000000AF0000000300040000000000F10000007B000000320047110000000000000000000000002000000000000000000000000C100000000000000000004E533A3A466F6F3A3A466F6F000D003E1105100000010074686973001200451116000000FCFFFFFF0F000000000011000A003E1174000000010078001200451116000000080000000F0000000000110002004F1100F2000000200000000000000000000000200000001800000001000000140000000000000004000000
Subsections:
- !FrameData
Frames:
@@ -344,11 +376,31 @@ sections:
Type: 4101
Flags: [ IsParameter ]
VarName: this
+ - Kind: S_DEFRANGE_REGISTER_REL
+ DefRangeRegisterRelSym:
+ Register: 22
+ Flags: 0
+ BasePointerOffset: -4
+ Range:
+ OffsetStart: 15
+ ISectStart: 0
+ Range: 17
+ Gaps:
- Kind: S_LOCAL
LocalSym:
Type: 116
Flags: [ IsParameter ]
VarName: x
+ - Kind: S_DEFRANGE_REGISTER_REL
+ DefRangeRegisterRelSym:
+ Register: 22
+ Flags: 0
+ BasePointerOffset: 8
+ Range:
+ OffsetStart: 15
+ ISectStart: 0
+ Range: 17
+ Gaps:
- Kind: S_PROC_ID_END
ScopeEndSym:
- !Lines
@@ -357,10 +409,10 @@ sections:
RelocOffset: 0
RelocSegment: 0
Blocks:
- - FileName: 'D:\src\llvmbuild\clang\Debug\x86\obj.h'
+ - FileName: 'C:\src\llvm-project\build\obj.h'
Lines:
- Offset: 0
- LineStart: 3
+ LineStart: 4
IsStatement: false
EndDelta: 0
Columns:
@@ -403,7 +455,7 @@ symbols:
Length: 65
NumberOfRelocations: 2
NumberOfLinenumbers: 0
- CheckSum: 4176946275
+ CheckSum: 1827148029
Number: 1
- Name: .data
Value: 0
@@ -467,10 +519,10 @@ symbols:
ComplexType: IMAGE_SYM_DTYPE_NULL
StorageClass: IMAGE_SYM_CLASS_STATIC
SectionDefinition:
- Length: 832
+ Length: 820
NumberOfRelocations: 11
NumberOfLinenumbers: 0
- CheckSum: 4106171226
+ CheckSum: 3821266521
Number: 6
- Name: '.debug$S'
Value: 0
@@ -482,7 +534,7 @@ symbols:
Length: 284
NumberOfRelocations: 9
NumberOfLinenumbers: 0
- CheckSum: 1378739251
+ CheckSum: 112499332
Number: 4
Selection: IMAGE_COMDAT_SELECT_ASSOCIATIVE
- Name: '.debug$T'
@@ -492,10 +544,10 @@ symbols:
ComplexType: IMAGE_SYM_DTYPE_NULL
StorageClass: IMAGE_SYM_CLASS_STATIC
SectionDefinition:
- Length: 316
+ Length: 308
NumberOfRelocations: 0
NumberOfLinenumbers: 0
- CheckSum: 3343977630
+ CheckSum: 2028313836
Number: 7
- Name: '.debug$H'
Value: 0
@@ -507,7 +559,7 @@ symbols:
Length: 268
NumberOfRelocations: 0
NumberOfLinenumbers: 0
- CheckSum: 3965031229
+ CheckSum: 1115012461
Number: 8
- Name: '@feat.00'
Value: 1
diff --git a/lld/test/COFF/Inputs/pdb-hashes-2-missing.yaml b/lld/test/COFF/Inputs/pdb-hashes-2-missing.yaml
index 5b94d7fe592..aa715ee3104 100644
--- a/lld/test/COFF/Inputs/pdb-hashes-2-missing.yaml
+++ b/lld/test/COFF/Inputs/pdb-hashes-2-missing.yaml
@@ -22,7 +22,7 @@ sections:
- Name: '.debug$S'
Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
Alignment: 4
- SectionData: 04000000F10000002F0000002D003C1101000000070006000000000000007017000000000000636C616E672076657273696F6E20362E302E30200000F5000000640000000000000000000000190000000000000004000000000000002B000000040000000400000001000000180000000000000004000000000000005800000003000400000000000300000016000000000000000400000000000000960000000100040000000000F1000000540000002E0047110000000000000000000000001900000000000000000000000D100000000000000000004E533A3A66756E63000A003E110310000001006600120045111600000008000000070000000000120002004F11F20000002800000000000000000000001900000000000000020000001C00000000000000030000000700000004000000F1000000100000000E0008110A1000004E533A3A466F6F00F40000001800000001000000100159DFAC75D18675AED1AD169FE316317E0000F3000000D400000000443A5C7372635C6C6C766D6275696C645C636C616E675C44656275675C7838365C6F626A322E63707000245430202E7261536561726368203D202465697020245430205E203D2024657370202454302034202B203D2000245430202E7261536561726368203D202465697020245430205E203D2024657370202454302034202B203D2024656270202454302034202D205E203D200024543020246562702034202B203D202465697020245430205E203D2024657370202454302034202B203D2024656270202454302034202D205E203D200000
+ SectionData: 04000000F10000002F0000002D003C110100000007000700000000000000581B000000000000636C616E672076657273696F6E20372E302E30200000F500000064000000000000000000000019000000000000000400000000000000240000000400000004000000010000001800000000000000040000000000000051000000030004000000000003000000160000000000000004000000000000008F0000000100040000000000F1000000540000002E0047110000000000000000000000001900000000000000000000000D100000000000000000004E533A3A66756E63000A003E110310000001006600120045111600000008000000070000000000120002004F11F20000002800000000000000000000001900000000000000020000001C00000000000000040000000700000005000000F1000000100000000E0008110A1000004E533A3A466F6F00F400000018000000010000001001CEC8BDE31D126291115B63CE08A5D1360000F3000000CC00000000433A5C7372635C6C6C766D2D70726F6A6563745C6275696C645C6F626A322E63707000245430202E7261536561726368203D202465697020245430205E203D2024657370202454302034202B203D2000245430202E7261536561726368203D202465697020245430205E203D2024657370202454302034202B203D2024656270202454302034202D205E203D200024543020246562702034202B203D202465697020245430205E203D2024657370202454302034202B203D2024656270202454302034202D205E203D2000
Subsections:
- !Symbols
Records:
@@ -30,15 +30,15 @@ sections:
Compile3Sym:
Flags: [ ]
Machine: Pentium3
- FrontendMajor: 6
+ FrontendMajor: 7
FrontendMinor: 0
FrontendBuild: 0
FrontendQFE: 0
- BackendMajor: 6000
+ BackendMajor: 7000
BackendMinor: 0
BackendBuild: 0
BackendQFE: 0
- Version: 'clang version 6.0.0 '
+ Version: 'clang version 7.0.0 '
- !FrameData
Frames:
- CodeSize: 25
@@ -80,6 +80,16 @@ sections:
Type: 4099
Flags: [ IsParameter ]
VarName: f
+ - Kind: S_DEFRANGE_REGISTER_REL
+ DefRangeRegisterRelSym:
+ Register: 22
+ Flags: 0
+ BasePointerOffset: 8
+ Range:
+ OffsetStart: 7
+ ISectStart: 0
+ Range: 18
+ Gaps:
- Kind: S_PROC_ID_END
ScopeEndSym:
- !Lines
@@ -88,14 +98,14 @@ sections:
RelocOffset: 0
RelocSegment: 0
Blocks:
- - FileName: 'D:\src\llvmbuild\clang\Debug\x86\obj2.cpp'
+ - FileName: 'C:\src\llvm-project\build\obj2.cpp'
Lines:
- Offset: 0
- LineStart: 3
+ LineStart: 4
IsStatement: false
EndDelta: 0
- Offset: 7
- LineStart: 4
+ LineStart: 5
IsStatement: false
EndDelta: 0
Columns:
@@ -107,16 +117,15 @@ sections:
UDTName: 'NS::Foo'
- !FileChecksums
Checksums:
- - FileName: 'D:\src\llvmbuild\clang\Debug\x86\obj2.cpp'
+ - FileName: 'C:\src\llvm-project\build\obj2.cpp'
Kind: MD5
- Checksum: 59DFAC75D18675AED1AD169FE316317E
+ Checksum: CEC8BDE31D126291115B63CE08A5D136
- !StringTable
Strings:
- - 'D:\src\llvmbuild\clang\Debug\x86\obj2.cpp'
+ - 'C:\src\llvm-project\build\obj2.cpp'
- '$T0 .raSearch = $eip $T0 ^ = $esp $T0 4 + = '
- '$T0 .raSearch = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = '
- '$T0 $ebp 4 + = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = '
- - ''
Relocations:
- VirtualAddress: 68
SymbolName: '?func@NS@@YAHABUFoo@1@@Z'
@@ -142,7 +151,7 @@ sections:
- Name: '.debug$T'
Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
Alignment: 4
- SectionData: 040000000A000516000000004E5300F12A0005150000800200000000000000000000000000004E533A3A466F6F002E3F4155466F6F404E53404000F10A000110011000000100F2F10A000210021000002A8000000A00011201000000031000000E0008107400000000000100041000000A000210011000000A8000000A00011201000000740000001A0009100300000001100000061000000B00010007100000000000001A0003120D15030074000000000058001115030008100000466F6F002A0005150200000209100000000000000000000004004E533A3A466F6F002E3F4155466F6F404E53404000F12E00051600000000443A5C7372635C6C6C766D6275696C645C636C616E675C44656275675C7838365C6F626A2E6800F10E0006160A1000000B1000000200000012000116001000000510000066756E6300F3F2F1
+ SectionData: 040000000A000516000000004E5300F12A0005150000800200000000000000000000000000004E533A3A466F6F002E3F4155466F6F404E53404000F10A000110011000000100F2F10A000210021000002A8000000A00011201000000031000000E0008107400000000000100041000000A000210011000000A8000000A00011201000000740000001A0009100300000001100000061000000B00010007100000000000001A0003120D15030074000000000058001115030008100000466F6F002A0005150200000209100000000000000000000004004E533A3A466F6F002E3F4155466F6F404E53404000F12600051600000000433A5C7372635C6C6C766D2D70726F6A6563745C6275696C645C6F626A2E68000E0006160A1000000B1000000300000012000116001000000510000066756E6300F3F2F1
Types:
- Kind: LF_STRING_ID
StringId:
@@ -220,12 +229,12 @@ sections:
- Kind: LF_STRING_ID
StringId:
Id: 0
- String: 'D:\src\llvmbuild\clang\Debug\x86\obj.h'
+ String: 'C:\src\llvm-project\build\obj.h'
- Kind: LF_UDT_SRC_LINE
UdtSourceLine:
UDT: 4106
SourceFile: 4107
- LineNumber: 2
+ LineNumber: 3
- Kind: LF_FUNC_ID
FuncId:
ParentScope: 4096
@@ -287,10 +296,10 @@ symbols:
ComplexType: IMAGE_SYM_DTYPE_NULL
StorageClass: IMAGE_SYM_CLASS_STATIC
SectionDefinition:
- Length: 584
+ Length: 576
NumberOfRelocations: 7
NumberOfLinenumbers: 0
- CheckSum: 2847177244
+ CheckSum: 1275848292
Number: 5
- Name: '.debug$T'
Value: 0
@@ -299,10 +308,10 @@ symbols:
ComplexType: IMAGE_SYM_DTYPE_NULL
StorageClass: IMAGE_SYM_CLASS_STATIC
SectionDefinition:
- Length: 320
+ Length: 312
NumberOfRelocations: 0
NumberOfLinenumbers: 0
- CheckSum: 2684556216
+ CheckSum: 3001708198
Number: 6
- Name: '@feat.00'
Value: 1
diff --git a/lld/test/COFF/Inputs/pdb-hashes-2.yaml b/lld/test/COFF/Inputs/pdb-hashes-2.yaml
index 46676c485bc..597d360ef7e 100644
--- a/lld/test/COFF/Inputs/pdb-hashes-2.yaml
+++ b/lld/test/COFF/Inputs/pdb-hashes-2.yaml
@@ -22,7 +22,7 @@ sections:
- Name: '.debug$S'
Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
Alignment: 4
- SectionData: 04000000F10000002F0000002D003C1101000000070006000000000000007017000000000000636C616E672076657273696F6E20362E302E30200000F5000000640000000000000000000000190000000000000004000000000000002B000000040000000400000001000000180000000000000004000000000000005800000003000400000000000300000016000000000000000400000000000000960000000100040000000000F1000000540000002E0047110000000000000000000000001900000000000000000000000D100000000000000000004E533A3A66756E63000A003E110310000001006600120045111600000008000000070000000000120002004F11F20000002800000000000000000000001900000000000000020000001C00000000000000030000000700000004000000F1000000100000000E0008110A1000004E533A3A466F6F00F40000001800000001000000100159DFAC75D18675AED1AD169FE316317E0000F3000000D400000000443A5C7372635C6C6C766D6275696C645C636C616E675C44656275675C7838365C6F626A322E63707000245430202E7261536561726368203D202465697020245430205E203D2024657370202454302034202B203D2000245430202E7261536561726368203D202465697020245430205E203D2024657370202454302034202B203D2024656270202454302034202D205E203D200024543020246562702034202B203D202465697020245430205E203D2024657370202454302034202B203D2024656270202454302034202D205E203D200000
+ SectionData: 04000000F10000002F0000002D003C110100000007000700000000000000581B000000000000636C616E672076657273696F6E20372E302E30200000F500000064000000000000000000000019000000000000000400000000000000240000000400000004000000010000001800000000000000040000000000000051000000030004000000000003000000160000000000000004000000000000008F0000000100040000000000F1000000540000002E0047110000000000000000000000001900000000000000000000000D100000000000000000004E533A3A66756E63000A003E110310000001006600120045111600000008000000070000000000120002004F11F20000002800000000000000000000001900000000000000020000001C00000000000000040000000700000005000000F1000000100000000E0008110A1000004E533A3A466F6F00F400000018000000010000001001CEC8BDE31D126291115B63CE08A5D1360000F3000000CC00000000433A5C7372635C6C6C766D2D70726F6A6563745C6275696C645C6F626A322E63707000245430202E7261536561726368203D202465697020245430205E203D2024657370202454302034202B203D2000245430202E7261536561726368203D202465697020245430205E203D2024657370202454302034202B203D2024656270202454302034202D205E203D200024543020246562702034202B203D202465697020245430205E203D2024657370202454302034202B203D2024656270202454302034202D205E203D2000
Subsections:
- !Symbols
Records:
@@ -30,15 +30,15 @@ sections:
Compile3Sym:
Flags: [ ]
Machine: Pentium3
- FrontendMajor: 6
+ FrontendMajor: 7
FrontendMinor: 0
FrontendBuild: 0
FrontendQFE: 0
- BackendMajor: 6000
+ BackendMajor: 7000
BackendMinor: 0
BackendBuild: 0
BackendQFE: 0
- Version: 'clang version 6.0.0 '
+ Version: 'clang version 7.0.0 '
- !FrameData
Frames:
- CodeSize: 25
@@ -80,6 +80,16 @@ sections:
Type: 4099
Flags: [ IsParameter ]
VarName: f
+ - Kind: S_DEFRANGE_REGISTER_REL
+ DefRangeRegisterRelSym:
+ Register: 22
+ Flags: 0
+ BasePointerOffset: 8
+ Range:
+ OffsetStart: 7
+ ISectStart: 0
+ Range: 18
+ Gaps:
- Kind: S_PROC_ID_END
ScopeEndSym:
- !Lines
@@ -88,14 +98,14 @@ sections:
RelocOffset: 0
RelocSegment: 0
Blocks:
- - FileName: 'D:\src\llvmbuild\clang\Debug\x86\obj2.cpp'
+ - FileName: 'C:\src\llvm-project\build\obj2.cpp'
Lines:
- Offset: 0
- LineStart: 3
+ LineStart: 4
IsStatement: false
EndDelta: 0
- Offset: 7
- LineStart: 4
+ LineStart: 5
IsStatement: false
EndDelta: 0
Columns:
@@ -107,16 +117,15 @@ sections:
UDTName: 'NS::Foo'
- !FileChecksums
Checksums:
- - FileName: 'D:\src\llvmbuild\clang\Debug\x86\obj2.cpp'
+ - FileName: 'C:\src\llvm-project\build\obj2.cpp'
Kind: MD5
- Checksum: 59DFAC75D18675AED1AD169FE316317E
+ Checksum: CEC8BDE31D126291115B63CE08A5D136
- !StringTable
Strings:
- - 'D:\src\llvmbuild\clang\Debug\x86\obj2.cpp'
+ - 'C:\src\llvm-project\build\obj2.cpp'
- '$T0 .raSearch = $eip $T0 ^ = $esp $T0 4 + = '
- '$T0 .raSearch = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = '
- '$T0 $ebp 4 + = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = '
- - ''
Relocations:
- VirtualAddress: 68
SymbolName: '?func@NS@@YAHABUFoo@1@@Z'
@@ -142,7 +151,7 @@ sections:
- Name: '.debug$T'
Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
Alignment: 4
- SectionData: 040000000A000516000000004E5300F12A0005150000800200000000000000000000000000004E533A3A466F6F002E3F4155466F6F404E53404000F10A000110011000000100F2F10A000210021000002A8000000A00011201000000031000000E0008107400000000000100041000000A000210011000000A8000000A00011201000000740000001A0009100300000001100000061000000B00010007100000000000001A0003120D15030074000000000058001115030008100000466F6F002A0005150200000209100000000000000000000004004E533A3A466F6F002E3F4155466F6F404E53404000F12E00051600000000443A5C7372635C6C6C766D6275696C645C636C616E675C44656275675C7838365C6F626A2E6800F10E0006160A1000000B1000000200000012000116001000000510000066756E6300F3F2F1
+ SectionData: 040000000A000516000000004E5300F12A0005150000800200000000000000000000000000004E533A3A466F6F002E3F4155466F6F404E53404000F10A000110011000000100F2F10A000210021000002A8000000A00011201000000031000000E0008107400000000000100041000000A000210011000000A8000000A00011201000000740000001A0009100300000001100000061000000B00010007100000000000001A0003120D15030074000000000058001115030008100000466F6F002A0005150200000209100000000000000000000004004E533A3A466F6F002E3F4155466F6F404E53404000F12600051600000000433A5C7372635C6C6C766D2D70726F6A6563745C6275696C645C6F626A2E68000E0006160A1000000B1000000300000012000116001000000510000066756E6300F3F2F1
Types:
- Kind: LF_STRING_ID
StringId:
@@ -220,12 +229,12 @@ sections:
- Kind: LF_STRING_ID
StringId:
Id: 0
- String: 'D:\src\llvmbuild\clang\Debug\x86\obj.h'
+ String: 'C:\src\llvm-project\build\obj.h'
- Kind: LF_UDT_SRC_LINE
UdtSourceLine:
UDT: 4106
SourceFile: 4107
- LineNumber: 2
+ LineNumber: 3
- Kind: LF_FUNC_ID
FuncId:
ParentScope: 4096
@@ -234,25 +243,25 @@ sections:
- Name: '.debug$H'
Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
Alignment: 4
- SectionData: C5C9330100000000EC145CD76AEFE74E78880D531132B3BB8FFACEF79E616EF06A14EA74A2420F9062A1FB04917E59759949E334BA18509ED692F3C65CE242D8450EBC78B81B63AF8316DC324562EB9F0D4A0D708E8A25C263DB05943C19B84A36719E1E414DDA3EDBDF005322238D70F9058EEDC5C50EF11BC849618B51FD89E3A50EABE5E8FE3945468547C19DC681D0BFB3B797DD91CA4D7F1953C314442D5549419E78044E38A0BF16BFFAA5EE9C0103E7DBFE9941E63379C0B0C0A9021B711ACC4F67008974EBF441031BDD653F6935DFF3112C6A5346EF2AC94B9B7EB56EF55CFA0AF6C1846743F43D846BB19517E12E8873BBA90CC41DD1BEAC89CBA8897AC1BA46762E2557A82D89DCBC783AF285D9DBB672F67A81E36906B2038B57
+ SectionData: C5C9330100000000D6242F1ED02B98E973DCA3334A061540B751965F476700689419512EFB395F1A23ADA4E788EB7A90DC6D1D00D355FEFEDDE4C68641D053622767E1526FD137C1525BDF80D746B3B9C314372C738054FC95D47092AC4D20BAC80E167B185331D42B388FB966A52D778FFF3829DC925A33C5CA6DD9A3EBA965DA146E89F004E6185E87867C58B4AC836CBBD1301D1BC1BDEEB7F3A86BB7ECCF6632585CDC7606E4CCAB0C6E6E190E3091E4290AFF7BA25E9E8209892CA91CCBF55A49FCB303335DC553B426E3AC635C1883F35475E9A4A12ED6396BC795E5D801DB74B371743A7A9E69529643FB49E2201DD99ECA4F72B2213D30B9768BAE6EB7C1150155B4421347349E77B1F380BB197127A54D0DB470E57DF96B15066C78
GlobalHashes:
Version: 0
HashAlgorithm: 0
HashValues:
- - EC145CD76AEFE74E78880D531132B3BB8FFACEF7
- - 9E616EF06A14EA74A2420F9062A1FB04917E5975
- - 9949E334BA18509ED692F3C65CE242D8450EBC78
- - B81B63AF8316DC324562EB9F0D4A0D708E8A25C2
- - 63DB05943C19B84A36719E1E414DDA3EDBDF0053
- - 22238D70F9058EEDC5C50EF11BC849618B51FD89
- - E3A50EABE5E8FE3945468547C19DC681D0BFB3B7
- - 97DD91CA4D7F1953C314442D5549419E78044E38
- - A0BF16BFFAA5EE9C0103E7DBFE9941E63379C0B0
- - C0A9021B711ACC4F67008974EBF441031BDD653F
- - 6935DFF3112C6A5346EF2AC94B9B7EB56EF55CFA
- - 0AF6C1846743F43D846BB19517E12E8873BBA90C
- - C41DD1BEAC89CBA8897AC1BA46762E2557A82D89
- - DCBC783AF285D9DBB672F67A81E36906B2038B57
+ - D6242F1ED02B98E973DCA3334A061540B751965F
+ - 476700689419512EFB395F1A23ADA4E788EB7A90
+ - DC6D1D00D355FEFEDDE4C68641D053622767E152
+ - 6FD137C1525BDF80D746B3B9C314372C738054FC
+ - 95D47092AC4D20BAC80E167B185331D42B388FB9
+ - 66A52D778FFF3829DC925A33C5CA6DD9A3EBA965
+ - DA146E89F004E6185E87867C58B4AC836CBBD130
+ - 1D1BC1BDEEB7F3A86BB7ECCF6632585CDC7606E4
+ - CCAB0C6E6E190E3091E4290AFF7BA25E9E820989
+ - 2CA91CCBF55A49FCB303335DC553B426E3AC635C
+ - 1883F35475E9A4A12ED6396BC795E5D801DB74B3
+ - 71743A7A9E69529643FB49E2201DD99ECA4F72B2
+ - 213D30B9768BAE6EB7C1150155B4421347349E77
+ - B1F380BB197127A54D0DB470E57DF96B15066C78
symbols:
- Name: .text
Value: 0
@@ -309,10 +318,10 @@ symbols:
ComplexType: IMAGE_SYM_DTYPE_NULL
StorageClass: IMAGE_SYM_CLASS_STATIC
SectionDefinition:
- Length: 584
+ Length: 576
NumberOfRelocations: 7
NumberOfLinenumbers: 0
- CheckSum: 2847177244
+ CheckSum: 1275848292
Number: 5
- Name: '.debug$T'
Value: 0
@@ -321,10 +330,10 @@ symbols:
ComplexType: IMAGE_SYM_DTYPE_NULL
StorageClass: IMAGE_SYM_CLASS_STATIC
SectionDefinition:
- Length: 320
+ Length: 312
NumberOfRelocations: 0
NumberOfLinenumbers: 0
- CheckSum: 2684556216
+ CheckSum: 3001708198
Number: 6
- Name: '.debug$H'
Value: 0
@@ -336,7 +345,7 @@ symbols:
Length: 288
NumberOfRelocations: 0
NumberOfLinenumbers: 0
- CheckSum: 2348181452
+ CheckSum: 3809286526
Number: 7
- Name: '@feat.00'
Value: 1
diff --git a/lld/test/COFF/pdb-global-hashes.test b/lld/test/COFF/pdb-global-hashes.test
index b47e4382653..ad2cbc3dc25 100644
--- a/lld/test/COFF/pdb-global-hashes.test
+++ b/lld/test/COFF/pdb-global-hashes.test
@@ -83,9 +83,9 @@ CHECK-NEXT: ============================================================
CHECK-NEXT: Showing 6 records
CHECK-NEXT: 0x1000 | LF_FUNC_ID [size = 20]
CHECK-NEXT: name = main, type = 0x1002, parent scope = <no type>
-CHECK-NEXT: 0x1001 | LF_STRING_ID [size = 48] ID: <no type>, String: D:\src\llvmbuild\clang\Debug\x86\obj.h
+CHECK-NEXT: 0x1001 | LF_STRING_ID [size = {{.*}}] ID: <no type>, String: {{.*}}obj.h
CHECK-NEXT: 0x1002 | LF_UDT_SRC_LINE [size = 16]
-CHECK-NEXT: udt = 0x1008, file = 4097, line = 2
+CHECK-NEXT: udt = 0x1008, file = 4097, line = 3
CHECK-NEXT: 0x1003 | LF_MFUNC_ID [size = 16]
CHECK-NEXT: name = Foo, type = 0x1006, class type = 0x1003
CHECK-NEXT: 0x1004 | LF_STRING_ID [size = 12] ID: <no type>, String: NS
diff --git a/llvm/lib/DebugInfo/CodeView/TypeHashing.cpp b/llvm/lib/DebugInfo/CodeView/TypeHashing.cpp
index f5b28b2a207..c2f8cd5466a 100644
--- a/llvm/lib/DebugInfo/CodeView/TypeHashing.cpp
+++ b/llvm/lib/DebugInfo/CodeView/TypeHashing.cpp
@@ -39,6 +39,7 @@ GloballyHashedType::hashType(ArrayRef<uint8_t> RecordData,
SHA1 S;
S.init();
uint32_t Off = 0;
+ S.update(RecordData.take_front(sizeof(RecordPrefix)));
RecordData = RecordData.drop_front(sizeof(RecordPrefix));
for (const auto &Ref : Refs) {
// Hash any data that comes before this TiRef.
diff --git a/llvm/test/DebugInfo/COFF/global-type-hashes.ll b/llvm/test/DebugInfo/COFF/global-type-hashes.ll
index 2595c387fc9..99006a34543 100644
--- a/llvm/test/DebugInfo/COFF/global-type-hashes.ll
+++ b/llvm/test/DebugInfo/COFF/global-type-hashes.ll
@@ -275,23 +275,22 @@ attributes #2 = { noinline nounwind optnone "correctly-rounded-divide-sqrt-fp-ma
; YAML: Version: 0
; YAML: HashAlgorithm: 0
; YAML: HashValues:
-; YAML: - 9E56666824DC4B12E25261D4E09E6E9DA0F4EE31
-; YAML: - FDEC3D2D96287486127C66070B248ED52E421F55
-; YAML: - 074AE5CC2D68AF9F0A3BEF23993968F7FD82CA84
-; YAML: - BF0439C1A64C9070C6A6ADB0A34D21DAD0FFC3E9
-; YAML: - CF1B3AD4A96BA628E6556FD28A222FBBEBBE140E
-; YAML: - EC50195BFE148C0DC6A87A59D49CA1D9B146DB86
-; YAML: - 123C8BA63AD23386897AB6D814A9932F03846156
-; YAML: - 0F135243878289B83835BC2DB9EE25A1D4D0DA2B
-; YAML: - 9069CA78E7450A285173431B3E52C5C25299E473
-; YAML: - ADA6E11350E9F2069D4689E3646C90D67B28DA62
-; YAML: - BD535FA9877A4DD123840AF849F3B0110EEB1D7A
-; YAML: - 8044F70193FE40B71867158C5E50F0467485FA99
-; YAML: - 558606D57A76D125B705FC6DD18EEE3C1C0C4C09
-; YAML: - A64A018D9EB1EB8015917925662C8508D81CDA68
-; YAML: - 51E89AD9992AC6F11F9E3F1665F41C53BDA8AFC4
-; YAML: - 4F1C3BCA73099EF3466AAC99CC4951767DF890F5
-; ...
+; YAML: - 624A7FEE7323656B7F1C5A63800309EE1ED8BB5B
+; YAML: - 0EB2C87AD629AA9E5C98B7A3ED69DB1355707DF1
+; YAML: - 624E463ACE08649D0FC35F163E20CC43089ADCA6
+; YAML: - 4B712C03EDA4CB88537EBAE4005A09006A9FB389
+; YAML: - 59EC21C3D8D594FF77854ABAC324F82D24D22283
+; YAML: - DA76AFB7C767EC00BAA171FEFAA2801D95716C22
+; YAML: - 4927143F1D91A64983DDA6B6DDE23757322DB7C3
+; YAML: - DFDF871AD3841199ACD961EA57243C7A1305B4DD
+; YAML: - 20015FA1AD3D0FF3546B4428D341E2F9BE57A1C7
+; YAML: - 8DC9D77BACDD53AAE3A5AC8F41C43D3C3122DCBC
+; YAML: - 77A85205D34B9C26802849355086C2937E3F45D8
+; YAML: - 4AEF9C1D1509C0FFA2A02F86B3C28FB0F254096C
+; YAML: - 83B03F51A4BABAE1E8B560B40634944401BCC520
+; YAML: - A82772A0D760F3EB5FC7A3022A6D376F5D7A92E2
+; YAML: - 235B46C1A3E3FB71D89ED6085E8B8D38632AACD6
+; YAML: - D52F03DB055DE93F19066E93FB3BA86C5A652429
; ASM: .section .debug$H,"dr"
@@ -299,14 +298,14 @@ attributes #2 = { noinline nounwind optnone "correctly-rounded-divide-sqrt-fp-ma
; ASM-NEXT: .long 20171205 # Magic
; ASM-NEXT: .short 0 # Section Version
; ASM-NEXT: .short 0 # Hash Algorithm
-; ASM-NEXT: .byte 0x9e, 0x56, 0x66, 0x68 # 0x1000 [9E56666824DC4B12E25261D4E09E6E9DA0F4EE31]
-; ASM-NEXT: .byte 0x24, 0xdc, 0x4b, 0x12
-; ASM-NEXT: .byte 0xe2, 0x52, 0x61, 0xd4
-; ASM-NEXT: .byte 0xe0, 0x9e, 0x6e, 0x9d
-; ASM-NEXT: .byte 0xa0, 0xf4, 0xee, 0x31
-; ASM-NEXT: .byte 0xfd, 0xec, 0x3d, 0x2d # 0x1001 [FDEC3D2D96287486127C66070B248ED52E421F55]
-; ASM-NEXT: .byte 0x96, 0x28, 0x74, 0x86
-; ASM-NEXT: .byte 0x12, 0x7c, 0x66, 0x07
-; ASM-NEXT: .byte 0x0b, 0x24, 0x8e, 0xd5
-; ASM-NEXT: .byte 0x2e, 0x42, 0x1f, 0x55
-; ASM-NEXT: .byte 0x07, 0x4a, 0xe5, 0xcc # 0x1002 [074AE5CC2D68AF9F0A3BEF23993968F7FD82CA84]
+; ASM-NEXT: .byte 0x62, 0x4a, 0x7f, 0xee # 0x1000 [624A7FEE7323656B7F1C5A63800309EE1ED8BB5B]
+; ASM-NEXT: .byte 0x73, 0x23, 0x65, 0x6b
+; ASM-NEXT: .byte 0x7f, 0x1c, 0x5a, 0x63
+; ASM-NEXT: .byte 0x80, 0x03, 0x09, 0xee
+; ASM-NEXT: .byte 0x1e, 0xd8, 0xbb, 0x5b
+; ASM-NEXT: .byte 0x0e, 0xb2, 0xc8, 0x7a # 0x1001 [0EB2C87AD629AA9E5C98B7A3ED69DB1355707DF1]
+; ASM-NEXT: .byte 0xd6, 0x29, 0xaa, 0x9e
+; ASM-NEXT: .byte 0x5c, 0x98, 0xb7, 0xa3
+; ASM-NEXT: .byte 0xed, 0x69, 0xdb, 0x13
+; ASM-NEXT: .byte 0x55, 0x70, 0x7d, 0xf1
+; ASM-NEXT: .byte 0x62, 0x4e, 0x46, 0x3a # 0x1002 [624E463ACE08649D0FC35F163E20CC43089ADCA6]
diff --git a/llvm/test/DebugInfo/COFF/pr37492.ll b/llvm/test/DebugInfo/COFF/pr37492.ll
new file mode 100644
index 00000000000..7edff440b67
--- /dev/null
+++ b/llvm/test/DebugInfo/COFF/pr37492.ll
@@ -0,0 +1,63 @@
+; RUN: llc < %s | FileCheck %s
+
+; Original C++ source:
+; struct Bits {
+; unsigned char b0 : 1;
+; unsigned char b1 : 1;
+; } bits;
+; const unsigned char *p_const;
+
+; In PR37492, there was an issue in global type hashing where we forgot to
+; consider the prefix portion of a type record when hashing it. This lead to a
+; collision between this LF_BITFIELD and LF_MODIFIER record, so we only emitted
+; one under the assumption that the other was redundant. Check that we emit both.
+
+; CHECK-LABEL: # BitField ({{.*}}) {
+; CHECK-NEXT: # TypeLeafKind: LF_BITFIELD (0x1205)
+; CHECK-NEXT: # Type: unsigned char (0x20)
+; CHECK-NEXT: # BitSize: 1
+; CHECK-NEXT: # BitOffset: 0
+; CHECK-NEXT: # }
+
+; CHECK-LABEL: # Modifier ({{.*}}) {
+; CHECK-NEXT: # TypeLeafKind: LF_MODIFIER (0x1001)
+; CHECK-NEXT: # ModifiedType: unsigned char (0x20)
+; CHECK-NEXT: # Modifiers [ (0x1)
+; CHECK-NEXT: # Const (0x1)
+; CHECK-NEXT: # ]
+; CHECK-NEXT: # }
+
+; ModuleID = 't.cpp'
+source_filename = "t.cpp"
+target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-pc-windows-msvc19.13.26131"
+
+%struct.Bits = type { i8 }
+
+@"?bits@@3UBits@@A" = dso_local global %struct.Bits zeroinitializer, align 1, !dbg !0
+@"?p_const@@3PEBEEB" = dso_local global i8* null, align 8, !dbg !6
+
+!llvm.dbg.cu = !{!2}
+!llvm.module.flags = !{!15, !16, !17, !18}
+!llvm.ident = !{!19}
+
+!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression())
+!1 = distinct !DIGlobalVariable(name: "bits", linkageName: "?bits@@3UBits@@A", scope: !2, file: !3, line: 4, type: !11, isLocal: false, isDefinition: true)
+!2 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !3, producer: "clang version 7.0.0 ", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !4, globals: !5)
+!3 = !DIFile(filename: "t.cpp", directory: "C:\5Csrc\5Cllvm-project\5Cbuild", checksumkind: CSK_MD5, checksum: "8910833bbe8b669a3787c8f44dff1313")
+!4 = !{}
+!5 = !{!0, !6}
+!6 = !DIGlobalVariableExpression(var: !7, expr: !DIExpression())
+!7 = distinct !DIGlobalVariable(name: "p_const", linkageName: "?p_const@@3PEBEEB", scope: !2, file: !3, line: 5, type: !8, isLocal: false, isDefinition: true)
+!8 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !9, size: 64)
+!9 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !10)
+!10 = !DIBasicType(name: "unsigned char", size: 8, encoding: DW_ATE_unsigned_char)
+!11 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Bits", file: !3, line: 1, size: 8, flags: DIFlagTypePassByValue, elements: !12, identifier: ".?AUBits@@")
+!12 = !{!13, !14}
+!13 = !DIDerivedType(tag: DW_TAG_member, name: "b0", scope: !11, file: !3, line: 2, baseType: !10, size: 1, flags: DIFlagBitField, extraData: i64 0)
+!14 = !DIDerivedType(tag: DW_TAG_member, name: "b1", scope: !11, file: !3, line: 3, baseType: !10, size: 1, offset: 1, flags: DIFlagBitField, extraData: i64 0)
+!15 = !{i32 2, !"CodeView", i32 1}
+!16 = !{i32 2, !"Debug Info Version", i32 3}
+!17 = !{i32 1, !"wchar_size", i32 2}
+!18 = !{i32 7, !"PIC Level", i32 2}
+!19 = !{!"clang version 7.0.0 "}
diff --git a/llvm/test/DebugInfo/PDB/obj-globalhash.test b/llvm/test/DebugInfo/PDB/obj-globalhash.test
index 9bb6946050a..770eae2704a 100644
--- a/llvm/test/DebugInfo/PDB/obj-globalhash.test
+++ b/llvm/test/DebugInfo/PDB/obj-globalhash.test
@@ -14,41 +14,41 @@ RUN: cat %T/hashes-combined.out | FileCheck --check-prefix=CHECK-SIX %s
; char**. Both the local and global hashes should be the same, since the only
; back-references are for simple types which have fixed indices.
CHECK-ONE: obj-hashes-1
-CHECK-ONE: TI: 0x1001, LocalHash: {{.*}}, GlobalHash: 8B2BA87CC27BF9D290A31A6070FA296AAA577E53
+CHECK-ONE: TI: 0x1001, LocalHash: {{.*}}, GlobalHash: 414E8FCAB16EC28AB86498D1A7F8CF106F39A384
CHECK-ONE: obj-hashes-2
-CHECK-ONE: TI: 0x1000, LocalHash: {{.*}}, GlobalHash: 8B2BA87CC27BF9D290A31A6070FA296AAA577E53
+CHECK-ONE: TI: 0x1000, LocalHash: {{.*}}, GlobalHash: 414E8FCAB16EC28AB86498D1A7F8CF106F39A384
; int**. Same as char**, both the local and global hashes should be the same.
CHECK-TWO: obj-hashes-1
-CHECK-TWO: TI: 0x1000, LocalHash: {{.*}}, GlobalHash: 1522A98D88FAF71B618D97BCAC2B89A424EC4805
+CHECK-TWO: TI: 0x1000, LocalHash: {{.*}}, GlobalHash: 91D2E2AD5D0F20EC1A24BE2E95D0616C5962F4B1
CHECK-TWO: obj-hashes-2
-CHECK-TWO: TI: 0x1002, LocalHash: {{.*}}, GlobalHash: 1522A98D88FAF71B618D97BCAC2B89A424EC4805
+CHECK-TWO: TI: 0x1002, LocalHash: {{.*}}, GlobalHash: 91D2E2AD5D0F20EC1A24BE2E95D0616C5962F4B1
; int***. Different local hashes, since the referent type (int**) is not at the
; same TypeIndex in both streams. Same global hash, since they represent the
; same record.
CHECK-THREE: obj-hashes-1
-CHECK-THREE: TI: 0x1002, LocalHash: {{.*}}, GlobalHash: EC11CE9F78D6BF61F8D913A9E2C98293782A7EB4
+CHECK-THREE: TI: 0x1002, LocalHash: {{.*}}, GlobalHash: 68A6DDB5C538D379E72E6425591A2B16352DF93D
CHECK-THREE: obj-hashes-2
-CHECK-THREE: TI: 0x1001, LocalHash: {{.*}}, GlobalHash: EC11CE9F78D6BF61F8D913A9E2C98293782A7EB4
+CHECK-THREE: TI: 0x1001, LocalHash: {{.*}}, GlobalHash: 68A6DDB5C538D379E72E6425591A2B16352DF93D
; arg list (char**, int***). Different local hashes, since the parameter types
; both occur at different TypeIndices in their respective input streams. Same
; global hash, since the global hash of all referenced types is the same in
; both streams.
CHECK-FOUR: obj-hashes-1
-CHECK-FOUR: TI: 0x1003, LocalHash: {{.*}}, GlobalHash: 1088AD64CEBC88D9E015058A159516AF20B79286
+CHECK-FOUR: TI: 0x1003, LocalHash: {{.*}}, GlobalHash: FD539365C0A8DEC0A1567C3E2F4C82E7AADB0E51
CHECK-FOUR: obj-hashes-2
-CHECK-FOUR: TI: 0x1004, LocalHash: {{.*}}, GlobalHash: 1088AD64CEBC88D9E015058A159516AF20B79286
+CHECK-FOUR: TI: 0x1004, LocalHash: {{.*}}, GlobalHash: FD539365C0A8DEC0A1567C3E2F4C82E7AADB0E51
; double**. This is only in stream 2, as a means to throw off the indexing.
CHECK-FIVE: obj-hashes-1
CHECK-FIVE: obj-hashes-2
-CHECK-FIVE: TI: 0x1003, LocalHash: {{.*}}, GlobalHash: 7803BBDB2947EF46BEA2310D102BD08F68315506
+CHECK-FIVE: TI: 0x1003, LocalHash: {{.*}}, GlobalHash: 5BB6926CA7924D06908872FA20691EA9B88584CC
; int** (char**, int***). For the same logic as described in previous records,
; these two records have the same global hash but different local hashes.
CHECK-SIX: obj-hashes-1
-CHECK-SIX: TI: 0x1004, LocalHash: {{.*}}, GlobalHash: 457ABCB8AB70407594B5D72BF471B6BDECC99BC9
+CHECK-SIX: TI: 0x1004, LocalHash: {{.*}}, GlobalHash: 7A8576BA937B2E87BBF94A9CBFA8F993EE746065
CHECK-SIX: obj-hashes-2
-CHECK-SIX: TI: 0x1005, LocalHash: {{.*}}, GlobalHash: 457ABCB8AB70407594B5D72BF471B6BDECC99BC9
+CHECK-SIX: TI: 0x1005, LocalHash: {{.*}}, GlobalHash: 7A8576BA937B2E87BBF94A9CBFA8F993EE746065
OpenPOWER on IntegriCloud