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

    <tr>
        <th>Summary</th>
        <td>
            unnecessary constraint enforcement in arguments to __builtin_types_compatible_p
        </td>
    </tr>

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

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

    <tr>
      <th>Reporter</th>
      <td>
          alejandro-colomar
      </td>
    </tr>
</table>

<pre>
    Here's a small reproducer:

```c
alx@devuan:~/tmp$ cat cnt.c 
#include <stdlib.h>
#include <assert.h>


#define must_be(e) \
( \
        0 * (int) sizeof( \
                struct { \
                        static_assert(e, ""); \
                        int ISO_C_forbids_a_struct_with_no_members_;  \
                } \
        ) \
)

#define is_same_type(a, b) \
( \
        __builtin_types_compatible_p(a, b) \
)

#define is_same_typeof(a, b) \
( \
        is_same_type(typeof(a), typeof(b)) \
)

#define is_array(a) \
( \
        !is_same_typeof(a, &(a)[0]) \
)


int
main(void)
{
        return must_be(is_array(((int []) {rand(), rand()})));
}
```
```c
alx@devuan:~/tmp$ gcc -Wall -Wextra -S cnt.c 
alx@devuan:~/tmp$
```
```c
alx@devuan:~/tmp$ clang -Wall -Wextra -S cnt.c 
cnt.c:34:37: error: initializer element is not a compile-time constant
   34 |         return must_be(is_array(((int []) {rand(), rand()})));
      | ^~~~~~
cnt.c:27:25: note: expanded from macro 'is_array'
   27 | !is_same_typeof(a, &(a)[0])                                   \
      | ^
cnt.c:22:29: note: expanded from macro 'is_same_typeof'
   22 |         is_same_type(typeof(a), typeof(b)) \
      |                             ^
cnt.c:17:38: note: expanded from macro 'is_same_type'
   17 | __builtin_types_compatible_p(a, b)                            \
      | ^
cnt.c:9:39: note: expanded from macro 'must_be'
    9 |                         static_assert(e, ""); \
      |                                       ^
1 error generated.
```

Please include the following in an eventual fix:

```
Reported-by: "Basil L. Contovounesios" <basil@contovou.net>
Reported-by: Alejandro Colomar <alx@kernel.org>
```

</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJy0Vk1v4zgP_jXKhUigSHYdH3zIxwTvCyywi53DHA1ZphPNylIgyZl2DvPbF7Kd1pO26QewgpC6pkg-fETSFN6rg0EsSLoh6W4munC0rhAavwtTOzuXVttWuFll64fif-iQsMyDAN8KrcHhydm6k-gIXxPa7zs6bEnoWuh7ktAaz50whK9_EbYP7YmwBKQIIE1YSIg6jCsjdVcjEL71odaqWhwJ__JMJrxHFx5lw2a8xkYZhLbzoayQsBUSlgNJt714NT7BuCgQtgbCVsqEeM6rn2ib5-cuywfXyQAk27xy4OmgCEqWA8gBxRYIY_3OCX9LX5kA___6Z7ktG-sqVftSlIPz8ocKx9LYssW2QufLaOwVayTbXUmmZOTXpClfetFiGR5OkTkRMVe36CvLqlM6KNOr-FLa9iSCqjSWpxcN3HTZE_-20yuUU808Kj--qPoXt50L58TDqPyqR8KWL-Mk7O7iON1Qku5eckfXMbnouhXKELY6W1WPwmzTy3OHoXNmkrMTYMOO6TDUZe8h2zhh6l7Uhzz5L9sNUQ9Z1nvZTWvx_XV5kBLm32Jtz7_hfXAC5l-fCvVVvc85k1qYww13_QPha57En4zwNaBzNjYbUEYFJbT6iQ5QY4smgPJgbAABMSWVxnlQLYK0xgfR3wYA8ARItn0slv_0Fi71uAWSfvkV1yQoFuNhaYzF2IB9cPcnYWqsoXG2hVZIZ4Gw7AlSNhhl2WD0Qxn69prm_wh6ipfFn_x9eH8DdUHNfmP-kxX9BO92KFPoy0g1X30Q-iPw5UD3u_vepymO5PL3MPyYriNCyG8y8rHv0lvcXrO8HIoSDmjQiYD14rob0PVfGoVHuHzJwxGhsVrbH8ocQBkQBvCMJnRCQ6Pun08ThK7_xpN1Aet59RCpIYxthFca_ljA1ppgz7Yz6JX1JGYa31ZRShIqR-HCYBjmhitL68u0A9th2uknjb5r_YPOoF5YdxgnjgmeWV3wOue5mGGxzJKcs-wuzWbHYok0zypJswZzzqs8W1GkPOdVmtNEytVMFYyylN7RjFFG02xR8bzmLG-avGkSyRqSUGyF0gutz230PlPed1gsE85WyUyLCrXvZzbGDP6AXhpvM93NXBGV5lV38CShWvngn8wEFTQWnTEo0XvhHobu6ETscmga6-TYSg0Id-jis4dgbyb_rHO6OIZw8vHe2J6w_UGFY1ctpG0J20fv45_5ydnvKANh-x6zJ2w_BnUu2L8BAAD__65q8oI">