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

    <tr>
        <th>Summary</th>
        <td>
            enum unhelpfully uses signed underlying type
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          jmcclellan-figma
      </td>
    </tr>
</table>

<pre>
    Although the behavior of clang seems to be allowed by the C++ spec, this was unexpected to me so I'm reporting it in case it's considered a bug.

The following code:

```
enum struct A {
 ZERO,
    ONE
};

struct B {
    A a : 1;
};

void f();
void g();

void h(B b) {
    switch (b.a) {
        case A::ZERO:
 f();
          break;
        case A::ONE:
          g();
 break;
    }
}
```

When compiled with optimizations, i.e. `--std=c++20 -stdlib=libc++ -O1 -Wall -Wsigned-enum-bitfield -Werror`, will not emit a warning and will erase the `A::ONE` branch.  My understanding of what is happening here is that `A` is using a _signed_ underlying type, so the `A::ONE` value won't fit in the bitfield.

[compiler explorer link](https://godbolt.org/z/s74z6Wexa)
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJxsVEGPozgT_TWVS4kITBPgwIF0T6Tv8G1Lq5Ui7WVk7AI8Y2xkm6TTv35lyMwmrbWQgFdVr16Vy-beq8EQNVAcoXjb8SWM1jU_JiE0ac1N0qth4rvOylvT6jDaZRgxjIQdjfyirEPbo9DcDOiJJo_BYkfItbZXktjdVudXYEdgR_QzCWCvGEbl8co9LoY-ZhKBZAycCL3F_wErJ3Q0WxeUGVAFVAYF94QqACs9Cmu8kuRIIsduGfaQtpC2f42EvY2ZY5iwkiBvNxMc0vuTtmSWCX1wiwjYIpRHSFv8-9uf78Be4ycivv_xLQaVb5AfN4K7__GXPyK2yBHyFrO704P3xSqJPbAKWL2BKzI8Ir_AEVh1xA5Y_cDtryqIEYFV3Z4_m-Jam9HG6vJ2Vb7W-ZwRf6_OEf_5DD4SxGK3-N_rSejX-FjoVu5zXyFtzyMZFHaalSaJVxVGtHNQk_rkQVnj496rPe0RDmmS-CAhfxPbbLAUI6BVB_mbVt0dxuQ9w-TMtcbkvM6qTOIGJp0KvSItMTmTc9ZFDewVr0prNDYgTSogxyt3Jk4DN3KzkYulx6GEQ_rQgUOKneNGjHvE_99wMZKcD9zIGG17vI48oPI48nmmlXIkRxEJ0bKSHdL4v_g1IX7f5H7fuPQtouE2U5Tp7X9LuHC9EF6tAVYG7LfRX4_bvdz7qENxvLfZIX3M2jpyqJX5CcUbsGoMYfaRmJ2AnQYrO6vD3roB2OkT2MmXL5-HM33E0drJJpd1XvMdNVmZ5-Uhq7N8NzZUHqiShSiKgpWsFD31WZeLSoqqk1mZ7lTDUvaSsbTODnlW5Pu-4nVZFHVd5bkoix5eUpq40nutL1NMv1PeL9RkWc1YtdO8I-3Xq4cxQ1dcrcBYvIlcE4OSbhk8vKRa-eD_pQkqaGrWg7yYkfTcL1rfcPHkcev616bvFqebL21RYVy6vbATsFOkvr-S2dkfJAKw0yrIAzvdFV8a9k8AAAD___TpkOo">