[llvm] r237614 - [YAML] Plug a memory leak

David Blaikie dblaikie at gmail.com
Mon May 18 14:22:46 PDT 2015


On Mon, May 18, 2015 at 2:11 PM, Benjamin Kramer <benny.kra at googlemail.com>
wrote:

> Author: d0k
> Date: Mon May 18 16:11:27 2015
> New Revision: 237614
>
> URL: http://llvm.org/viewvc/llvm-project?rev=237614&view=rev
> Log:
> [YAML] Plug a memory leak
>
> The destructor of BlockScalarNode is never called. Store the contained
> string in BumpPtrAllocated memory instead.
>

Reckon we could put a static_assert in BumpPtrAllocator that checks that
objects allocated with it have trivial destruction? I suppose that'd work
in SpecificBumpPtrAllocator - but maybe we could template the allocate
operation of the non-specificBumpPtrAllocator to catch them there too...


>
> Modified:
>     llvm/trunk/include/llvm/Support/YAMLParser.h
>     llvm/trunk/lib/Support/YAMLParser.cpp
>
> Modified: llvm/trunk/include/llvm/Support/YAMLParser.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/YAMLParser.h?rev=237614&r1=237613&r2=237614&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Support/YAMLParser.h (original)
> +++ llvm/trunk/include/llvm/Support/YAMLParser.h Mon May 18 16:11:27 2015
> @@ -235,8 +235,8 @@ class BlockScalarNode : public Node {
>
>  public:
>    BlockScalarNode(std::unique_ptr<Document> &D, StringRef Anchor,
> StringRef Tag,
> -                  std::string &Value, StringRef RawVal)
> -      : Node(NK_BlockScalar, D, Anchor, Tag), Value(std::move(Value)) {
> +                  StringRef Value, StringRef RawVal)
> +      : Node(NK_BlockScalar, D, Anchor, Tag), Value(Value) {
>      SMLoc Start = SMLoc::getFromPointer(RawVal.begin());
>      SMLoc End = SMLoc::getFromPointer(RawVal.end());
>      SourceRange = SMRange(Start, End);
> @@ -250,7 +250,7 @@ public:
>    }
>
>  private:
> -  std::string Value;
> +  StringRef Value;
>  };
>
>  /// \brief A key and value pair. While not technically a Node under the
> YAML
>
> Modified: llvm/trunk/lib/Support/YAMLParser.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/YAMLParser.cpp?rev=237614&r1=237613&r2=237614&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Support/YAMLParser.cpp (original)
> +++ llvm/trunk/lib/Support/YAMLParser.cpp Mon May 18 16:11:27 2015
> @@ -2377,11 +2377,13 @@ parse_property:
>                  , AnchorInfo.Range.substr(1)
>                  , TagInfo.Range
>                  , T.Range);
> -  case Token::TK_BlockScalar:
> +  case Token::TK_BlockScalar: {
>      getNext();
> +    StringRef StrCopy = StringRef(T.Value).copy(NodeAllocator);
>      return new (NodeAllocator)
>          BlockScalarNode(stream.CurrentDoc, AnchorInfo.Range.substr(1),
> -                        TagInfo.Range, T.Value, T.Range);
> +                        TagInfo.Range, StrCopy, T.Range);
> +  }
>    case Token::TK_Key:
>      // Don't eat the TK_Key, KeyValueNode expects it.
>      return new (NodeAllocator)
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150518/b5416299/attachment.html>


More information about the llvm-commits mailing list