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