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

    <tr>
        <th>Summary</th>
        <td>
            [Clang][diagnostics] The location marking that structured binding shadows template parameter is not clear
        </td>
    </tr>

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

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

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

<pre>
    ```cpp
template <typename T> void test1() {
  using arr = int[1];
  auto [T] = arr{};
}
```

Current diagnostics:

```txt
<source>:3:8: error: declaration of 'T' shadows template parameter
    3 |   auto [T] = arr{};
 |        ^
<source>:1:20: note: template parameter is declared here
 1 | template <typename T> void test1() {
      | ^
```

Expected diagnostics:

```txt
<source>:3:9: error: declaration of 'T' shadows template parameter
    3 |   auto [T] = arr{};
      | ^
<source>:1:20: note: template parameter is declared here
    1 | template <typename T> void test1() {
      |                    ^
```

It becomes more obvious if we add new line characters between '[' and ']':

```cpp
template <typename T> void test2() {
  using arr = int[1];
 auto [
    T
  ] = arr{};
}
```

Current diagnostics:

```txt
<source>:8:8: error: declaration of 'T' shadows template parameter
    8 |   auto [
      |        ^
<source>:6:20: note: template parameter is declared here
    6 | template <typename T> void test2() {
      |                    ^
```

Expected diagnostics:

```txt
<source>:9:5: error: declaration of 'T' shadows template parameter
    9 |     T
      |     ^
<source>:6:20: note: template parameter is declared here
    6 | template <typename T> void test2() {
      |                    ^
```

Compiler Explorer: <https://godbolt.org/z/oEPdWaabK>

I believe this can be a good-first-issue.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzUVk1v4zYQ_TXjyyCGROrDOuggfwFFLz0Y6JkSJxZbShTIkZ3dX19Q9qZtkqK7m2CBFQyTEofke2_eEFQhmPNIVEO-hXy_UjP3ztefr7MJq9bpTzUUye3XTRMkDdMwWcWEIHf8aaJRDYQnkAe8OKORKXAKYgOiQii3kDSIczDjGZX3CHKPZmTItynke5C3cTWzQ8i3J8j3S4jyPs4t7xGxkzTPOGI_aXaz9zQyaqPOowtsugCyuY09h_ITx1e5C272HYE8gGwkyGYDskHy3vnY0dRZ5RUbN6J7RBDlCUSJoVfaXQM-U56UVwMx-QU2okQod_j_BO5hywP54TWkFGQjkghldEyxfb0nmnAHShp78hQXTpelvyMnC5Ry9wXOv7U9PE3UMenvFLf6seK-5PJB0iK-X903njcF_4Wxpc4NFHBwntC1F-PmgOYRr4RKaxzpitaMhF2vvOqYfMCW-Eo0Rklj9YoS1ahvb_v4_ypjX13B4tsq-EuK7txPS_tjinnzYcW8eeG3txL5psOKdzis-FqHvczItzrsHSUdyzn_EImrZ8inVyR-Xml3bpiMJY-Hp8k6T4tEIHc987RoLI4gjmenW2d57fwZxPEziKM7_KZ_V6r9NXK9HQPYkjV0IeTeBOzUiC2hwrNz-uHR-MAPJoSZ1itdS13JSq2oTsssKYosE3LV14WsUiHLTlWtVklXqbbVaZGVpHPdFptsZWqRiDwRokxlLjOxFm2i0lzKR1FkQqsKsoQGZeza2ssQ0a6WLetUVEmRrKxqyYbltiBEZ9V4BiHixcHXccJDO58DZIk1gcPfS7Bhu1wxdsuMfA_59p9GzPd46gmt626mGpT_M5443CvGwH7ueI7pbc2o4_f_dlp0w-gYO0vKr2Zv6xdpMNzP7bpzA4hjxHdvHibv_qCOQRwXvgHE8U75Uou_AgAA__91HaSI">