diff --git a/llvm/lib/Support/YAMLParser.cpp b/llvm/lib/Support/YAMLParser.cpp --- a/llvm/lib/Support/YAMLParser.cpp +++ b/llvm/lib/Support/YAMLParser.cpp @@ -2288,8 +2288,8 @@ bool Document::skip() { if (stream.scanner->failed()) return false; - if (!Root) - getRoot(); + if (!Root && !getRoot()) + return false; Root->skip(); Token &T = peekNext(); if (T.Kind == Token::TK_StreamEnd) diff --git a/llvm/unittests/Support/YAMLParserTest.cpp b/llvm/unittests/Support/YAMLParserTest.cpp --- a/llvm/unittests/Support/YAMLParserTest.cpp +++ b/llvm/unittests/Support/YAMLParserTest.cpp @@ -331,4 +331,15 @@ EXPECT_TRUE(End == AnotherEnd); } +TEST(YAMLParser, FlowSequenceTokensOutsideFlowSequence) { + auto FlowSequenceStrs = {",", "]", "}"}; + SourceMgr SM; + + for (auto &Str : FlowSequenceStrs) { + yaml::Stream Stream(Str, SM); + yaml::Document &Doc = *Stream.begin(); + EXPECT_FALSE(Doc.skip()); + } +} + } // end namespace llvm