From fe02d508d0292e914a67af461f88f1bab66d0b04 Mon Sep 17 00:00:00 2001 From: Rintaro Ishizaki Date: Tue, 17 Sep 2019 22:24:17 -0700 Subject: [PATCH] [SyntaxParses] Address memory issue in popTokenSyntax() Don't return reference for local temporary object rdar://problem/55421369 --- include/swift/Parse/SyntaxParsingContext.h | 2 +- lib/Parse/SyntaxParsingContext.cpp | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/include/swift/Parse/SyntaxParsingContext.h b/include/swift/Parse/SyntaxParsingContext.h index 2db8e6e9058c1..6df76bebca037 100644 --- a/include/swift/Parse/SyntaxParsingContext.h +++ b/include/swift/Parse/SyntaxParsingContext.h @@ -300,7 +300,7 @@ class alignas(1 << SyntaxAlignInBits) SyntaxParsingContext { return SyntaxNode(std::move(rawNode)); } - ParsedTokenSyntax &&popToken(); + ParsedTokenSyntax popToken(); /// Create a node using the tail of the collected parts. The number of parts /// is automatically determined from \c Kind. Node: limited number of \c Kind diff --git a/lib/Parse/SyntaxParsingContext.cpp b/lib/Parse/SyntaxParsingContext.cpp index 65cf131b10373..6cd6b507bf863 100644 --- a/lib/Parse/SyntaxParsingContext.cpp +++ b/lib/Parse/SyntaxParsingContext.cpp @@ -163,8 +163,9 @@ const SyntaxParsingContext *SyntaxParsingContext::getRoot() const { return Curr; } -ParsedTokenSyntax &&SyntaxParsingContext::popToken() { - return std::move(popIf().getValue()); +ParsedTokenSyntax SyntaxParsingContext::popToken() { + auto tok = popIf(); + return std::move(tok.getValue()); } /// Add Token with Trivia to the parts.