<div dir="ltr">Yea, already looking.  Thanks!</div><br><div class="gmail_quote"><div dir="ltr">On Mon, Jan 8, 2018 at 2:30 PM Evgenii Stepanov <<a href="mailto:eugeni.stepanov@gmail.com">eugeni.stepanov@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">It looks like this change broke some other tests:<br>
--<br>
YAML:104:11: error: not a mapping<br>
          - Kind:            S_LOCAL<br>
          ^<br>
yaml2obj: Failed to parse YAML file!<br>
<br>
<a href="http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-fast/builds/12314/steps/check-lld%20msan/logs/stdio" rel="noreferrer" target="_blank">http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-fast/builds/12314/steps/check-lld%20msan/logs/stdio</a><br>
<br>
On Mon, Jan 8, 2018 at 1:38 PM, Zachary Turner via llvm-commits<br>
<<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>> wrote:<br>
> Author: zturner<br>
> Date: Mon Jan  8 13:38:50 2018<br>
> New Revision: 322029<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=322029&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=322029&view=rev</a><br>
> Log:<br>
> Fix uninitialized read error reported by MSAN.<br>
><br>
> The problem was that our Obj -> Yaml dumper had not been taught<br>
> to handle certain types of records.  This meant that when I<br>
> generated the test input files, the records were still there but<br>
> none of its fields were filled out.  So when it did the<br>
> Yaml -> Obj conversion as part of the test, it generated records<br>
> with garbage in them.<br>
><br>
> The patch here fixes the Obj <-> Yaml converter, and additionally<br>
> updates the test file with fresh Yaml generated by the fixed<br>
> converter.<br>
><br>
> Modified:<br>
>     llvm/trunk/lib/ObjectYAML/CodeViewYAMLSymbols.cpp<br>
><br>
> Modified: llvm/trunk/lib/ObjectYAML/CodeViewYAMLSymbols.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ObjectYAML/CodeViewYAMLSymbols.cpp?rev=322029&r1=322028&r2=322029&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ObjectYAML/CodeViewYAMLSymbols.cpp?rev=322029&r1=322028&r2=322029&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/lib/ObjectYAML/CodeViewYAMLSymbols.cpp (original)<br>
> +++ llvm/trunk/lib/ObjectYAML/CodeViewYAMLSymbols.cpp Mon Jan  8 13:38:50 2018<br>
> @@ -40,6 +40,7 @@ using namespace llvm::CodeViewYAML::deta<br>
>  using namespace llvm::yaml;<br>
><br>
>  LLVM_YAML_IS_FLOW_SEQUENCE_VECTOR(TypeIndex)<br>
> +LLVM_YAML_IS_SEQUENCE_VECTOR(LocalVariableAddrGap)<br>
><br>
>  // We only need to declare these, the definitions are in CodeViewYAMLTypes.cpp<br>
>  LLVM_YAML_DECLARE_SCALAR_TRAITS(APSInt, QuotingType::None)<br>
> @@ -181,6 +182,24 @@ void ScalarEnumerationTraits<FrameCookie<br>
>  }<br>
><br>
>  namespace llvm {<br>
> +namespace yaml {<br>
> +template <> struct MappingTraits<LocalVariableAddrRange> {<br>
> +  static void mapping(IO &io, LocalVariableAddrRange &Range) {<br>
> +    io.mapRequired("OffsetStart", Range.OffsetStart);<br>
> +    io.mapRequired("ISectStart", Range.ISectStart);<br>
> +    io.mapRequired("Range", Range.Range);<br>
> +  }<br>
> +};<br>
> +template <> struct MappingTraits<LocalVariableAddrGap> {<br>
> +  static void mapping(IO &io, LocalVariableAddrGap &Gap) {<br>
> +    io.mapRequired("GapStartOffset", Gap.GapStartOffset);<br>
> +    io.mapRequired("Range", Gap.Range);<br>
> +  }<br>
> +};<br>
> +} // namespace yaml<br>
> +} // namespace llvm<br>
> +<br>
> +namespace llvm {<br>
>  namespace CodeViewYAML {<br>
>  namespace detail {<br>
><br>
> @@ -353,32 +372,50 @@ template <> void SymbolRecordImpl<LocalS<br>
>  }<br>
><br>
>  template <> void SymbolRecordImpl<DefRangeSym>::map(IO &IO) {<br>
> -  // TODO: Print the subfields<br>
> +  IO.mapRequired("Program", Symbol.Program);<br>
> +  IO.mapRequired("Range", Symbol.Range);<br>
> +  IO.mapRequired("Gaps", Symbol.Gaps);<br>
>  }<br>
><br>
>  template <> void SymbolRecordImpl<DefRangeSubfieldSym>::map(IO &IO) {<br>
> -  // TODO: Print the subfields<br>
> +  IO.mapRequired("Program", Symbol.Program);<br>
> +  IO.mapRequired("OffsetInParent", Symbol.OffsetInParent);<br>
> +  IO.mapRequired("Range", Symbol.Range);<br>
> +  IO.mapRequired("Gaps", Symbol.Gaps);<br>
>  }<br>
><br>
>  template <> void SymbolRecordImpl<DefRangeRegisterSym>::map(IO &IO) {<br>
> -  // TODO: Print the subfields<br>
> +  IO.mapRequired("Register", Symbol.Hdr.Register);<br>
> +  IO.mapRequired("MayHaveNoName", Symbol.Hdr.MayHaveNoName);<br>
> +  IO.mapRequired("Range", Symbol.Range);<br>
> +  IO.mapRequired("Gaps", Symbol.Gaps);<br>
>  }<br>
><br>
>  template <> void SymbolRecordImpl<DefRangeFramePointerRelSym>::map(IO &IO) {<br>
> -  // TODO: Print the subfields<br>
> +  IO.mapRequired("Offset", Symbol.Offset);<br>
> +  IO.mapRequired("Range", Symbol.Range);<br>
> +  IO.mapRequired("Gaps", Symbol.Gaps);<br>
>  }<br>
><br>
>  template <> void SymbolRecordImpl<DefRangeSubfieldRegisterSym>::map(IO &IO) {<br>
> -  // TODO: Print the subfields<br>
> +  IO.mapRequired("Register", Symbol.Hdr.Register);<br>
> +  IO.mapRequired("MayHaveNoName", Symbol.Hdr.MayHaveNoName);<br>
> +  IO.mapRequired("OffsetInParent", Symbol.Hdr.OffsetInParent);<br>
> +  IO.mapRequired("Range", Symbol.Range);<br>
> +  IO.mapRequired("Gaps", Symbol.Gaps);<br>
>  }<br>
><br>
>  template <><br>
>  void SymbolRecordImpl<DefRangeFramePointerRelFullScopeSym>::map(IO &IO) {<br>
> -  // TODO: Print the subfields<br>
> +  IO.mapRequired("Register", Symbol.Offset);<br>
>  }<br>
><br>
>  template <> void SymbolRecordImpl<DefRangeRegisterRelSym>::map(IO &IO) {<br>
> -  // TODO: Print the subfields<br>
> +  IO.mapRequired("Register", Symbol.Hdr.Register);<br>
> +  IO.mapRequired("Flags", Symbol.Hdr.Flags);<br>
> +  IO.mapRequired("BasePointerOffset", Symbol.Hdr.BasePointerOffset);<br>
> +  IO.mapRequired("Range", Symbol.Range);<br>
> +  IO.mapRequired("Gaps", Symbol.Gaps);<br>
>  }<br>
><br>
>  template <> void SymbolRecordImpl<BlockSym>::map(IO &IO) {<br>
><br>
><br>
> _______________________________________________<br>
> llvm-commits mailing list<br>
> <a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div>