[clang] [Clang] Fix constant evaluating a captured variable in a lambda (PR #68090)

Timm Baeder via cfe-commits cfe-commits at lists.llvm.org
Tue Oct 3 05:06:14 PDT 2023


================
@@ -8366,8 +8366,14 @@ bool LValueExprEvaluator::VisitVarDecl(const Expr *E, const VarDecl *VD) {
       return false;
 
     if (auto *FD = Info.CurrentCall->LambdaCaptureFields.lookup(VD)) {
+      auto *MD = cast<CXXMethodDecl>(Info.CurrentCall->Callee);
       // Start with 'Result' referring to the complete closure object...
-      Result = *Info.CurrentCall->This;
+      if (MD->isExplicitObjectMemberFunction()) {
----------------
tbaederr wrote:

```suggestion
      if (const auto *MD = cast<CXXMethodDecl>(Info.CurrentCall->Callee);
          MD && MD->isExplicitObjectMemberFunction()) {
```

Does that work?

https://github.com/llvm/llvm-project/pull/68090


More information about the cfe-commits mailing list