diff --git a/clang-tools-extra/unittests/clang-query/QueryParserTest.cpp b/clang-tools-extra/unittests/clang-query/QueryParserTest.cpp index 4725789f29f2af..79fcfcae6e0d6a 100644 --- a/clang-tools-extra/unittests/clang-query/QueryParserTest.cpp +++ b/clang-tools-extra/unittests/clang-query/QueryParserTest.cpp @@ -330,4 +330,22 @@ match callExpr EXPECT_EQ("1:9: Error parsing matcher. Found token " "while looking for '('.", cast(Q)->ErrStr); + + Q = parse("let someMatcher\nm parmVarDecl()"); + + ASSERT_TRUE(isa(Q)); + EXPECT_EQ("1:1: Invalid token found when looking for a value.", cast(Q)->ErrStr); + + Q = parse("\nm parmVarDecl()\nlet someMatcher\nm parmVarDecl()"); + + ASSERT_TRUE(isa(Q)); + Q = parse(Q->RemainingContent); + + ASSERT_TRUE(isa(Q)); + EXPECT_EQ("1:1: Invalid token found when looking for a value.", cast(Q)->ErrStr); + + Q = parse("\nlet someMatcher\n"); + + ASSERT_TRUE(isa(Q)); + EXPECT_EQ("1:1: Invalid token found when looking for a value.", cast(Q)->ErrStr); } diff --git a/clang/lib/ASTMatchers/Dynamic/Parser.cpp b/clang/lib/ASTMatchers/Dynamic/Parser.cpp index caa3a3bd0953a6..ef209d1274af6c 100644 --- a/clang/lib/ASTMatchers/Dynamic/Parser.cpp +++ b/clang/lib/ASTMatchers/Dynamic/Parser.cpp @@ -607,15 +607,13 @@ bool Parser::parseExpressionImpl(VariantValue *Value) { // This error was already reported by the tokenizer. return false; case TokenInfo::TK_NewLine: - llvm_unreachable("Newline should never be found here"); - return false; case TokenInfo::TK_OpenParen: case TokenInfo::TK_CloseParen: case TokenInfo::TK_Comma: case TokenInfo::TK_Period: case TokenInfo::TK_InvalidChar: const TokenInfo Token = Tokenizer->consumeNextToken(); - Error->addError(Token.Range, Error->ET_ParserInvalidToken) << Token.Text; + Error->addError(Token.Range, Error->ET_ParserInvalidToken) << (Token.Kind == TokenInfo::TK_NewLine ? "NewLine" : Token.Text); return false; }