mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2026-07-20 18:59:44 -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 llvm-svn: 324928
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