================ @@ -2503,6 +2503,28 @@ TEST_P(ASTMatchersTest, IsDelegatingConstructor) { cxxConstructorDecl(isDelegatingConstructor(), parameterCountIs(1)))); } +TEST_P(ASTMatchersTest, MatchesString) { + StatementMatcher Literal = stringLiteral(matchesString("foo.*")); + EXPECT_TRUE(matches("const char* a = \"foo\";", Literal)); + EXPECT_TRUE(matches("const char* b = \"foobar\";", Literal)); + EXPECT_TRUE(matches("const char* b = \"fo\"\"obar\";", Literal)); + EXPECT_TRUE(notMatches("const char* c = \"bar\";", Literal)); + // test embedded nulls + StatementMatcher Literal2 = stringLiteral(matchesString("bar")); + EXPECT_TRUE(matches("const char* b = \"foo\\0bar\";", Literal2)); + EXPECT_TRUE(notMatches("const char* b = \"foo\\0b\\0ar\";", Literal2)); +} + +TEST(MatchesString, MatchesStringPrefixed) { + StatementMatcher Literal = stringLiteral(matchesString("foo.*")); + EXPECT_TRUE(matchesConditionally("const char16_t* a = u\"foo\";", Literal, + true, {"-std=c++11"})); + EXPECT_TRUE(matchesConditionally("const char32_t* a = U\"foo\";", Literal, + true, {"-std=c++11"})); + EXPECT_TRUE(matchesConditionally("const wchar_t* a = L\"foo\";", Literal, + true, {"-std=c++11"})); ---------------- cor3ntin wrote:
The matcher seems to be using the value produced by `StringLiteral::outputString` which will "work" - until we support non unicode encoding - but `StringLiteral::outputString` is really designed for debug, so wchar etc are going to be escaped. I think this is going to be a difficult to use interface. We would be better off adding a way to convert back the string literal to non-escaped UTF-8 ... except numeric escape sequence would not be preserved (and might lead to replacement characters) https://github.com/llvm/llvm-project/pull/102152 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits