r271288 - [ASTMatchers] Breaking change of `has` matcher

Rafael EspĂ­ndola via cfe-commits cfe-commits at lists.llvm.org
Tue May 31 08:45:16 PDT 2016


This broke the build:
http://lab.llvm.org:8011/builders/clang-x86_64-debian-fast/builds/36968/steps/cmake-configure/logs/stdio

On 31 May 2016 at 08:25, Piotr Padlewski via cfe-commits
<cfe-commits at lists.llvm.org> wrote:
> Author: prazek
> Date: Tue May 31 10:25:05 2016
> New Revision: 271288
>
> URL: http://llvm.org/viewvc/llvm-project?rev=271288&view=rev
> Log:
> [ASTMatchers] Breaking change of `has` matcher
>
> has matcher can now match to implicit and paren casts
>
> http://reviews.llvm.org/D20801
>
> Modified:
>     cfe/trunk/docs/ReleaseNotes.rst
>     cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h
>     cfe/trunk/include/clang/ASTMatchers/ASTMatchersInternal.h
>     cfe/trunk/include/clang/CMakeLists.txt
>     cfe/trunk/unittests/AST/ASTImporterTest.cpp
>     cfe/trunk/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp
>
> Modified: cfe/trunk/docs/ReleaseNotes.rst
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/docs/ReleaseNotes.rst?rev=271288&r1=271287&r2=271288&view=diff
> ==============================================================================
> --- cfe/trunk/docs/ReleaseNotes.rst (original)
> +++ cfe/trunk/docs/ReleaseNotes.rst Tue May 31 10:25:05 2016
> @@ -185,11 +185,13 @@ this section should help get you past th
>  AST Matchers
>  ------------
>
> -- hasAnyArgument: Matcher no longer ignores parentheses and implicit casts on
> -  the argument before applying the inner matcher. The fix was done to allow for
> -  greater control by the user. In all existing checkers that use this matcher
> -  all instances of code ``hasAnyArgument(<inner matcher>)`` must be changed to
> -  ``hasAnyArgument(ignoringParenImpCasts(<inner matcher>))``.
> +- has and hasAnyArgument: Matchers no longer ignores parentheses and implicit
> +  casts on the argument before applying the inner matcher. The fix was done to
> +  allow for greater control by the user. In all existing checkers that use this
> +  matcher all instances of code ``hasAnyArgument(<inner matcher>)`` or
> +  ``has(<inner matcher>)`` must be changed to
> +  ``hasAnyArgument(ignoringParenImpCasts(<inner matcher>))`` or
> +  ``has(ignoringParenImpCasts(<inner matcher>))``.
>
>  ...
>
>
> Modified: cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h?rev=271288&r1=271287&r2=271288&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h (original)
> +++ cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h Tue May 31 10:25:05 2016
> @@ -2169,6 +2169,10 @@ AST_MATCHER_P(CXXRecordDecl, hasMethod,
>  /// ChildT must be an AST base type.
>  ///
>  /// Usable as: Any Matcher
> +/// Note that has is direct matcher, so it also matches things like implicit
> +/// casts and paren casts. If you are matching with expr then you should
> +/// probably consider using ignoringParenImpCasts like:
> +/// has(ignoringParenImpCasts(expr())).
>  const internal::ArgumentAdaptingMatcherFunc<internal::HasMatcher>
>  LLVM_ATTRIBUTE_UNUSED has = {};
>
>
> Modified: cfe/trunk/include/clang/ASTMatchers/ASTMatchersInternal.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/ASTMatchers/ASTMatchersInternal.h?rev=271288&r1=271287&r2=271288&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/ASTMatchers/ASTMatchersInternal.h (original)
> +++ cfe/trunk/include/clang/ASTMatchers/ASTMatchersInternal.h Tue May 31 10:25:05 2016
> @@ -1165,8 +1165,6 @@ public:
>  /// ChildT must be an AST base type.
>  template <typename T, typename ChildT>
>  class HasMatcher : public WrapperMatcherInterface<T> {
> -  static_assert(IsBaseType<ChildT>::value,
> -                "has only accepts base type matcher");
>
>  public:
>    explicit HasMatcher(const Matcher<ChildT> &ChildMatcher)
> @@ -1174,10 +1172,9 @@ public:
>
>    bool matches(const T &Node, ASTMatchFinder *Finder,
>                 BoundNodesTreeBuilder *Builder) const override {
> -    return Finder->matchesChildOf(
> -        Node, this->InnerMatcher, Builder,
> -        ASTMatchFinder::TK_IgnoreImplicitCastsAndParentheses,
> -        ASTMatchFinder::BK_First);
> +    return Finder->matchesChildOf(Node, this->InnerMatcher, Builder,
> +                                  ASTMatchFinder::TK_AsIs,
> +                                  ASTMatchFinder::BK_First);
>    }
>  };
>
>
> Modified: cfe/trunk/include/clang/CMakeLists.txt
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/CMakeLists.txt?rev=271288&r1=271287&r2=271288&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/CMakeLists.txt (original)
> +++ cfe/trunk/include/clang/CMakeLists.txt Tue May 31 10:25:05 2016
> @@ -5,3 +5,4 @@ add_subdirectory(Parse)
>  add_subdirectory(Sema)
>  add_subdirectory(Serialization)
>  add_subdirectory(StaticAnalyzer/Checkers)
> +add_subdirectory(ASTMatchers)
>
> Modified: cfe/trunk/unittests/AST/ASTImporterTest.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/AST/ASTImporterTest.cpp?rev=271288&r1=271287&r2=271288&view=diff
> ==============================================================================
> --- cfe/trunk/unittests/AST/ASTImporterTest.cpp (original)
> +++ cfe/trunk/unittests/AST/ASTImporterTest.cpp Tue May 31 10:25:05 2016
> @@ -225,20 +225,14 @@ TEST(ImportExpr, ImportCXXThisExpr) {
>
>  TEST(ImportExpr, ImportAtomicExpr) {
>    MatchVerifier<Decl> Verifier;
> -  EXPECT_TRUE(
> -        testImport(
> -          "void declToImport() { int *ptr; __atomic_load_n(ptr, 1); }",
> -          Lang_CXX, "", Lang_CXX, Verifier,
> -          functionDecl(
> -            hasBody(
> -              compoundStmt(
> -                has(
> -                  atomicExpr(
> -                    has(declRefExpr(
> -                          hasDeclaration(varDecl(hasName("ptr"))),
> -                          hasType(asString("int *")))),
> -                    has(integerLiteral(equals(1), hasType(asString("int"))))
> -                    )))))));
> +  EXPECT_TRUE(testImport(
> +      "void declToImport() { int *ptr; __atomic_load_n(ptr, 1); }", Lang_CXX,
> +      "", Lang_CXX, Verifier,
> +      functionDecl(hasBody(compoundStmt(has(atomicExpr(
> +          has(ignoringParenImpCasts(
> +              declRefExpr(hasDeclaration(varDecl(hasName("ptr"))),
> +                          hasType(asString("int *"))))),
> +          has(integerLiteral(equals(1), hasType(asString("int")))))))))));
>  }
>
>  TEST(ImportExpr, ImportLabelDeclAndAddrLabelExpr) {
>
> Modified: cfe/trunk/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp?rev=271288&r1=271287&r2=271288&view=diff
> ==============================================================================
> --- cfe/trunk/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp (original)
> +++ cfe/trunk/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp Tue May 31 10:25:05 2016
> @@ -122,8 +122,8 @@ TEST(Has, MatchesChildTypes) {
>
>  TEST(StatementMatcher, Has) {
>    StatementMatcher HasVariableI =
> -    expr(hasType(pointsTo(recordDecl(hasName("X")))),
> -         has(declRefExpr(to(varDecl(hasName("i"))))));
> +      expr(hasType(pointsTo(recordDecl(hasName("X")))),
> +           has(ignoringParenImpCasts(declRefExpr(to(varDecl(hasName("i")))))));
>
>    EXPECT_TRUE(matches(
>      "class X; X *x(int); void c() { int i; x(i); }", HasVariableI));
>
>
> _______________________________________________
> 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