[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