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

    <tr>
        <th>Summary</th>
        <td>
            [clang-format] Extended inline asm colons without spaces treated as a single token
        </td>
    </tr>

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

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

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

<pre>
    It appears that the extended inline asm feature of both gcc and clang allow for the colons used to separate parameters to have no spaces in between, like in the following:

```c
asm("dsb sy" ::: "memory");
```

The debug output shows the following:

```
AnnotatedTokens(L=0, P=0, T=5, C=0):
 M=0 C=0 T=Unknown S=1 F=0 B=0 BK=0 P=0 Name=asm L=3 PPK=2 FakeLParens= FakeRParens=0 II=0x556d4b8e7040 Text='asm'
 M=0 C=0 T=Unknown S=0 F=0 B=0 BK=0 P=23 Name=l_paren L=4 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text='('
 M=0 C=1 T=Unknown S=0 F=0 B=0 BK=0 P=140 Name=string_literal L=12 PPK=2 FakeLParens=0/ FakeRParens=0 II=0x0 Text='"dsb sy"'
 M=0 C=0 T=Unknown S=1 F=0 B=0 BK=0 P=43 Name=coloncolon L=15 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text='::'
 M=0 C=1 T=InlineASMColon S=0 F=0 B=0 BK=0 P=540 Name=colon L=16 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text=':'
 M=0 C=0 T=Unknown S=1 F=0 B=0 BK=0 P=43 Name=string_literal L=25 PPK=2 FakeLParens= FakeRParens=1 II=0x0 Text='"memory"'
 M=0 C=0 T=Unknown S=0 F=0 B=0 BK=0 P=43 Name=r_paren L=26 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text=')'
 M=0 C=0 T=Unknown S=0 F=0 B=0 BK=0 P=23 Name=semi L=27 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text=';'
----
```

Note the `coloncolon` and `colon` in the middle. The former also doesn't become `TT_InlineASMColon`, because it's not a `colon`.

This on its own would not be a big deal, since the tokens stay as they are under default options, however, when combined with `ColumnLimit: 0`, it becomes the following (because of #62754):

```c
asm("dsb sy" ::
        : "memory");
```

This definitely looks suboptimal, even moreso than just #62754 by itself.

Reproduced on trunk (e4d3e88802390a51ae62ade18e48c1a65a862d12)

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJysVl-P2jgQ_zTmZQRynD8kDzx04ZBWt61WLfe8cuIJcXFsZDvL8u1PdoBle92K3hZFsT3E49_8Zjwz3Dm51YgLkt-RfDXhg--MXdhjL1FNaiOOi3sPfL9Hbh34jnvwHQK-eNQCBUitpEbgrocWuR8sgmmhNr6DbdMA1wIaxfUWuFLmAK2xcX9jlNEOBocCvAGHe265RwhDjx7DWQY6_oygDbg9b9CB1FCjPyBqwpag5A6DKKhrTdAu9ZaknwhdEXp-F3R8mnHNXU9YSRgTrgZ3JIxB2BEfIIz12BsbxIRVJL37Qcm15k2HILAetmAGvx88uM4c3G1gxuUnrY3nHsXG7FA7wsoHkq5oMO3xPNmQdJWHyXKUVBeV8DlIRnn87B-90-ag4RtJVwmso_xufP8dh6gUvvAeSboK_grHpfD4GP5msOY7fHjkNkBJV3H59bKkcH8fhpc8L0RWlzinGYUNvniSrgibR17nNyCj7yFj6RmaetqHYyO87DfhXWOKjv4vpuR2TEl24ct5K_X2SUmPlquILWHvgKOErW8D-BqGt7H3rl-zC3vxYsXXCDL_CIPj1XiXxPt49z99-7yM5_2Sy_yVyyt0xQfR_SnWfuJediNzyTuuvUolH7oYryDt1cVgH2KOVX_stjrs5Yho_iFf3l0QTafT6S8S7xfjMabZkNUvwU4KGmvNWRjWp9rQSyEUzmATU7Pt0QJXzoAw6DRhcw81NqaPCjebp7dBHQ5ny_AFHxyC9ITNHWjjgV-fNXtbGqQDo0F6B4HJgxmUiHtqBA613IJAroJeJ3UzWuNjEQDn-RF4rCNH4BZh0AItCGz5oDyYvZcm1IoldOaAz2jD9NChhsb0tdQo4CB9F7AtjRp6_SB76UN1oydT5NneH4oVEFaezTQtEJYWbJ5n1zXnd2vqGGCn3_-osNIFw6WWHtURlDE7B26oAwn9yB8-o4beWHQm9CYavg_OX7BDfQxOQNW-8c9X3FsjhgZF8JK3g94F4zETKZZlSVlaUZ4nHAvGBSYlZmWT8CLnZcFEEoFHPROxSEWVVnyCi6QoM1amaZJNukXb8iqhJUurKqlowtsiqSrKGWtFmxdtPZELRllK82ROKSvTbMazssrLtshZxopqXpKMYs-lmin13M-M3U6kcwMugln5RPEalYsdG2Oxu5qGwOY-0JqvJnYRtk3rYetIRpV03r0q8tKr2O292Ziv4K-ftHSnNi2ElAk9ztiHeYuhbwlxykMIb9UpfieDVYvO-72LyXlN2HorfTfUs8b0hK0DiNMw3VvzHRtP2Dqa5ghbR-v-DQAA__-eQgv3">