summaryrefslogtreecommitdiffstats
path: root/llvm/lib/IR/DebugInfoMetadata.cpp
diff options
context:
space:
mode:
authorScott Linder <scott@scottlinder.com>2018-02-12 19:45:54 +0000
committerScott Linder <scott@scottlinder.com>2018-02-12 19:45:54 +0000
commit7160384d40ac5025c5ab23cd898b5370749c66a1 (patch)
treea917fb3bd760c42467541559e913a5b09de8094c /llvm/lib/IR/DebugInfoMetadata.cpp
parent4a4f35f32411abb73360247e53d59e1fea1ca7c8 (diff)
downloadbcm5719-llvm-7160384d40ac5025c5ab23cd898b5370749c66a1.tar.gz
bcm5719-llvm-7160384d40ac5025c5ab23cd898b5370749c66a1.zip
[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
Diffstat (limited to 'llvm/lib/IR/DebugInfoMetadata.cpp')
-rw-r--r--llvm/lib/IR/DebugInfoMetadata.cpp37
1 files changed, 19 insertions, 18 deletions
diff --git a/llvm/lib/IR/DebugInfoMetadata.cpp b/llvm/lib/IR/DebugInfoMetadata.cpp
index a777198d159..68b1d662815 100644
--- a/llvm/lib/IR/DebugInfoMetadata.cpp
+++ b/llvm/lib/IR/DebugInfoMetadata.cpp
@@ -394,34 +394,36 @@ DISubroutineType *DISubroutineType::getImpl(LLVMContext &Context, DIFlags Flags,
// FIXME: Implement this string-enum correspondence with a .def file and macros,
// so that the association is explicit rather than implied.
-static const char *ChecksumKindName[DIFile::CSK_Last + 1] = {
- "CSK_None",
+static const char *ChecksumKindName[DIFile::CSK_Last] = {
"CSK_MD5",
"CSK_SHA1"
};
-DIFile::ChecksumKind DIFile::getChecksumKind(StringRef CSKindStr) {
- return StringSwitch<DIFile::ChecksumKind>(CSKindStr)
- .Case("CSK_MD5", DIFile::CSK_MD5)
- .Case("CSK_SHA1", DIFile::CSK_SHA1)
- .Default(DIFile::CSK_None);
+StringRef DIFile::getChecksumKindAsString(ChecksumKind CSKind) {
+ assert(CSKind <= DIFile::CSK_Last && "Invalid checksum kind");
+ // The first space was originally the CSK_None variant, which is now
+ // obsolete, but the space is still reserved in ChecksumKind, so we account
+ // for it here.
+ return ChecksumKindName[CSKind - 1];
}
-StringRef DIFile::getChecksumKindAsString() const {
- assert(CSKind <= DIFile::CSK_Last && "Invalid checksum kind");
- return ChecksumKindName[CSKind];
+Optional<DIFile::ChecksumKind> DIFile::getChecksumKind(StringRef CSKindStr) {
+ return StringSwitch<Optional<DIFile::ChecksumKind>>(CSKindStr)
+ .Case("CSK_MD5", DIFile::CSK_MD5)
+ .Case("CSK_SHA1", DIFile::CSK_SHA1)
+ .Default(None);
}
DIFile *DIFile::getImpl(LLVMContext &Context, MDString *Filename,
- MDString *Directory, DIFile::ChecksumKind CSKind,
- MDString *Checksum, StorageType Storage,
- bool ShouldCreate) {
+ MDString *Directory,
+ Optional<DIFile::ChecksumInfo<MDString *>> CS,
+ StorageType Storage, bool ShouldCreate) {
assert(isCanonical(Filename) && "Expected canonical MDString");
assert(isCanonical(Directory) && "Expected canonical MDString");
- assert(isCanonical(Checksum) && "Expected canonical MDString");
- DEFINE_GETIMPL_LOOKUP(DIFile, (Filename, Directory, CSKind, Checksum));
- Metadata *Ops[] = {Filename, Directory, Checksum};
- DEFINE_GETIMPL_STORE(DIFile, (CSKind), Ops);
+ assert((!CS || isCanonical(CS->Value)) && "Expected canonical MDString");
+ DEFINE_GETIMPL_LOOKUP(DIFile, (Filename, Directory, CS));
+ Metadata *Ops[] = {Filename, Directory, CS ? CS->Value : nullptr};
+ DEFINE_GETIMPL_STORE(DIFile, (CS), Ops);
}
DICompileUnit *DICompileUnit::getImpl(
@@ -901,4 +903,3 @@ DIMacroFile *DIMacroFile::getImpl(LLVMContext &Context, unsigned MIType,
Metadata *Ops[] = { File, Elements };
DEFINE_GETIMPL_STORE(DIMacroFile, (MIType, Line), Ops);
}
-
OpenPOWER on IntegriCloud