r260872 - Add isAnyPointer() matchers. Register missing matchers.

Aaron Ballman via cfe-commits cfe-commits at lists.llvm.org
Sat Feb 20 17:08:31 PST 2016


On Sat, Feb 20, 2016 at 7:48 PM, Felix Berger <flx at google.com> wrote:
>
>
> On Mon, Feb 15, 2016 at 8:05 AM, Aaron Ballman <aaron at aaronballman.com>
> wrote:
>>
>> On Sun, Feb 14, 2016 at 11:00 PM, Felix Berger via cfe-commits
>> <cfe-commits at lists.llvm.org> wrote:
>> > Author: flx
>> > Date: Sun Feb 14 22:00:39 2016
>> > New Revision: 260872
>> >
>> > URL: http://llvm.org/viewvc/llvm-project?rev=260872&view=rev
>> > Log:
>> > Add isAnyPointer() matchers. Register missing matchers.
>> >
>> > Summary:
>> > The isAnyPointer() matcher is useful for http://reviews.llvm.org/D15623.
>> >
>> > Reviewers: alexfh, klimek
>> >
>> > Subscribers: cfe-commits
>> >
>> > Differential Revision: http://reviews.llvm.org/D15819
>> >
>> > Modified:
>> >     cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h
>> >     cfe/trunk/lib/ASTMatchers/Dynamic/Registry.cpp
>> >     cfe/trunk/unittests/ASTMatchers/ASTMatchersTest.cpp
>> >
>> > Modified: cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h
>> > URL:
>> > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h?rev=260872&r1=260871&r2=260872&view=diff
>> >
>> > ==============================================================================
>> > --- cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h (original)
>> > +++ cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h Sun Feb 14
>> > 22:00:39 2016
>> > @@ -3673,6 +3673,19 @@ AST_MATCHER(QualType, isAnyCharacter) {
>> >      return Node->isAnyCharacterType();
>> >  }
>> >
>> > +//// \brief Matches QualType nodes that are of any pointer type.
>> > +///
>> > +/// Given
>> > +/// \code
>> > +///   int *i = nullptr;
>> > +///   int j;
>> > +/// \endcode
>> > +/// varDecl(hasType(isAnyPointer()))
>> > +///   matches "int *i", but not "int j".
>> > +AST_MATCHER(QualType, isAnyPointer) {
>> > +  return Node->isAnyPointerType();
>> > +}
>>
>> The whole point to isAnyPointer() is for objective C types, where
>> pointers are modeled differently. Can you add documentation, an
>> example, and tests for that fact?
>>
>
> Thanks for making me look into this further. After looking through the
> existing test cases and matchers I found there is already a pointerType()
> matcher which is the matcher I originally wanted to expose.
>
> I can do one of two things now:
>
> Keep the new isAnyPointer() matcher if we think it's useful and add an objc
> pointer test for it which is already in the works.
> Remove the matcher again since there is no real need for it and users could
> get the same by writing anyOf(pointerType(), objcObjectPointerType())
>
> What do you think?

We try to avoid adding matchers for the sake of having them, but I
know I've been bitten a few times by forgetting that an Objective-C
pointer type is not actually a pointer type, so I think that keeping
isAnyPointer() would be generally useful.

~Aaron

>
>>
>> ~Aaron
>>
>> > +
>> >  /// \brief Matches QualType nodes that are const-qualified, i.e., that
>> >  /// include "top-level" const.
>> >  ///
>> >
>> > Modified: cfe/trunk/lib/ASTMatchers/Dynamic/Registry.cpp
>> > URL:
>> > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/ASTMatchers/Dynamic/Registry.cpp?rev=260872&r1=260871&r2=260872&view=diff
>> >
>> > ==============================================================================
>> > --- cfe/trunk/lib/ASTMatchers/Dynamic/Registry.cpp (original)
>> > +++ cfe/trunk/lib/ASTMatchers/Dynamic/Registry.cpp Sun Feb 14 22:00:39
>> > 2016
>> > @@ -264,6 +264,8 @@ RegistryMaps::RegistryMaps() {
>> >    REGISTER_MATCHER(innerType);
>> >    REGISTER_MATCHER(integerLiteral);
>> >    REGISTER_MATCHER(isAnonymous);
>> > +  REGISTER_MATCHER(isAnyCharacter);
>> > +  REGISTER_MATCHER(isAnyPointer);
>> >    REGISTER_MATCHER(isArrow);
>> >    REGISTER_MATCHER(isBaseInitializer);
>> >    REGISTER_MATCHER(isCatchAll);
>> >
>> > Modified: cfe/trunk/unittests/ASTMatchers/ASTMatchersTest.cpp
>> > URL:
>> > http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/ASTMatchers/ASTMatchersTest.cpp?rev=260872&r1=260871&r2=260872&view=diff
>> >
>> > ==============================================================================
>> > --- cfe/trunk/unittests/ASTMatchers/ASTMatchersTest.cpp (original)
>> > +++ cfe/trunk/unittests/ASTMatchers/ASTMatchersTest.cpp Sun Feb 14
>> > 22:00:39 2016
>> > @@ -1479,6 +1479,14 @@ TEST(IsInteger, ReportsNoFalsePositives)
>> >                            to(varDecl(hasType(isInteger()))))))));
>> >  }
>> >
>> > +TEST(IsAnyPointer, MatchesPointers) {
>> > +  EXPECT_TRUE(matches("int* i = nullptr;",
>> > varDecl(hasType(isAnyPointer()))));
>> > +}
>> > +
>> > +TEST(IsAnyPointer, ReportsNoFalsePositives) {
>> > +  EXPECT_TRUE(notMatches("int i = 0;",
>> > varDecl(hasType(isAnyPointer()))));
>> > +}
>> > +
>> >  TEST(IsAnyCharacter, MatchesCharacters) {
>> >    EXPECT_TRUE(matches("char i = 0;",
>> > varDecl(hasType(isAnyCharacter()))));
>> >  }
>> >
>> >
>> > _______________________________________________
>> > cfe-commits mailing list
>> > cfe-commits at lists.llvm.org
>> > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
>


More information about the cfe-commits mailing list