diff options
-rw-r--r-- | docs/LibASTMatchersReference.html | 2 | ||||
-rw-r--r-- | include/clang/ASTMatchers/ASTMatchers.h | 7 | ||||
-rw-r--r-- | unittests/ASTMatchers/ASTMatchersTest.cpp | 4 |
3 files changed, 10 insertions, 3 deletions
diff --git a/docs/LibASTMatchersReference.html b/docs/LibASTMatchersReference.html index 31799008bc..617d194e2c 100644 --- a/docs/LibASTMatchersReference.html +++ b/docs/LibASTMatchersReference.html @@ -2509,7 +2509,7 @@ Example matches true (matcher = hasCondition(boolLiteral(equals(true)))) <tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1ElaboratedType.html">ElaboratedType</a>></td><td class="name" onclick="toggle('hasQualifier0')"><a name="hasQualifier0Anchor">hasQualifier</a></td><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1NestedNameSpecifier.html">NestedNameSpecifier</a>> InnerMatcher</td></tr> <tr><td colspan="4" class="doc" id="hasQualifier0"><pre>Matches ElaboratedTypes whose qualifier, a NestedNameSpecifier, -matches InnerMatcher. +matches InnerMatcher if the qualifier exists. Given namespace N { diff --git a/include/clang/ASTMatchers/ASTMatchers.h b/include/clang/ASTMatchers/ASTMatchers.h index b663770460..4e369523e8 100644 --- a/include/clang/ASTMatchers/ASTMatchers.h +++ b/include/clang/ASTMatchers/ASTMatchers.h @@ -2965,7 +2965,7 @@ AST_TYPE_MATCHER(RecordType, recordType); AST_TYPE_MATCHER(ElaboratedType, elaboratedType); /// \brief Matches ElaboratedTypes whose qualifier, a NestedNameSpecifier, -/// matches \c InnerMatcher. +/// matches \c InnerMatcher if the qualifier exists. /// /// Given /// \code @@ -2981,7 +2981,10 @@ AST_TYPE_MATCHER(ElaboratedType, elaboratedType); /// matches the type of the variable declaration of \c d. AST_MATCHER_P(ElaboratedType, hasQualifier, internal::Matcher<NestedNameSpecifier>, InnerMatcher) { - return InnerMatcher.matches(*Node.getQualifier(), Finder, Builder); + if (const NestedNameSpecifier *Qualifier = Node.getQualifier()) + return InnerMatcher.matches(*Qualifier, Finder, Builder); + + return false; } /// \brief Matches ElaboratedTypes whose named type matches \c InnerMatcher. diff --git a/unittests/ASTMatchers/ASTMatchersTest.cpp b/unittests/ASTMatchers/ASTMatchersTest.cpp index 53620a0294..4d369e5585 100644 --- a/unittests/ASTMatchers/ASTMatchersTest.cpp +++ b/unittests/ASTMatchers/ASTMatchersTest.cpp @@ -3469,6 +3469,10 @@ TEST(ElaboratedTypeNarrowing, hasQualifier) { "}" "M::D d;", elaboratedType(hasQualifier(hasPrefix(specifiesNamespace(hasName("N"))))))); + EXPECT_TRUE(notMatches( + "struct D {" + "} d;", + elaboratedType(hasQualifier(nestedNameSpecifier())))); } TEST(ElaboratedTypeNarrowing, namesType) { |