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