[DebugInfo] Added support for Checksum debug info feature.
Differential Revision: https://reviews.llvm.org/D27642
llvm-svn: 290514
diff --git a/llvm/lib/AsmParser/LLParser.cpp b/llvm/lib/AsmParser/LLParser.cpp
index d2e2c0d..8e86b48 100644
--- a/llvm/lib/AsmParser/LLParser.cpp
+++ b/llvm/lib/AsmParser/LLParser.cpp
@@ -3465,6 +3465,11 @@
MDFieldList() : ImplTy(SmallVector<Metadata *, 4>()) {}
};
+struct ChecksumKindField : public MDFieldImpl<DIFile::ChecksumKind> {
+ ChecksumKindField() : ImplTy(DIFile::CSK_None) {}
+ ChecksumKindField(DIFile::ChecksumKind CSKind) : ImplTy(CSKind) {}
+};
+
} // end anonymous namespace
namespace llvm {
@@ -3742,6 +3747,20 @@
return false;
}
+template <>
+bool LLParser::ParseMDField(LocTy Loc, StringRef Name,
+ ChecksumKindField &Result) {
+ if (Lex.getKind() != lltok::ChecksumKind)
+ return TokError(
+ "invalid checksum kind" + Twine(" '") + Lex.getStrVal() + "'");
+
+ DIFile::ChecksumKind CSKind = DIFile::getChecksumKind(Lex.getStrVal());
+
+ Result.assign(CSKind);
+ Lex.Lex();
+ return false;
+}
+
} // end namespace llvm
template <class ParserTy>
@@ -3971,15 +3990,20 @@
}
/// ParseDIFileType:
-/// ::= !DIFileType(filename: "path/to/file", directory: "/path/to/dir")
+/// ::= !DIFileType(filename: "path/to/file", directory: "/path/to/dir"
+/// checksumkind: CSK_MD5,
+/// checksum: "000102030405060708090a0b0c0d0e0f")
bool LLParser::ParseDIFile(MDNode *&Result, bool IsDistinct) {
#define VISIT_MD_FIELDS(OPTIONAL, REQUIRED) \
REQUIRED(filename, MDStringField, ); \
- REQUIRED(directory, MDStringField, );
+ REQUIRED(directory, MDStringField, ); \
+ OPTIONAL(checksumkind, ChecksumKindField, ); \
+ OPTIONAL(checksum, MDStringField, );
PARSE_MD_FIELDS();
#undef VISIT_MD_FIELDS
- Result = GET_OR_DISTINCT(DIFile, (Context, filename.Val, directory.Val));
+ Result = GET_OR_DISTINCT(DIFile, (Context, filename.Val, directory.Val,
+ checksumkind.Val, checksum.Val));
return false;
}