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

    <tr>
        <th>Summary</th>
        <td>
            clang-format adds a space after `not` inside macros
        </td>
    </tr>

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

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

    <tr>
      <th>Reporter</th>
      <td>
          ilya-biryukov
      </td>
    </tr>
</table>

<pre>
    Expected formatting:
```cpp
#define ASSEMBLER_INSTRUCTION_LIST(V) \
  V(and) \
  V(not) \
  V(other)
```

Actual formatting:
```cpp
#define ASSEMBLER_INSTRUCTION_LIST(V) \
  V(and) \
  V(not )                             \
 V(other)
```

This can even change the meaning of some code in rare circumstances:
```cpp
#define ASSEMBLER_INSTRUCTION_LIST(V) \
 V(and)                            \
    V(not !) /* was not! before formatting*/ \
    V(other)

#define STRINGIFY(X) #X

const char* foo = ASSEMBLER_INSTRUCTION_LIST(STRINGIFY);
/* foo was "andnot!other" before formatting 
    and is "andnot !other" after formatting */
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzEVF9vmz4U_TTm5SqRMSTBDzykf_gpUn-d1GRV91QZ-wLewEa26dZvP0FSlaVV1YdJQwjEFefcc861rvBe1wYxJ6sLsrqKxBAa63LdPotFqd3z8MM-RaVVz_n1rx5lQAWVdZ0IQZuaJFtCrwjdkjU93rLvTxWWKKy0Qdju99f_X9xc3z3ubveHu6-Xh92X28eb3f5AWHZPGAeyujyCAO4Jy4RR71SNDe9UbWjQEcbPZJw-p-dWhkG0_041jOWPrlfIJx0dGu1BCgP4hAZkI0yNEBqEDoXRpgZbgbcdgrQKQRtwwiFI7eTQ-SCMRP_XM5hF8CmrMM8nnrhYQdgWfgoP06xjKLGyDueTY1vCircsZ5md2dgf7na3_-2Kb4RlD8dOycP8V2mND2OObhRQWQskufrY_YyTk-TipWXxQjC6IIwJo45eTgrZW0_wakUYBXqGgzlQVAHdH7gpjLMpRipPFE-4iDCPN3SVMJ5lPGpyRTktUVVlVamk4hXjZcZTpdZKZSXlq0jnjLKUxvEqTtM05ctMxBSFkIjZRtJ4Q1KKndDtsm2fuqV1daS9HzDfZPF6HbWixNZPW4Qx2QpTL45aCWPjXnH5CFuUQ-1JSlvtg38lCjq0mM9RIJTyIMD3QuLJO1nTMcw1BW28VgidkM76aHBt3oTQT4d6HEFR69AM5VLajrBi7HJ6LXpnv6MMhBWTdk9YMcn_HQAA___YsWrD">