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

    <tr>
        <th>Summary</th>
        <td>
            Merging of lambda types 
        </td>
    </tr>

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

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

    <tr>
      <th>Reporter</th>
      <td>
          ilya-biryukov
      </td>
    </tr>
</table>

<pre>
    I believe this code should not produce the static assertion failure:
```cpp
//--- lambda.h
//--- lambda.h
#pragma once

inline auto cmp = [](auto l, auto r) {
  return l < r;
};
//--- A.cppm
module;
#include "lambda.h"

export module A;
export auto c1 = cmp;
export using ::cmp;
//--- B.cppm
module;
#include "lambda.h"

export module B;
export auto c2 = cmp;
export using ::cmp;
//--- use.cppm
module;

export module use;

import A;
import B;

static_assert(__is_same(decltype(c1), decltype(c2))); // should succeed.
auto x = cmp; // cmp must not be ambiguous,

// Build with:
// clang++ -std=c++20 -precompile -o A.pcm A.cppm
// clang++ -std=c++20 -precompile -o B.pcm B.cppm
// clang++ -std=c++20 -fprebuilt-module-path=. use.cppm
```

As the lambda meets all requirements specified in [basic.def.odr](https://eel.is/c++draft/basic.def.odr) and `cmp` is declared inline. I.e. this should be no different from explicit class declaration from lambda.

However, the static assertion currently fails and the use of 'cmp' produces an "ambiguous reference" error.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJytVduO4zYM_Rr7hYhhy7k--CHeYNB96DcMZIlO1MqWq8vs5u9Lyc5lBoNddFBASGxSog4PD-nOyGvzHTrUCt8Q_EU5EEYiuIsJWsJoPEzWyCCik8yeeyWAO4fWKzNCz5UOFrP6mJWnrDxm23JeYpoWC3uhtVqtQPOhk7y4_M5eT5afBw5mFLjY0q8atRoRePAGxDBBVp8g27TZ5pSxfbLqjH2b_TZjB8h27XwSwKIPdgRNh76Rs14c2e70eL4DOhaEfpitAyWv8WlTrUahA1GUMXZHztgzUPw5GethPgrH--HFPidQJfyUx0d3cGo8Q2S0Pj67H_ja_xVf-zk-9nV8weEvEH4CgQ588Ksh-R_cLYb2w75ZkK-zIEkGr6_KvTo-ID1LFNpfp_goKtJDFMezjSVbWnULM_yb8F0QAlEW8y2JkZ9PhNx2RxkOwfnUKB1pc-jUOZjg6K5nmMv2NiiK_UP5y6NhlkCaj-eMtbRg5bykq8T8ykpYTRaFGSZFVK0MyXMSwzuRfiFIm4K0_zVIT1E6ysKv5tKtJh6TORUfin6fA88sHF0aIrMqYUD0DrjW1Jz_BGVxwJEMbkKheoUS1Bjbu-NOiUJiXxhp516_eD-5yGBCjKgLRYS_LDCl5T1J4eX9QRoHfJQQJxNVcFsCTbooBm7TTXGyFPC9oJ80BBcZUElHA1L1PVpCB701A5B2tRLKR6rcLQqfx2H0L133nPkf5gfNVxsV-OkYFcHG-PqaBqpLUONGIhVMT2rbRdRsdxvGcUds8LveiMMEkSYmY4DWGlvk2FTbbbmvWVWzXDa1PNQHnnvlNTZ_oj3HPqboSz1iWzjIg9XNe4LPpNfQFSQeetH67fZHijJ_oYhcK-cCxhpsdoyx_NJ0WO9Rlmvkm67CXblZs75ey30p-n21Z3WuOX10XBPnN2N3gcVBRRxFU5JhfSRGR4-jjJ7NKVcNKxkrKUa1rjZsX-zLw3ZXbQ6HddeLXm6zdYkDcVhEhIWx59w2CWwXzo6cWjnvHk4qgTqPiM38Icmp0y_GNkpf-apT9hr-Nm95yq5Jqf0LjVMrmA">