<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/141724>141724</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[Clang] C23 struct compatiblity rule differs from GCC
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
fuhsnn
</td>
</tr>
</table>
<pre>
The last case shows that clang-21 currently treat two same-record structs without tag as compatible, while GCC doesn't.
```
struct {int i;} nontag;
struct tag {int i;} tagged;
static_assert(1 == _Generic(tagged, struct tag {int i;}:1, default:0)); // both 1
static_assert(0 == _Generic(tagged, struct {int i;}:1, default:0)); // both 0
static_assert(0 == _Generic(nontag, struct tag {int i;}:1, default:0)); // both 0
static_assert(0 == _Generic(nontag, struct {int i;}:1, default:0)); // gcc:0 clang:1
```
https://godbolt.org/z/bGWfYT5WE
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJysk92K2zAQhZ9mfDMkyCM7di58kZ96X2Bh6dUiS7KtoliLNN6wffriJN3SbQthqREYmzPz6QxzVEpumKxtoNxDeczUzGOITT-PaZqyLpi35nG06FVi1CpZTGM4J-RRMWqvpmFFOeo5Rjuxf0OOVjHyOWBSJ7uKVodoMHGcNSc8Ox7DzMhqQJVQh9OLYtd5C3TA8-i8xYfDAU2waQKqeA1iBxtxO2J37YPLA9XeTYwO5B6qI05hYjUsH--qBfJBxWoYrLmqLkLFTj-rlGxkoDpHkEeQR3x-sJONTgPVtxI64D_bgtzli8DYXs2eQe4E0HY5co9ALVCLXeAR878wxT3MPw3fzRR3Mm8D_C8-P838nM9B6-X_dR0vBb9vzcj8kkDurvIhmC54Xoc4ALXfgdru4an_-lg-fclMI81WblVmm7wq6iKvpRTZ2GiVi8pUm76krep6vdnkZS9tKbYd2byoMteQoFKUVIuqKKVYb-tiYypTlXW56fo6h0LYk3J-7f3raWFnLqXZNnmRV1RkXnXWp0sGia4-iJY4xmYpWHXzkKAQ3iVOv1qwY38J7uFSUR7xQPLnLN_D5fgN4-wtGtf3NibsYzgtOcvm6JsPw3E8zt1ahxNQu3Bur9VLDN-sZqD2cu8E1N6u_trQjwAAAP__LLBKyA">