Index: lib/ASTMatchers/Dynamic/Parser.cpp =================================================================== --- lib/ASTMatchers/Dynamic/Parser.cpp +++ lib/ASTMatchers/Dynamic/Parser.cpp @@ -110,6 +110,10 @@ } switch (Code[0]) { + case '#': + Result.Kind = TokenInfo::TK_Eof; + Result.Text = ""; + return Result; case ',': Result.Kind = TokenInfo::TK_Comma; Result.Text = Code.substr(0, 1); Index: unittests/ASTMatchers/Dynamic/ParserTest.cpp =================================================================== --- unittests/ASTMatchers/Dynamic/ParserTest.cpp +++ unittests/ASTMatchers/Dynamic/ParserTest.cpp @@ -181,6 +181,20 @@ EXPECT_EQ("Yo!", Foo.BoundID); } +TEST(ParserTest, ParseComment) { + MockSema Sema; + const uint64_t ExpectedFoo = Sema.expectMatcher("Foo"); + Sema.parse(" Foo() # Bar() "); + for (size_t i = 0, e = Sema.Errors.size(); i != e; ++i) { + EXPECT_EQ("", Sema.Errors[i]); + } + EXPECT_EQ(1ULL, Sema.Matchers.size()); + + Sema.parse("Foo(#) "); + + EXPECT_EQ("1:4: Error parsing matcher. Found end-of-code while looking for ')'.", Sema.Errors[1]); +} + using ast_matchers::internal::Matcher; Parser::NamedValueMap getTestNamedValues() {