https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114657
--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> --- In particular, 6.5.1.1/2 says "The type of the controlling expression is the type of the expression as if it had undergone an lvalue conversion, array to pointer conversion, or function to pointer conversion." but doesn't list integer promotions (if those were to occur, you'd e.g. never be able to match a char, signed char, unsigned char, short, unsigned short types with _Generic because everything would be promoted to int.