summaryrefslogtreecommitdiffstats
path: root/llvm/unittests/Remarks/YAMLRemarksSerializerTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/unittests/Remarks/YAMLRemarksSerializerTest.cpp')
-rw-r--r--llvm/unittests/Remarks/YAMLRemarksSerializerTest.cpp110
1 files changed, 100 insertions, 10 deletions
diff --git a/llvm/unittests/Remarks/YAMLRemarksSerializerTest.cpp b/llvm/unittests/Remarks/YAMLRemarksSerializerTest.cpp
index 811c1b2a455..761a46f0ba8 100644
--- a/llvm/unittests/Remarks/YAMLRemarksSerializerTest.cpp
+++ b/llvm/unittests/Remarks/YAMLRemarksSerializerTest.cpp
@@ -21,20 +21,21 @@
using namespace llvm;
-static void check(const remarks::Remark &R, StringRef ExpectedR,
- StringRef ExpectedMeta, bool UseStrTab = false,
+static void check(remarks::SerializerMode Mode, const remarks::Remark &R,
+ StringRef ExpectedR, Optional<StringRef> ExpectedMeta,
+ bool UseStrTab = false,
Optional<remarks::StringTable> StrTab = None) {
std::string Buf;
raw_string_ostream OS(Buf);
Expected<std::unique_ptr<remarks::RemarkSerializer>> MaybeS = [&] {
if (UseStrTab) {
if (StrTab)
- return createRemarkSerializer(remarks::Format::YAMLStrTab, OS,
+ return createRemarkSerializer(remarks::Format::YAMLStrTab, Mode, OS,
std::move(*StrTab));
else
- return createRemarkSerializer(remarks::Format::YAMLStrTab, OS);
+ return createRemarkSerializer(remarks::Format::YAMLStrTab, Mode, OS);
} else
- return createRemarkSerializer(remarks::Format::YAML, OS);
+ return createRemarkSerializer(remarks::Format::YAML, Mode, OS);
}();
EXPECT_FALSE(errorToBool(MaybeS.takeError()));
std::unique_ptr<remarks::RemarkSerializer> S = std::move(*MaybeS);
@@ -42,11 +43,27 @@ static void check(const remarks::Remark &R, StringRef ExpectedR,
S->emit(R);
EXPECT_EQ(OS.str(), ExpectedR);
- Buf.clear();
- std::unique_ptr<remarks::MetaSerializer> MS =
- S->metaSerializer(OS, StringRef(EXTERNALFILETESTPATH));
- MS->emit();
- EXPECT_EQ(OS.str(), ExpectedMeta);
+ if (ExpectedMeta) {
+ Buf.clear();
+ std::unique_ptr<remarks::MetaSerializer> MS =
+ S->metaSerializer(OS, StringRef(EXTERNALFILETESTPATH));
+ MS->emit();
+ EXPECT_EQ(OS.str(), *ExpectedMeta);
+ }
+}
+
+static void check(const remarks::Remark &R, StringRef ExpectedR,
+ StringRef ExpectedMeta, bool UseStrTab = false,
+ Optional<remarks::StringTable> StrTab = None) {
+ return check(remarks::SerializerMode::Separate, R, ExpectedR, ExpectedMeta,
+ UseStrTab, std::move(StrTab));
+}
+
+static void checkStandalone(const remarks::Remark &R, StringRef ExpectedR,
+ Optional<remarks::StringTable> StrTab = None) {
+ bool UseStrTab = StrTab.hasValue();
+ return check(remarks::SerializerMode::Standalone, R, ExpectedR,
+ /*ExpectedMeta=*/None, UseStrTab, std::move(StrTab));
}
TEST(YAMLRemarks, SerializerRemark) {
@@ -83,6 +100,40 @@ TEST(YAMLRemarks, SerializerRemark) {
38));
}
+TEST(YAMLRemarks, SerializerRemarkStandalone) {
+ remarks::Remark R;
+ R.RemarkType = remarks::Type::Missed;
+ R.PassName = "pass";
+ R.RemarkName = "name";
+ R.FunctionName = "func";
+ R.Loc = remarks::RemarkLocation{"path", 3, 4};
+ R.Hotness = 5;
+ R.Args.emplace_back();
+ R.Args.back().Key = "key";
+ R.Args.back().Val = "value";
+ R.Args.emplace_back();
+ R.Args.back().Key = "keydebug";
+ R.Args.back().Val = "valuedebug";
+ R.Args.back().Loc = remarks::RemarkLocation{"argpath", 6, 7};
+ checkStandalone(
+ R,
+ StringRef("REMARKS\0"
+ "\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0"
+ "--- !Missed\n"
+ "Pass: pass\n"
+ "Name: name\n"
+ "DebugLoc: { File: path, Line: 3, Column: 4 }\n"
+ "Function: func\n"
+ "Hotness: 5\n"
+ "Args:\n"
+ " - key: value\n"
+ " - keydebug: valuedebug\n"
+ " DebugLoc: { File: argpath, Line: 6, Column: 7 }\n"
+ "...\n",
+ 301));
+}
+
TEST(YAMLRemarks, SerializerRemarkStrTab) {
remarks::Remark R;
R.RemarkType = remarks::Type::Missed;
@@ -156,3 +207,42 @@ TEST(YAMLRemarks, SerializerRemarkParsedStrTab) {
/*UseStrTab=*/true,
remarks::StringTable(remarks::ParsedStringTable(StrTab)));
}
+
+TEST(YAMLRemarks, SerializerRemarkParsedStrTabStandalone) {
+ StringRef StrTab("pass\0name\0func\0path\0value\0valuedebug\0argpath\0", 45);
+ remarks::ParsedStringTable ParsedStrTab(StrTab);
+ remarks::StringTable PreFilledStrTab(ParsedStrTab);
+ remarks::Remark R;
+ R.RemarkType = remarks::Type::Missed;
+ R.PassName = "pass";
+ R.RemarkName = "name";
+ R.FunctionName = "func";
+ R.Loc = remarks::RemarkLocation{"path", 3, 4};
+ R.Hotness = 5;
+ R.Args.emplace_back();
+ R.Args.back().Key = "key";
+ R.Args.back().Val = "value";
+ R.Args.emplace_back();
+ R.Args.back().Key = "keydebug";
+ R.Args.back().Val = "valuedebug";
+ R.Args.back().Loc = remarks::RemarkLocation{"argpath", 6, 7};
+ checkStandalone(
+ R,
+ StringRef("REMARKS\0"
+ "\0\0\0\0\0\0\0\0"
+ "\x2d\0\0\0\0\0\0\0"
+ "pass\0name\0func\0path\0value\0valuedebug\0argpath\0"
+ "--- !Missed\n"
+ "Pass: 0\n"
+ "Name: 1\n"
+ "DebugLoc: { File: 3, Line: 3, Column: 4 }\n"
+ "Function: 2\n"
+ "Hotness: 5\n"
+ "Args:\n"
+ " - key: 4\n"
+ " - keydebug: 5\n"
+ " DebugLoc: { File: 6, Line: 6, Column: 7 }\n"
+ "...\n",
+ 315),
+ std::move(PreFilledStrTab));
+}
OpenPOWER on IntegriCloud