https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61469
--- Comment #14 from Andrew Pinski <pinskia at gcc dot gnu.org> --- (In reply to Thomas Mercier from comment #13) > Was this feature meant to be protected by -std=c23? It doesn't appear to be > in GCC 13: > > /tmp$ cat test.c > enum node_stat_item : unsigned { > NR_LRU_BASE = -1, > NR_INACTIVE_ANON = NR_LRU_BASE, /* must match order of LRU_[IN]ACTIVE */ > NR_ACTIVE_ANON, /* " " " " " */ > NR_INACTIVE_FILE, > }; > > int main() > {} > /tmp$ gcc --version > gcc (Debian 13.2.0-10) 13.2.0 > Copyright (C) 2023 Free Software Foundation, Inc. > This is free software; see the source for copying conditions. There is NO > warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. > > /tmp$ gcc -std=c11 test.c > test.c:2:23: error: enumerator value outside the range of underlying type > 2 | NR_LRU_BASE = -1, > | ^ > test.c:4:9: error: overflow in enumeration values > 4 | NR_ACTIVE_ANON, /* " " " " " > */ > | Note that is the correct error even for C23. clang also errors out the similar way: ``` <source>:5:2: error: enumerator value 4294967296 is not representable in the underlying type 'unsigned int' 5 | NR_ACTIVE_ANON, /* " " " " " */ | ^ ```