<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/150594>150594</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [clang] Enums differing in underlying type are compatible
        </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 following code is accepted by clang but rejected by GCC (C23 mode):
```cpp
enum E : int {A, B, C};

enum E e;

int main() {
 extern enum E Fn();
  enum E {A, B, C};
  extern enum E Fn();
  return __builtin_types_compatible_p(enum E, typeof(e));
}
```
https://godbolt.org/z/Eab5nz3q9
Compiled by clang, it returns 1, whereas if compiled by GCC (provided that the second `Fn()` declaration is removed) it returns 0.

I think GCC behavior is correct because 6.2.7 "Compatible type and composite type" states:
>  For two enumerations, ... if one has a fixed underlying type, then the other shall have a compatible fixed underlying type.

</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyEVMGOozgQ_RpzKTUyRQjhwIGmm9Xe9x4ZXATvGJu1TXp6vn5lYDJRa1cjRUGU61XVe6-M8F7dDFHNildWvCViDZN1dW-1n8Q3e38RSW_lZ_3XRDBare2HMjcYrCRQHsQw0BJIQv8JgxbmBv0awNHfNBzRP9oWGF5azGG2khhWLG8Yb9iZ779hWRhvyKwzvAPLG1AmACtfG4YtvMa_lpVvLH-NoEciPQIxfRbKMLwwrCKS8QboeyBn4MjujtMdBD_D_9MFfoN2FFZn4HrtV6WDMtfwuZC_DnZeRFC9puvC8LKDY-V4bMcYikV-1ontnmRgvJlCWHxUBzuG3c3K3uqQWndj2P1g2L2LvjA_8n8qxpvWzovST8LHRiocs3nI4vvHRI6EBzXC8JR_WLI4e1eSJIRJBAgTgafBGgnszB-UzxwkDVo4EZQ10XJHs72TjFo_9ePp7safECZlvm09eprEXVkXUYN1joYAPQ1i9QTnFNMSGGL7UG3TCYSR27DWq7CHGCL4IAL5Y3Pyd4DOOggfdrOI9uF8pJymaaRrDcEkPAgY1XeSsBpJTn_G1d1LtpGw2VjbMJEDPwmtYRJ3AgG_rPxvfCSbyDqXVV6JhOqsLPJTXnBeJVN9qS6YyeyCWVYiH8ehKKk4lxJRnAuZl4mqkWPBSyx4lZ1PVYpZUVa84pzo1J_OyE6cZqF0qvV9jguQKO9XqrOCF9Up0aIn7bcLi3iYj_HuujoCXvr15tmJa-WD_1UiqKC3W74jijd4N-vsQapxJBeZKfOVJwhHT2Ikq9P1ly1VYVr7dLAzwy72Oh4vi7PxI8Cw22b3DLtj_HuN_wYAAP__E1ZmIQ">