[PATCH] D66348: [ASTImporter] Do not look up lambda classes

Gabor Marton via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Aug 21 05:36:48 PDT 2019


martong added a comment.

In D66348#1636564 <https://reviews.llvm.org/D66348#1636564>, @shafik wrote:

> I am not enthusiastic about this solution but I need to think about it some more.
>
> We can see that p0624r2 <http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0624r2.pdf> added copy assignable lambdas:
>
>   bool f1() {
>       auto x = []{} = {}; auto x2 = x;
>  
>       return x == x2;
>   }
>  
>   bool f2() {
>       auto x = []{} = {};
>       auto xb = []{} = {};
>  
>       return x == xb;
>   }
>
>
> see godbolt <https://godbolt.org/z/e2a9dV>
>
> So I don't think this is a long-term solution, although I don't know what clang is doing to make this work yet.


Hi Shafik, thank you for looking into this and for the links.
I have added two test cases, which demonstrates that the solution will work even with copy assignable lambdas.

The reason why this works is that when we import "x2" then there is a DeclRefExpr node which points the the lambda class CXXRecordDecl.
And that had been already imported when we imported "x", so it is mapped by `MapImported`. This means we just return with the mapped definition of the lambda class before the code would reach the part when we skip the lookup.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D66348/new/

https://reviews.llvm.org/D66348





More information about the cfe-commits mailing list