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