<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/151735>151735</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[clang][c23] Inconsistent compatibility of unnamed enums
</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>
In C23 mode, Clang accepts such code (https://godbolt.org/z/Ys935rfnx):
```c
enum {A, B} e1;
int main() {
extern typeof(e1) x;
enum {A, B} e2;
extern typeof(e2) x;
}
```
and such code (https://godbolt.org/z/9WEG3qsTM):
```c
typedef enum {A, B} E1;
int main() {
extern E1 x;
typedef enum {A, B} E1;
extern E1 x;
}
```
while rejecting such code (https://godbolt.org/z/TqW6GjnnW):
```c
typedef enum {A, B} E1;
int main() {
extern E1 x;
typedef enum {A, B} E2;
extern E2 x;
}
```
GCC rejects them all.
In contrast, for the case of unnamed record types, Clang considers them as incompatible (https://godbolt.org/z/j84rrnjhh).
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzElE1voz4Qxj_NcLEamSEEfOBAXqh6-N8qVf-jwZPgrLFT23Tb_fQrp-226mZfeloJCSTPM_P8HouRIeiDJWqgXEO5zeQcR-eb3pkwyi_u4UpmvVNPzY1lGyzY5BQBbtjGSHtgchjoFAML8zCywSligPUY4ylA0QJ2gN3Bqd6ZuHD-ANh9A-z-D6Io_d4-AopUxltY8ednAN6SnScG1bpNY9ZQbRnlUKyBt9pGNkltAWtAkWqAt4weI3nL4tOJ3B6wpjwdPj5LGLvQDn-cfZTiOylU2_fWgLfSqs-RirvddXEfbv-7TJrmKtpfsLj7LfGr713-hvnnXhdkPyN-HbUh5ulIQ9T28Dnc2_u71fXR2rt_ivvxdnf4a9zrzeYFNrA40sSkMYtUw9sbywZno5chpt5751MFG2Qg5vZstlZOpJinwXl19hPe_ovB2aAV-deugWk7uOkko-7NX2V5rJfe2-M4AopFpppCiULIjJq8Kpd8Vdd1lY2NWikUxbKsFakhx0ouea-oKnuh9gWKVaYb5Fjymud5hTlWC1nktRJ1iUIoLoSCJadJarMw5mFK8zMdwkxNXuZVUWZG9mTCeTcgDokNENOa8E0SXPXzIcCSGx1ieGsRdTTnhfKsKLfpEwsot-zGnrMJkWxkr5Foo-PT-1TTtYZs9qb5kJOO49wvBjcBdmncy-vq5F26RcDubD8Adi8EDw1-DwAA__81IXF_">