Enums may be represented with a smaller type than int; however, they are automatically promoted to int when passed in va_arg lists, just as short, char, etc. are. GCC thus "knows" that you never want to call va_arg with an enum type, and instead inserts an abort.