<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/58127>58127</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Incorrect description of `-Wenum-constexpr-conversion`
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang:frontend
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
pogo59
</td>
</tr>
</table>
<pre>
In https://discourse.llvm.org/t/clang-16-notice-of-potentially-breaking-changes/65562 @AaronBallman describes `-Wenum-constexpr-conversion` this way:
* Clang will now correctly diagnose as ill-formed a constant expression where an enum without a fixed underlying type is set to a value outside the range of the enumeration’s values.
```
enum E { Zero, One, Two, Three, Four };
constexpr E Val1 = (E)3; // Ok
constexpr E Val2 = (E)7; // Ok
constexpr E Val3 = (E)8; // Now diagnosed as out of the range [0, 7]
constexpr E Val4 = (E)-1; // Now diagnosed as out of the range [0, 7]
```
I think the actual "range" of the enumeration is [0, 4] not [0, 7] and therefore clang should diagnose the second example `(E)7`.
Alternatively, the diagnostic should be _described_ differently, in order to accurately specify the conditions that are being diagnosed. Perhaps instead of "outside the range of the enumeration's values" it should be "outside the range of the minimum-size bitfield needed to represent the range of the enumeration's values."
But I'd rather see this handled as a bug, and fixed accordingly.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJylVU1v2zgQ_TXyZSBDH5YsH3SI6wTIpd1D0QK9FLQ4stnQpEBScb2_vo-ynTjFdjfAGnIUhvP55s3L1spT-2hoH8Lgk_IuKR7wSOU7OzrPc62fD3PrdvhjwLfTwuzSvE6NDarj1PbpYAOboITWp3TrWDwpWHR72LGHR11VdUHJIrsTzpo1zA7CkGTfObVlT0mdpV_ZjIe0s8YH_jm4-NszO6-swS2FvfJ0FKdYXbZJMtR4Rx9iIXRUWpOxR-qsc9wFfSKpxM5YzyQ84TbtrTuwJEFTeGECxRTsY3Q67tnB0lAsANHC3o4Btr36CZ_RSHb6hH4onAYmlOE5ULCweBZ6ZIK1V5JRIpOLHZPtp0OMx06E2MJ9kTRZslr5s5OfX7o4_6yzyzMdCZ-plntKlmv6xs4mxQf6ZDi-Ph-n0-e94-n8gBnBbpOU61f3FxgR44vQOSXlhpKiuU-KVQlLovOM6dPTH52KW6flO53KW6fm1ukjJnSdi4yDiShfkDrDllTrLHa0TKrNHxMsbhOkeczwPxL8hvxj5Jl5mlxEF0ahEbyYnPH-h7lGOlyjLhAVPAxv0oBXMjo5BgeZptUhD4Zp-crSGNQzGpXgpTgMmuNGvCBfZ2_YcqcDO4P0z6xPMU90v8TCPl6jb5m-XzdMfodB36MKE84-ypB1YPZE5K4b0Q6ikR-4U_1pChnrUbFJj6PARqD-LcdFeEF5TvQXu70YsGZxSkJGjADVu3aiWF63IYKrwk3l_xbioIw6QCq8-hsFqdArhpNhlhg72nEcVxudvjf7HNluAV6DN4-4l3COo8Ns-CxAEDSpz-QStB13Eck44LNUAEdgCoD0aT7jNq_rRVPkWd7MZFvKVbkSs6CCZkjtRaouEjhMVIrI_ZcOzkan27cyvYNgjdt5Zw84RKW-vNLB2R_IgaPyfgL5oWryYjnbt_1CZnXVb2VfdzkvGl5lXVHUTdbLZlnW-UyLLWvfgsnAZiIt8vXQbsi8jHBVm5lqi6xAf1mZN3ldNfPFUhZVsSzkikWxLBvoPR-E0i__P2aunSoDch6XWvngXy8F5HiHMU5ZEV-MUGLXDnZnq9Vs6qGdGvgFr_8law">