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 @@ -2275,7 +2275,8 @@ Token &T = peekNext(); if (T.Kind == Token::TK_StreamEnd) return false; - if (T.Kind == Token::TK_DocumentEnd) { + if (T.Kind == Token::TK_DocumentEnd || + (isa(Root) && T.Kind != Token::TK_DocumentStart)) { getNext(); return skip(); } 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