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

    <tr>
        <th>Summary</th>
        <td>
            [clang] explicit template instantiation generates invalid symbol
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang
      </td>
    </tr>

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

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

<pre>
    ```
template<typename T>
void hello(T* CONST) {}

template void hello<int>(int*);
```

```
C:\Users\vasama\sandbox λ cat test.cpp
template<typename T>
void hello(T* CONST) {}

template void hello<int>(int*);
C:\Users\vasama\sandbox λ clang --version
clang version 20.1.0
Target: x86_64-pc-windows-msvc
Thread model: posix
InstalledDir: C:\Program Files\LLVM\bin
C:\Users\vasama\sandbox λ clang++ test.cpp -c -o test-0.obj -DCONST=
C:\Users\vasama\sandbox λ clang++ test.cpp -c -o test-1.obj -DCONST=const
C:\Users\vasama\sandbox λ dumpbin /SYMBOLS test-0.obj | grep hello

008 00000000 SECT4  notype ()    External     | ??$hello@H@@YAXPEAH@Z (void __cdecl hello<int>(int *))

C:\Users\vasama\sandbox λ dumpbin /SYMBOLS test-1.obj | grep hello

008 00000000 SECT4  notype ()    External     | ??$hello@H@@YAXQEAH@Z (void __cdecl hello<int>(int * const))
```

When targeting the MS ABI, if the function is declared with `const` parameter, the symbol is mangled with `const` parameter, despite `const` on parameters not being part of the function type.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzEVd2O2zYTfZrxzUAGRUmWdKELWbbxBdj9ksLuT3qzoKSJzIAiBZL2et--oCwkm0WBJmjRGgJMEnMOzxkOh8I5OWiiCrItZLuVuPizsdVVODGKVWv6lwo2bPlY7WmclPAESeNfJtJiJDxBsgdWX43s8UxKGeDFCXiNzfv_H0_AS4R8C_kOWP2KAV_FJ43UPrDwIgx4DbyEZBsAr_Z-M20gqSFrfnZkHWTNXTFkjRO6b80NodnDdoud8OjJ-XU3Tf-Bge9VqYQeMIquZJ00Glh9X1nmyNk6XgfXJ2EH8pDUeCs2T5s0mrroWerePLtodNcuhJwtiR5H05MKgZNx8gasfqedF0pRv5M2rC_SPlgzWDHiQSoKEh8efnmErGml_kH5wLfAt1-SjVGHkZmnEVub9jNGu3tCk90_xxy_Ye6Mdv776fvLOLVSI_DD8ePj9v3D8bVgyBscLE3LKc_Hz1iBbPnhcd-cUkRtQi0h8CIUCyLub56sFiqMZxZIDuHj6Z0pZf-DlEHKPta_fdjXYfJ7gM8l9fTU9dSpPy0tXGqLl3c1f9Nm_O_Z_OlHbeL9KL-Y_bYT_HomjX6-DFIP6M-Ej0est--ANyg_zQufLrrz4fZIh2ErYanHZ-nPCBt2Z98wnIQVI3myARlg7mVsjQqgUehB_SWmJzdJT98EGP01xoXEYUtB5ySsR_NGXsjqetVXSV8mpVhRFedpkrOUp_nqXG16FrNWZG1YpbTMqM9yFpdx1xd8w_qVrDjjGUtZEhdxzvO1ELwv27JMirzI4zSGlNEopFordR3Xxg4r6dyFqjhJeVGulGhJufkB4Hy5bzy8BbYKgKi9DA5SpqTz7iuFl17Nr8Ydke2QbpOSnQztdumQMnQc7aWYbQ6kyQpPDqW-CiX7JdOri1XV2fvJhWLmB-CHQfrzpV13ZgR-CFsuf9FkzWfqPPDDbMEBPywurhX_IwAA__--DBE1">