<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/151394>151394</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[clang][c23] Compatibility of structs containing unnamed structs
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
bolshakov-a
</td>
</tr>
</table>
<pre>
The issue is somehow similar to #150594, but this time with unnamed record types:
```cpp
struct ContainsUnnamed {
struct {
int i;
} x;
};
struct ContainsUnnamed cu;
int main() {
extern struct ContainsUnnamed y;
struct ContainsUnnamed {
struct {
int i;
} x;
};
extern struct ContainsUnnamed y;
return __builtin_types_compatible_p(struct ContainsUnnamed, typeof(cu));
}
```
https://godbolt.org/z/Yh97EPr59
Again, Clang accepts while GCC rejects. Replacing `struct` with `union` gives the same result.
I think the wording suggests that the code should be rejected because it is stated in 6.2.7 that tag types can be compatible if they are declared with the same tag:
> Moreover, two complete structure, union, or enumerated types declared with the same tag are compatible if ...
but in my example the tag is absent. Moreover, Clang already treats top-level unnamed types as incompatible.
CC @AaronBallman
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyMVEGPqzYQ_jXOZbTImBCWA4c88lL1UKmq2kNPkTETcJ-xkT1ONv31lYHdfVu9VSuhxGb4Zr755rNlCHqwiA0rv7DytJORRuebzpkwym_u9iR3nesfze8jgg4hpl8IbsLR3SHoSRvpgRwwUeQlL-s9Ey10kYBGHYD0hHDXNEK0Vk7Yg0flfA_0mDGw4sj4kR34-qh5ZvwYyEdF0DpLUtvwx4Zj1RfGjwBb-HULoC2BZsW6ZdUJXtYNq07r4pOEKq7hhJ-ktkw8M1G_JcYXQm_hE_DjteB_sP0B34-MvyO8sH9d_s_yHil6C5dLF7UhbS-LrhflplmS7gxeZiaef5wlDSp97q5MPKvIRJ2eN-2-Gwzjx5FoXuYlzkycB9d3zlDm_MDE-W8mzn-OdfX1V1_WCcePx2FRtIXWSDuAVApnCnAftUH4qW3B41-oKGTwG85GKm0HYAe-EmUHvnqGHXi02tn0YtA3DEAjQpATgscQDWVrtZ-T2ey3JXp3vk_ZQhwGDJQgkpaIcj1CGF00PXS4McC0VjIGBE2LtUmml9rCIRNZtcHlsDoWlLQJ_C4w6GvK_gDpEXpURnrsV_pvZEkOm9WLr_CL8-hu6Bf5725JZZBwm3X0mCJr36IF5wFtnNAvtFYSn5dZWHwkl2WbSulQagvTA_BFppoLMoF0ANkFtJR9YLfNzniU_QPIo0xyuvnJ4A3N24leOckA2r5X3mq2LbA9P0rv7BdpzCTtrm-Kvi5qucMmr8qi5nUh-G5sSnnAXhR5XxT7uu5EV_Viz8tr_VwfRFHlO90ILkpeFVzkPC-fs32dV3l5VblAJbuqZ3uOk9QmM-Y2JW_ulgurycu8qPc7Izs0YbnnhFCpNyZEuvJ8kwBPXRwC23OjA4X3FKTJLJfjiihPaSkKVp6g3brVRtMD3HWbYAC1HrRkw1eRttAuetP86yxpGmOXKTcxcU5lt7-n2bvkUCbOSxuBifPWya0R_wQAAP__b4Td_w">