diff options
author | Edwin Vane <edwin.vane@intel.com> | 2013-03-04 17:51:00 +0000 |
---|---|---|
committer | Edwin Vane <edwin.vane@intel.com> | 2013-03-04 17:51:00 +0000 |
commit | aec89ac22e1876bb1cfff9062c882a622bc84510 (patch) | |
tree | 97ee34a5dc3d19b22aa1cd257b883d47bc6c5f40 | |
parent | fd07591ea5bcdb7fdd391dc64488d3551619ed3d (diff) |
hasQualifer() matcher should return false if there's no qualifier
Instead of passing NULL on to sub-matcher, just return false. Updated tests and
regenerated docs.
Author: Tareq A Siraj <tareq.a.siraj@intel.com>
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@176441 91177308-0d34-0410-b5e6-96231b3b80d8
-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) { |