[cfe-dev] [clang-tidy] problem finding AST matcher for nested implicit const-cast

Torbjörn Klatt via cfe-dev cfe-dev at lists.llvm.org
Tue May 7 13:06:27 PDT 2019


Hi all,

I'm trying to fix the clang-tidy bug 35082 [1] as a starter for getting into LLVM development and contribution.

I think, I've tracked down the issue to

clang-tidy/modernize/LoopConvertCheck.cpp:123ff: clang::tidy::modernize::makeIteratorLoopMatcher()
```
  DeclarationMatcher InitDeclMatcher =
      varDecl(hasInitializer(anyOf(ignoringParenImpCasts(BeginCallMatcher),
                                   materializeTemporaryExpr(
                                       ignoringParenImpCasts(BeginCallMatcher)),
                                   hasDescendant(BeginCallMatcher))))
          .bind(InitVarName);
```
The definition of `InitDeclMatcher` seems to not match  the AST tree
```
  |-ForStmt
  | |-DeclStmt
  | | `-VarDecl
  | |   `-ExprWithCleanups
  | |     `-ImplicitCastExpr
  | |       `-CXXConstructExpr
  | |         `-MaterializeTemporaryExpr
  | |           `-ImplicitCastExpr
  | |             `-CXXMemberCallExpr
  | |               `-MemberExpr 
  | |                 `-DeclRefExpr
```
of
```
std::vector<int> vec{1, 2, 3, 4, 5};
for(std::vector<int>::const_iterator i = vec.begin(); i != vec.end(); ++i) { ... }
```

In my naivety, I tried to include the following into the `anyOf`:
```
                                   exprWithCleanups(
                                       ignoringParenImpCasts(
                                           cxxConstructExpr(
                                               materializeTemporaryExpr(
                                                   ignoringParenImpCasts(
                                                       BeginCallMatcher))))),
```
mimicking the specific AST tree. Without luck.

I browsed through include/clang/ASTMatchers.h for better suited matchers, but couldn't find any.

What important detail am I missing?

Best
Torbjörn

[1]: https://bugs.llvm.org/show_bug.cgi?id=35082






More information about the cfe-dev mailing list