================
@@ -2897,6 +2897,15 @@ DEF_TRAVERSE_STMT(LambdaExpr, {
if (getDerived().shouldVisitImplicitCode()) {
// The implicit model is simple: everything else is in the lambda class.
TRY_TO(TraverseDecl(S->getLambdaClass()));
+
+ // The body is normally reached through the call operator of the closure
+ // class. If that declaration is not a definition (which happens when the
+ // closure type was merged with one from another module), visit the body
+ // through the lambda expression.
+ if (CXXMethodDecl *CallOp = S->getCallOperator();
+ CallOp && !CallOp->isThisDeclarationADefinition() &&
+ getDerived().shouldVisitLambdaBody())
+ TRY_TO_TRAVERSE_OR_ENQUEUE_STMT(S->getBody());
----------------
Maoyao233 wrote:
I see. I will move the code to parentMap.
I simply think that RAV missing some nodes is a violation of the API contract,
and I instinctively dislike potential inconsistency between upstream and
downstream. Now I did realized the maintenance burden of introducing highly
case-specific code into such a core module.
https://github.com/llvm/llvm-project/pull/237067
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits