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