https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94172
--- Comment #6 from Wilco <wilco at gcc dot gnu.org> --- (In reply to Jakub Jelinek from comment #3) > Can't reproduce on the trunk, neither on x86_64-linux with -Os -g3 > -fshort-enums, nor on arm-linux-gnueabi with -Os -g3 -fshort-enums > -mcpu=cortex-m0 -mthumb I tried -O2 -g -fshort-enums and this fails on AArch64: extern enum my_enum_type extern_enum; extern void bar(int a); enum my_enum_type { my_entry }; void g(void); void foo(int a) { int local_enum = extern_enum; if (a) { g(); local_enum = 0; } bar(local_enum); } The issue is the placement of the extern enum declaration. Move it after the enum type and all is well - the assert in cfgexpand seems to not allow SI/QI combination.