<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">