[PATCH] D130058: [Clang] Diagnose ill-formed constant expression when setting a non fixed enum to a value outside the range of the enumeration values

Erich Keane via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Aug 11 06:07:01 PDT 2022


erichkeane added a comment.



> In D130058#3714882 <https://reviews.llvm.org/D130058#3714882>, @glandium wrote:
>
>> Also not caught: a cast of 0 when 0 is not a valid value in the enum.
>
> I don't think that situation will ever be UB. When the underlying type of the enum is not fixed, the range of values it can represent is whatever values fit into a hypothetical bit-field that is large enough to cover the full range of stated values (https://eel.is/c++draft/enum#dcl.enum-8.sentence-2). `0` is something that can always be represented in such a bit-field (there's a special provision for empty enumerations or one that can only store 0).

Correct here.  A 'valid value' of an enum is NOT just the list of values listed.  It is every value that would be represent-able by the smallest-bit-sized bitfield required to represent all of the possible enumerators.  Since `0` is represent-able by all 1+ bit integers, zero is always valid.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D130058/new/

https://reviews.llvm.org/D130058



More information about the cfe-commits mailing list