[Remarks] Don't serialize metadata if a string table is not used
For YAML remarks with no string table, the mode should not affect the
output.
llvm-svn: 371106
diff --git a/llvm/lib/Remarks/YAMLRemarkSerializer.cpp b/llvm/lib/Remarks/YAMLRemarkSerializer.cpp
index 28f9150..a4d67cc 100644
--- a/llvm/lib/Remarks/YAMLRemarkSerializer.cpp
+++ b/llvm/lib/Remarks/YAMLRemarkSerializer.cpp
@@ -153,15 +153,6 @@
: RemarkSerializer(OS, Mode), YAMLOutput(OS, reinterpret_cast<void *>(this)) {}
void YAMLRemarkSerializer::emit(const Remark &Remark) {
- // In standalone mode, emit the metadata first and set DidEmitMeta to avoid
- // emitting it again.
- if (Mode == SerializerMode::Standalone) {
- std::unique_ptr<MetaSerializer> MetaSerializer =
- metaSerializer(OS, /*ExternalFilename=*/None);
- MetaSerializer->emit();
- DidEmitMeta = true;
- }
-
// Again, YAMLTraits expect a non-const object for inputting, but we're not
// using that here.
auto R = const_cast<remarks::Remark *>(&Remark);
@@ -174,6 +165,20 @@
return std::make_unique<YAMLMetaSerializer>(OS, ExternalFilename);
}
+void YAMLStrTabRemarkSerializer::emit(const Remark &Remark) {
+ // In standalone mode, for the serializer with a string table, emit the
+ // metadata first and set DidEmitMeta to avoid emitting it again.
+ if (Mode == SerializerMode::Standalone && !DidEmitMeta) {
+ std::unique_ptr<MetaSerializer> MetaSerializer =
+ metaSerializer(OS, /*ExternalFilename=*/None);
+ MetaSerializer->emit();
+ DidEmitMeta = true;
+ }
+
+ // Then do the usual remark emission.
+ YAMLRemarkSerializer::emit(Remark);
+}
+
std::unique_ptr<MetaSerializer> YAMLStrTabRemarkSerializer::metaSerializer(
raw_ostream &OS, Optional<StringRef> ExternalFilename) {
assert(StrTab);