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