summaryrefslogtreecommitdiff
path: root/llvm/lib/Remarks/RemarkFormat.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Remarks/RemarkFormat.cpp')
-rw-r--r--llvm/lib/Remarks/RemarkFormat.cpp22
1 files changed, 19 insertions, 3 deletions
diff --git a/llvm/lib/Remarks/RemarkFormat.cpp b/llvm/lib/Remarks/RemarkFormat.cpp
index 5006421a3c63..1c52e352f939 100644
--- a/llvm/lib/Remarks/RemarkFormat.cpp
+++ b/llvm/lib/Remarks/RemarkFormat.cpp
@@ -20,7 +20,6 @@ using namespace llvm::remarks;
Expected<Format> llvm::remarks::parseFormat(StringRef FormatStr) {
auto Result = StringSwitch<Format>(FormatStr)
.Cases("", "yaml", Format::YAML)
- .Case("yaml-strtab", Format::YAMLStrTab)
.Case("bitstream", Format::Bitstream)
.Default(Format::Unknown);
@@ -36,12 +35,29 @@ Expected<Format> llvm::remarks::magicToFormat(StringRef MagicStr) {
auto Result =
StringSwitch<Format>(MagicStr)
.StartsWith("--- ", Format::YAML) // This is only an assumption.
- .StartsWith(remarks::Magic, Format::YAMLStrTab)
+ .StartsWith(remarks::Magic,
+ Format::YAML) // Needed for remark meta section
.StartsWith(remarks::ContainerMagic, Format::Bitstream)
.Default(Format::Unknown);
if (Result == Format::Unknown)
return createStringError(std::make_error_code(std::errc::invalid_argument),
- "Unknown remark magic: '%s'", MagicStr.data());
+ "Automatic detection of remark format failed. "
+ "Unknown magic number: '%.4s'",
+ MagicStr.data());
return Result;
}
+
+Expected<Format> llvm::remarks::detectFormat(Format Selected,
+ StringRef MagicStr) {
+ if (Selected == Format::Unknown)
+ return createStringError(std::make_error_code(std::errc::invalid_argument),
+ "Unknown remark parser format.");
+ if (Selected != Format::Auto)
+ return Selected;
+
+ // Empty files are valid bitstream files
+ if (MagicStr.empty())
+ return Format::Bitstream;
+ return magicToFormat(MagicStr);
+}