diff options
Diffstat (limited to 'clang')
| -rw-r--r-- | clang/unittests/AST/DeclPrinterTest.cpp | 1 | ||||
| -rw-r--r-- | clang/unittests/AST/StmtPrinterTest.cpp | 56 |
2 files changed, 52 insertions, 5 deletions
diff --git a/clang/unittests/AST/DeclPrinterTest.cpp b/clang/unittests/AST/DeclPrinterTest.cpp index 381536d9cd6..c604fb1e7e3 100644 --- a/clang/unittests/AST/DeclPrinterTest.cpp +++ b/clang/unittests/AST/DeclPrinterTest.cpp @@ -519,6 +519,7 @@ TEST(DeclPrinter, TestCXXConstructorDecl11) { "};", constructorDecl(ofClass(hasName("A"))).bind("id"), "A<T...>(T &&ts...) : T(ts)...")); + // WRONG; Should be: "A(T&&... ts) : T(ts)..." } TEST(DeclPrinter, TestCXXDestructorDecl1) { diff --git a/clang/unittests/AST/StmtPrinterTest.cpp b/clang/unittests/AST/StmtPrinterTest.cpp index eac36d65ee4..5f54abd0c0b 100644 --- a/clang/unittests/AST/StmtPrinterTest.cpp +++ b/clang/unittests/AST/StmtPrinterTest.cpp @@ -64,11 +64,10 @@ public: } }; -::testing::AssertionResult PrintedStmtMatches( - StringRef Code, - const std::vector<std::string> &Args, - const DeclarationMatcher &NodeMatch, - StringRef ExpectedPrinted) { +template <typename T> +::testing::AssertionResult +PrintedStmtMatches(StringRef Code, const std::vector<std::string> &Args, + const T &NodeMatch, StringRef ExpectedPrinted) { PrintMatch Printer; MatchFinder Finder; @@ -96,6 +95,15 @@ public: return ::testing::AssertionSuccess(); } +::testing::AssertionResult +PrintedStmtCXX98Matches(StringRef Code, const StatementMatcher &NodeMatch, + StringRef ExpectedPrinted) { + std::vector<std::string> Args; + Args.push_back("-std=c++98"); + Args.push_back("-Wno-unused-value"); + return PrintedStmtMatches(Code, Args, NodeMatch, ExpectedPrinted); +} + ::testing::AssertionResult PrintedStmtCXX98Matches( StringRef Code, StringRef ContainingFunction, @@ -110,6 +118,15 @@ public: ExpectedPrinted); } +::testing::AssertionResult +PrintedStmtCXX11Matches(StringRef Code, const StatementMatcher &NodeMatch, + StringRef ExpectedPrinted) { + std::vector<std::string> Args; + Args.push_back("-std=c++11"); + Args.push_back("-Wno-unused-value"); + return PrintedStmtMatches(Code, Args, NodeMatch, ExpectedPrinted); +} + ::testing::AssertionResult PrintedStmtMSMatches( StringRef Code, StringRef ContainingFunction, @@ -164,3 +181,32 @@ TEST(StmtPrinter, TestFloatingPointLiteral) { "1.F , -1.F , 1. , -1. , 1.L , -1.L")); // Should be: with semicolon } + +TEST(StmtPrinter, TestCXXConversionDeclImplicit) { + ASSERT_TRUE(PrintedStmtCXX98Matches( + "struct A {" + "operator void *();" + "A operator&(A);" + "};" + "void bar(void *);" + "void foo(A a, A b) {" + " bar(a & b);" + "}", + memberCallExpr(anything()).bind("id"), + "a & b")); +} + +TEST(StmtPrinter, TestCXXConversionDeclExplicit) { + ASSERT_TRUE(PrintedStmtCXX11Matches( + "struct A {" + "operator void *();" + "A operator&(A);" + "};" + "void bar(void *);" + "void foo(A a, A b) {" + " auto x = (a & b).operator void *();" + "}", + memberCallExpr(anything()).bind("id"), + "(a & b)")); + // WRONG; Should be: (a & b).operator void *() +} |

