mirror of
https://github.com/RPCS3/llvm.git
synced 2026-07-25 12:46:21 -04:00
[DebugInfo] Unify ChecksumKind and Checksum value in DIFile
Rather than encode the absence of a checksum with a Kind variant, instead put both the kind and value in a struct and wrap it in an Optional. Differential Revision: http://reviews.llvm.org/D43043 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@324928 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -1354,13 +1354,20 @@ Error MetadataLoader::MetadataLoaderImpl::parseOneMetadata(
|
||||
return error("Invalid record");
|
||||
|
||||
IsDistinct = Record[0];
|
||||
Optional<DIFile::ChecksumInfo<MDString *>> Checksum;
|
||||
// The BitcodeWriter writes null bytes into Record[3:4] when the Checksum
|
||||
// is not present. This matches up with the old internal representation,
|
||||
// and the old encoding for CSK_None in the ChecksumKind. The new
|
||||
// representation reserves the value 0 in the ChecksumKind to continue to
|
||||
// encode None in a backwards-compatible way.
|
||||
if (Record.size() == 5 && Record[3] && Record[4])
|
||||
Checksum.emplace(static_cast<DIFile::ChecksumKind>(Record[3]),
|
||||
getMDString(Record[4]));
|
||||
MetadataList.assignValue(
|
||||
GET_OR_DISTINCT(
|
||||
DIFile,
|
||||
(Context, getMDString(Record[1]), getMDString(Record[2]),
|
||||
Record.size() == 3 ? DIFile::CSK_None
|
||||
: static_cast<DIFile::ChecksumKind>(Record[3]),
|
||||
Record.size() == 3 ? nullptr : getMDString(Record[4]))),
|
||||
Checksum)),
|
||||
NextMetadataNo);
|
||||
NextMetadataNo++;
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user