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

    <tr>
        <th>Summary</th>
        <td>
            [C++][Modules] Definition with same mangled name for template arguments of types defined in unnamed namespace in different files
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

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

<pre>
    Given the following translation units:

```c++
export module a;

struct a_inner {
        ~a_inner() {
        }
        void f(auto) {
        }
};

export template<typename T>
struct a {
        a() {
                struct local {};
                inner.f(local());
        }
private:
        a_inner inner;
};


namespace {

struct s {
};

} // namespace

void f() {
        a<s> x;
}
```

```c++
import a;

namespace {

struct s {
};

} // namespace

void g() {
        a<s> x;
}
```

clang fails with

```console
/opt/compiler-explorer/clang-assertions-trunk/bin/clang++ --gcc-toolchain=/opt/compiler-explorer/gcc-snapshot   -fcolor-diagnostics -fno-crash-diagnostics -std=c++20 -MD -MT CMakeFiles/foo.dir/b.cpp.o -MF CMakeFiles/foo.dir/b.cpp.o.d @CMakeFiles/foo.dir/b.cpp.o.modmap -o CMakeFiles/foo.dir/b.cpp.o -c /app/b.cpp
In file included from /app/b.cpp:1:
a.cpp:11:8: error: definition with same mangled name '_ZNW1a1aIN12_GLOBAL__N_11sEED2Ev' as another definition
   11 | struct a {
      |        ^
a.cpp:11:8: note: previous definition is here
```

See it live: https://godbolt.org/z/vsdznvsbP
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJysVVFvpDYQ_jXelxErMGwIDzxswnI66XKt1JMq9WVl8ADuGRvZhuTuob-9siHZTe7aSFWRJWBmPN_nGc8Ms1b0CrEkhztyqHZsdoM2JWeL4NZphbtG82_lB7GgAjcgdFpK_ShUD84wZSVzQiuYlXCWpEcSh3UTr6sl9M6v-IhPkzYORs1nicBIereaWmfm1gE7C6XQAMlXefHXJiH0ltDiIid5tX4sWnDoCL1ls9M_M8mrF5AN3OE4SeaQpPfu24SKjQhfSHq6onHxwn5AjovNSuqWyaC4YHh1ILz3nILF6sCv9BWzyYglsDhuSNvZ1_OutlfkSXz0TO3EWnxh80zYPkuuN-QVEFoTWsPLxlXzErNXB2MkvbckPcHTBfwqh_-YUjGGqF5y-b_S7P8TzVYy1UPHhLTwKNzwlrxWVssAQ2s9OULrVo-TkGgifJqkNv7G1cFLxKxF42-3jZyZ1VdC60aoZ_UaBoiivm0jp7VsByYUSat_9eyNrWKTHbQDgKhrtdQm4oL1SlsnWgtRp3TUGmaH12LrOEmrLfw0huihgujhC9w_sK9YC4mW0LrTes-FR2r27TTtNUQP9Tsmew4ki9-xGTUf2QSRfhev9Vll0_QsI_Hxo4JOSAShWjlz5NAZPb41S4_JWhLs-df_35L0CGiMNv6DYyeUCB3HZxesL-GRqV4iD7cICM3Pf3z-PWEJ-_g5oecPn365O346nz-fk8SeThU9LYTmwCwwpd2A5soniY8AkCRA8nt40xEgPF6xPeRw-ilXpUNpw2RwEXq215yFhQEN_nhtf0ME4UCKJewdnJtCNw3l0WveaOn22vSE1t8JrRfLv6vFNr_ueJnyIi3YDsskT7MkK2hc7IaSJm2a5klWNNgkmCLmcdfSPO_obUHpDe5ESWOaJTTJ4iy-yYp90uSHNKYpa4r0hrGcZDGOTMi9lMvosXfC2hnLJCmKLN9J1qC0YWpQqvARgpZQ6oeIKf2mqJl7S7JYCuvsxY0TToZxc791kkNFDncPYTBYcqigejfJnTYvzRyY6ecRlbOgO_B9fQs5chB-MPkd_NJivJCLrkODyoVraXezkeWbmAs3zM2-1SOhtae-vaLJ6D-x9eUdDuxrYIvIUtK_AwAA__-T1DE3">