[lld] r263677 - Use allocator in YAML code to avoid leaking atom content.

Rafael EspĂ­ndola via llvm-commits llvm-commits at lists.llvm.org
Wed Mar 16 17:46:08 PDT 2016


Thanks!

Unfortunately looks like there are more:
http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-fast/builds/11158/steps/check-lld%20asan/logs/stdio

Looks like more places where an allocator needs to be passed to yaml.

Cheers,
Rafael


On 16 March 2016 at 16:30, Pete Cooper via llvm-commits
<llvm-commits at lists.llvm.org> wrote:
> Author: pete
> Date: Wed Mar 16 18:30:27 2016
> New Revision: 263677
>
> URL: http://llvm.org/viewvc/llvm-project?rev=263677&view=rev
> Log:
> Use allocator in YAML code to avoid leaking atom content.
>
> In lld we allocate atoms on an allocator and so don't run their
> destructors.  This means we also shouldn't allocate memory inside
> them without that also being on an allocator.
>
> Reviewed by Lang Hames and Rafael Espindola.
>
> Modified:
>     lld/trunk/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp
>
> Modified: lld/trunk/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp?rev=263677&r1=263676&r2=263677&view=diff
> ==============================================================================
> --- lld/trunk/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp (original)
> +++ lld/trunk/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp Wed Mar 16 18:30:27 2016
> @@ -745,8 +745,9 @@ template <> struct MappingTraits<const l
>    };
>
>    static void mapping(IO &io, const lld::Reference *&ref) {
> +    YamlContext *info = reinterpret_cast<YamlContext *>(io.getContext());
>      MappingNormalizationHeap<NormalizedReference, const lld::Reference *> keys(
> -        io, ref);
> +        io, ref, &info->_file->allocator());
>
>      io.mapRequired("kind",   keys->_mappedKind);
>      io.mapOptional("offset", keys->_offset);
> @@ -889,12 +890,12 @@ template <> struct MappingTraits<const l
>    };
>
>    static void mapping(IO &io, const lld::DefinedAtom *&atom) {
> +    YamlContext *info = reinterpret_cast<YamlContext *>(io.getContext());
>      MappingNormalizationHeap<NormalizedAtom, const lld::DefinedAtom *> keys(
> -        io, atom);
> +        io, atom, &info->_file->allocator());
>      if (io.outputting()) {
>        // If writing YAML, check if atom needs a ref-name.
>        typedef MappingTraits<const lld::File *>::NormalizedFile NormalizedFile;
> -      YamlContext *info = reinterpret_cast<YamlContext *>(io.getContext());
>        assert(info != nullptr);
>        NormalizedFile *f = reinterpret_cast<NormalizedFile *>(info->_file);
>        assert(f);
> @@ -979,8 +980,9 @@ template <> struct MappingTraits<const l
>    };
>
>    static void mapping(IO &io, const lld::UndefinedAtom *&atom) {
> +    YamlContext *info = reinterpret_cast<YamlContext *>(io.getContext());
>      MappingNormalizationHeap<NormalizedAtom, const lld::UndefinedAtom *> keys(
> -        io, atom);
> +        io, atom, &info->_file->allocator());
>
>      io.mapRequired("name",        keys->_name);
>      io.mapOptional("can-be-null", keys->_canBeNull,
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits


More information about the llvm-commits mailing list