<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/59513>59513</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [C++20] [Modules] The contractor of lambda is broken after deserialization
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            c++20,
            clang:modules
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          ChuanqiXu9
      </td>
    </tr>
</table>

<pre>
    Reproducer:

```
//--- lambda.h
auto cmp = [](auto l, auto r) {
  return l < r;
};

//--- A.cppm
module;
#include "lambda.h"
export module A;

//--- use.cpp
import A;
auto x = cmp;
```

Compile it with:

```
clang++ -std=c++20 --precompile -o A.pcm A.cppm
clang++ -std=c++20 -fprebuilt-module-path=. use.cpp
```

It would emit the following errors:

```
use.cpp:5:6: error: no matching constructor for initialization of '(lambda at /home/chuanqi.xcq/workspace.xuchuanqi/llvm-project-for-work/build/57222/lambda.h:1:12)'
auto x = cmp; // cmp must not be ambiguous,
     ^ ~~~
/home/chuanqi.xcq/workspace.xuchuanqi/llvm-project-for-work/build/57222/lambda.h:1:12: note: candidate template ignored: could not match 'auto (*)(type-parameter-0-0, type-parameter-0-1)' against '(lambda at /home/chuanqi.xcq/workspace.xuchuanqi/llvm-project-for-work/build/57222/lambda.h:1:12)'
auto cmp = [](auto l, auto r) {
           ^
1 error generated.
```


</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMVc-Pq0YM_mvMxQKBCSEcOGSTF6mHXqoeeh3AgekbGN786O7rYf_2aoZsorfdrtRL1Sghg2ds833-bIS1clyYW6ieoDonwrtJm_Y0ebF8k7_5Jun08L39hVejB9-zgfII-Rnyt-s-v323W7oAXdI0RSXmbhDZtNmFdxr7eUUoz7ilAjpEqwI6YVwZoAahftpcEA07bxZUCOUJDZS3DajPj_W7rMesX9d5s8568IofR6mUS6_8wAhE98cj2rb5ZdXG4eaEx3_M4C2HHJtZztHpcTrieIko-3l9BHnHUrye9LxKxSgdPks3fU5sr8QyAj0BPWFq3QDlud9uKcc0XQ33t3CpxmO29vMPXHzufl0Nd14ql27w01WE5zlnP6L9EMVPDp-1VwPyLB26ifGqldLPchmRjdHGfg7sLUN5rKA87qE8bm5hsWicheunEKvXi3XG904bvGqDcpFOCiX_FE7qBfUVgWqgw1ZYFA6BLpOeGejSb2rOXvpvQJdnbb7aVfScvfjbDtBFqT_mdDX6d-5detUmDceALoGXAehS1UQUzr0JpzwW4UdATcj8cflxE06U_uytw0U77BjF3MnRa2-BTm9yR0SovuDr6-tdc__J80eiHYf_XiyDHIRjdDyvKizkuGjDQ9yNdQ4IYlUC4REw0AHoGHk4uO9rkI8RMzs2aZ7mob3_Zi021lCMQi7W_W9q929H1P0D1ZfNVmzyxZEXNsLxkH3SPMnQlkNTNiLhttjXRV6UuzxPpvYwVF1eH7je513D16rfibysm7yibhDdbpfIlnKigopdkVNJecZFsyuu-7rZi6KgeoBdzrOQKgvkZNqMibTWc1s1VVEmSnSsbBz6RPdJEIYhnYIljovyNkJtsFfnxLSR6M6PFna5ktbZR3QnnYpvkdM9WhV5_PkWozrjrxOHPnZGxDbW19tbAqXFzuivvKC4OjY4sGXz6O7EG9VOzq1xlsSOGqWbfJf1er7V_50MgC4Rrw3lD5D_CgAA___v4ws2">