diff options
Diffstat (limited to 'clang/unittests/ASTMatchers')
| -rw-r--r-- | clang/unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp | 13 | ||||
| -rw-r--r-- | clang/unittests/ASTMatchers/ASTMatchersNodeTest.cpp | 34 |
2 files changed, 44 insertions, 3 deletions
diff --git a/clang/unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp b/clang/unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp index 8a957864..5d45235 100644 --- a/clang/unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp +++ b/clang/unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp @@ -26,6 +26,19 @@ TEST_P(ASTMatchersTest, IsExpandedFromMacro_MatchesInFile) { EXPECT_TRUE(matches(input, binaryOperator(isExpandedFromMacro("MY_MACRO")))); } +static std::string constructMacroName(llvm::StringRef A, llvm::StringRef B) { + return (A + "_" + B).str(); +} + +TEST_P(ASTMatchersTest, IsExpandedFromMacro_ConstructedMacroName) { + StringRef input = R"cc( +#define MY_MACRO(a) (4 + (a)) + void Test() { MY_MACRO(4); } + )cc"; + auto matcher = isExpandedFromMacro(constructMacroName("MY", "MACRO")); + EXPECT_TRUE(matches(input, binaryOperator(matcher))); +} + TEST_P(ASTMatchersTest, IsExpandedFromMacro_MatchesNested) { StringRef input = R"cc( #define MY_MACRO(a) (4 + (a)) diff --git a/clang/unittests/ASTMatchers/ASTMatchersNodeTest.cpp b/clang/unittests/ASTMatchers/ASTMatchersNodeTest.cpp index 9692d6e..108b32e 100644 --- a/clang/unittests/ASTMatchers/ASTMatchersNodeTest.cpp +++ b/clang/unittests/ASTMatchers/ASTMatchersNodeTest.cpp @@ -1179,6 +1179,12 @@ TEST_P(ASTMatchersTest, PredefinedExpr) { has(stringLiteral())))); } +TEST_P(ASTMatchersTest, FileScopeAsmDecl) { + EXPECT_TRUE(matches("__asm(\"nop\");", fileScopeAsmDecl())); + EXPECT_TRUE( + notMatches("void f() { __asm(\"mov al, 2\"); }", fileScopeAsmDecl())); +} + TEST_P(ASTMatchersTest, AsmStatement) { EXPECT_TRUE(matches("void foo() { __asm(\"mov al, 2\"); }", asmStmt())); } @@ -2347,6 +2353,26 @@ TEST_P(ASTMatchersTest, ReferenceTypeLocTest_BindsToAnyRvalueReferenceTypeLoc) { EXPECT_TRUE(matches("float&& r = 3.0;", matcher)); } +TEST_P(ASTMatchersTest, ArrayTypeLocTest_BindsToAnyArrayTypeLoc) { + auto matcher = varDecl(hasName("x"), hasTypeLoc(arrayTypeLoc())); + EXPECT_TRUE(matches("int x[3];", matcher)); + EXPECT_TRUE(matches("float x[3];", matcher)); + EXPECT_TRUE(matches("char x[3];", matcher)); + EXPECT_TRUE(matches("void* x[3];", matcher)); + EXPECT_TRUE(matches("const int x[3] = {1, 2, 3};", matcher)); + EXPECT_TRUE(matches("int x[3][4];", matcher)); + EXPECT_TRUE(matches("void foo(int x[]);", matcher)); + EXPECT_TRUE(matches("int a[] = {1, 2}; void foo() {int x[a[0]];}", matcher)); +} + +TEST_P(ASTMatchersTest, ArrayTypeLocTest_DoesNotBindToNonArrayTypeLoc) { + auto matcher = varDecl(hasName("x"), hasTypeLoc(arrayTypeLoc())); + EXPECT_TRUE(notMatches("int x;", matcher)); + EXPECT_TRUE(notMatches("float x;", matcher)); + EXPECT_TRUE(notMatches("char x;", matcher)); + EXPECT_TRUE(notMatches("void* x;", matcher)); +} + TEST_P(ASTMatchersTest, TemplateSpecializationTypeLocTest_BindsToVarDeclTemplateSpecialization) { if (!GetParam().isCXX()) { @@ -2442,7 +2468,8 @@ TEST_P(ASTMatchersTest, LambdaCaptureTest_BindsToCaptureOfReferenceType) { "int main() {" " int a;" " f(a);" - "}", matcher)); + "}", + matcher)); EXPECT_FALSE(matches("template <class ...T> void f(T &...args) {" " [...args = args] () mutable {" " }();" @@ -2450,7 +2477,8 @@ TEST_P(ASTMatchersTest, LambdaCaptureTest_BindsToCaptureOfReferenceType) { "int main() {" " int a;" " f(a);" - "}", matcher)); + "}", + matcher)); } TEST_P(ASTMatchersTest, IsDerivedFromRecursion) { @@ -2628,7 +2656,7 @@ TEST(ASTMatchersTestObjC, ObjCStringLiteral) { " [Test someFunction:@\"Ola!\"]; " "}\n" "@end "; - EXPECT_TRUE(matchesObjC(Objc1String, objcStringLiteral())); + EXPECT_TRUE(matchesObjC(Objc1String, objcStringLiteral())); } TEST(ASTMatchersTestObjC, ObjCDecls) { |
