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

    <tr>
        <th>Summary</th>
        <td>
            clang-format: improper formatting of C generic macros
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

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

<pre>
    Clang format seems to treat C generic macros as some other type of structure. This *definitely* does not look correct.

What I get, using clang-format 14.0.6:

```c
#pragma once

#include <stdbool.h>
#include <stdint.h>

static inline bool is_bit_set_u32(uint32_t value, uint8_t bit) { return (value >> bit) == 1; }

static inline bool is_bit_set_u16(uint16_t value, uint8_t bit) { return (value >> bit) == 1; }

static inline bool is_bit_set_u8(uint8_t value, uint8_t bit) { return (value >> bit) == 1; }

#define is_bit_set(VAL, BIT)                      \
    _Generic((VAL), uint32_t \
             : is_bit_set_u32(VAL, BIT), uint16_t \
             : is_bit_set_u16(VAL, BIT), uint8_t  \
             : is_bit_set_u8(VAL, BIT))

```
How it *could* look:

```c
#define is_bit_set(VAL, BIT) _Generic((VAL), \
 uint32_t : is_bit_set_u32(VAL, BIT), \
 uint16_t : is_bit_set_u16(VAL, BIT), \
 uint8_t : is_bit_set_u8(VAL, BIT))
```

There are definitely some points for discussion here, such as indentation and whether `_Generic` should be on a separate line. I don't think most anyone would question putting each type on it's own line.

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzEVUFv6zYM_jXKhagh04njHHxIk5etwI7FdgwUmYnV2pInUS_ovx9kpy8N2rd2h-EFgQxB5MdPH0VShWBOlqgWi3ux2M5U5Nb5-kmFZ_M0O7jmpd50yp7g6HyvGAJRH4AdsCfFsIETWfJGQ6-0dwFUgOB6AscteeCXgcAdIbCPmqOnDB5bE0DguqGjsYapexG4hsZRAOsYOueeQTvvSXMm5FbI9bT-1SqGBzgRC9xADMaeQCdmdxdm-TyTWSmK9VsvUcrpry97LAavTr0CZzXdWGJhrO5iQyCKTeDm4FyXtaL49pNzY_nt8bgGVmw0GNsZS5AQwIT9wfA-EO9jgQKraCwXuGf4rrpI42WM5WrPcDAscAVieQ-eOHoLAqvRClKc4tsPi2Irii3korgHsdz-BwZ5eWGQl7-IQXUhUP1f8QUW49uiN2EFVn-u_0iR7h8ek_-HP7HYTBBps_9tetgCq1fv1SvVMX031leMYv0-5TexX0HGDHwNZMzahyBJtC-CVO8xVh-WyrT93Z3BcKpU7WLXpCJNtfl5fX0u_s-kvd7jKvKX5Lx1nIT9koS3jtUHfv-i2q1e0_rYkidQnuDa36aGODhjOaQ2Co0JOoZgnIVknrBD1G3qncY2ZFMBOQvKNnBuaWykopQ_VCslhDblBA4EyQ4CDcorJkgll8EDNM4KXDJwa-wz9C4wKPviLMF5dPw7UhhjDJE5dVJSur10awupxJYB3NlOgNPVZk1dNKtipWZU5-UyL2WZSzlra0Vlg_l8rqrFXEssqyrHlSyrpcoLxGo1MzVKxBwxl0uZz2VWIR4lSV0t9LIs6SjmknpluqzrvveZ86eZCSFSvViVRT7r1IG6MA4oREtnGA8FYppXvk4-d4d4CmIuOxM4XFHYcEf12ykxprcfvBvIX0baeH93fDfKZtF3dcs8hPTmcSdwdzLcxkOmXS9wl6JcPneDd0-kWeBu5BYE7kbu_wQAAP__AsswwQ">