carlosgalvezp wrote:
So I looked into the problem, and it seems that issue is that the
`ParentMapContext` class does not correctly find all the parents due to the
reduced AST traversal. One quick & dirty solution that makes the CERT test pass
(and keeps all the remaining tests passing) is as follows:
```cpp
ParentMapContext::ParentMap::ParentMap(ASTContext &Ctx) {
+ std::vector<Decl *> const& OldScope = Ctx.getTraversalScope2();
+ Ctx.setTraversalScope({Ctx.getTranslationUnitDecl()});
ASTVisitor(*this).TraverseAST(Ctx);
+ Ctx.setTraversalScope(OldScope);
}
```
Essentially restore the full traversal scope for the sake of fetching all the
parents, and then restoring it. This pattern is not uncommon, I have seen
similar usages with `TraversalKindScope` in `ASTMatchFinder.cpp`, for example:
```cpp
void visitMatch(const BoundNodes& BoundNodesView) override {
TraversalKindScope RAII(*Context, Callback->getCheckTraversalKind());
CurBoundScope RAII2(State, BoundNodesView);
Callback->run(MatchFinder::MatchResult(BoundNodesView, Context));
}
```
So I could create similar `TraversalScopeScope` RAII class.
Let me know if this is an acceptable solution. Otherwise I'm happy to add an
escape hatch. I'm a bit hesitant to adding it to the config file, would a
compile-time flag be preferable (similar to
`CLANG_TIDY_ENABLE_STATIC_ANALYZER`)?
If none of these options are satisfactory I can of course revert and go back to
the drawing board :)
https://github.com/llvm/llvm-project/pull/128150
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits