diff options
| author | Aaron Ballman <aaron@aaronballman.com> | 2015-08-05 12:11:30 +0000 |
|---|---|---|
| committer | Aaron Ballman <aaron@aaronballman.com> | 2015-08-05 12:11:30 +0000 |
| commit | 1ca258e6a89203d8b74db740f98b32b5925b6bbb (patch) | |
| tree | b9ebc0cc03b9e32014487f1ae08c1bb5d3b68189 /clang/unittests/ASTMatchers/ASTMatchersTest.cpp | |
| parent | 3c9cb4b3d357cee7cfcf7621dae521efd3ad007b (diff) | |
| download | bcm5719-llvm-1ca258e6a89203d8b74db740f98b32b5925b6bbb.tar.gz bcm5719-llvm-1ca258e6a89203d8b74db740f98b32b5925b6bbb.zip | |
Add AST matchers for narrowing constructors that are default, copy, or move constructors, as well as functionality to determine whether a ctor initializer is a base initializer.
llvm-svn: 244036
Diffstat (limited to 'clang/unittests/ASTMatchers/ASTMatchersTest.cpp')
| -rw-r--r-- | clang/unittests/ASTMatchers/ASTMatchersTest.cpp | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/clang/unittests/ASTMatchers/ASTMatchersTest.cpp b/clang/unittests/ASTMatchers/ASTMatchersTest.cpp index edeebde81ed..33832599911 100644 --- a/clang/unittests/ASTMatchers/ASTMatchersTest.cpp +++ b/clang/unittests/ASTMatchers/ASTMatchersTest.cpp @@ -1992,6 +1992,29 @@ TEST(ConstructorDeclaration, IsImplicit) { methodDecl(isImplicit(), hasName("operator=")))); } +TEST(ConstructorDeclaration, Kinds) { + EXPECT_TRUE(matches("struct S { S(); };", + constructorDecl(isDefaultConstructor()))); + EXPECT_TRUE(notMatches("struct S { S(); };", + constructorDecl(isCopyConstructor()))); + EXPECT_TRUE(notMatches("struct S { S(); };", + constructorDecl(isMoveConstructor()))); + + EXPECT_TRUE(notMatches("struct S { S(const S&); };", + constructorDecl(isDefaultConstructor()))); + EXPECT_TRUE(matches("struct S { S(const S&); };", + constructorDecl(isCopyConstructor()))); + EXPECT_TRUE(notMatches("struct S { S(const S&); };", + constructorDecl(isMoveConstructor()))); + + EXPECT_TRUE(notMatches("struct S { S(S&&); };", + constructorDecl(isDefaultConstructor()))); + EXPECT_TRUE(notMatches("struct S { S(S&&); };", + constructorDecl(isCopyConstructor()))); + EXPECT_TRUE(matches("struct S { S(S&&); };", + constructorDecl(isMoveConstructor()))); +} + TEST(DestructorDeclaration, MatchesVirtualDestructor) { EXPECT_TRUE(matches("class Foo { virtual ~Foo(); };", destructorDecl(ofClass(hasName("Foo"))))); @@ -2058,6 +2081,24 @@ TEST(HasAnyConstructorInitializer, IsWritten) { allOf(forField(hasName("bar_")), unless(isWritten())))))); } +TEST(HasAnyConstructorInitializer, IsBaseInitializer) { + static const char Code[] = + "struct B {};" + "struct D : B {" + " int I;" + " D(int i) : I(i) {}" + "};" + "struct E : B {" + " E() : B() {}" + "};"; + EXPECT_TRUE(matches(Code, constructorDecl(allOf( + hasAnyConstructorInitializer(allOf(isBaseInitializer(), isWritten())), + hasName("E"))))); + EXPECT_TRUE(notMatches(Code, constructorDecl(allOf( + hasAnyConstructorInitializer(allOf(isBaseInitializer(), isWritten())), + hasName("D"))))); +} + TEST(Matcher, NewExpression) { StatementMatcher New = newExpr(); |

