PubName and PubType are optional fields since D80722.
They are defined as:
Optional<PubSection> PubNames; Optional<PubSection> PubTypes;
And initialized in the following way:
IO.mapOptional("debug_pubnames", DWARF.PubNames); IO.mapOptional("debug_pubtypes", DWARF.PubTypes);
But problem is that because of the issue in YAMLTraits.cpp,
when there are no debug_pubnames/debug_pubtypes keys in a YAML description,
they are not initialized to Optional::None as the code expects, but they
are initialized to default PubSection() instances.
Because of this, the if condition in the following code is always true:
if (Obj.DWARF.PubNames) Err = DWARFYAML::emitPubSection(OS, *Obj.DWARF.PubNames, Obj.IsLittleEndian);
What means emitPubSection is always called and it writes few values.
This patch fixes the issue. I've reduced sizeofcmds by size of data
previously written because of this bug.
I need this fix (in YAMLTraits.cpp) for D81655.