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
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to