https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111309
--- Comment #6 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Does 2023-11-20 Jakub Jelinek <ja...@redhat.com> PR c/111309 * c-c++-common/pr111309-2.c (foo): Don't expect errors for C++ with -fshort-enums if second argument is E0. --- gcc/testsuite/c-c++-common/pr111309-2.c.jj 2023-11-14 10:52:16.191276028 +0100 +++ gcc/testsuite/c-c++-common/pr111309-2.c 2023-11-20 17:52:30.606386073 +0100 @@ -32,7 +32,7 @@ foo (void) __builtin_clzg (0U, 2LL); /* { dg-error "does not have 'int' type" } */ __builtin_clzg (0U, 2U); /* { dg-error "does not have 'int' type" } */ __builtin_clzg (0U, true); - __builtin_clzg (0U, E0); /* { dg-error "does not have 'int' type" "" { target c++ } } */ + __builtin_clzg (0U, E0); /* { dg-error "does not have 'int' type" "" { target { c++ && { ! short_enums } } } } */ __builtin_ctzg (); /* { dg-error "too few arguments" } */ __builtin_ctzg (0U, 1, 2); /* { dg-error "too many arguments" } */ __builtin_ctzg (0); /* { dg-error "has signed type" } */ @@ -51,7 +51,7 @@ foo (void) __builtin_ctzg (0U, 2LL); /* { dg-error "does not have 'int' type" } */ __builtin_ctzg (0U, 2U); /* { dg-error "does not have 'int' type" } */ __builtin_ctzg (0U, true); - __builtin_ctzg (0U, E0); /* { dg-error "does not have 'int' type" "" { target c++ } } */ + __builtin_ctzg (0U, E0); /* { dg-error "does not have 'int' type" "" { target { c++ && { ! short_enums } } } } */ __builtin_clrsbg (); /* { dg-error "too few arguments" } */ __builtin_clrsbg (0, 1); /* { dg-error "too many arguments" } */ __builtin_clrsbg (0U); /* { dg-error "has unsigned type" } */ fix that? For -fshort-enums in C++ E0 has smaller precision than int and so eventhough it is unsigned, it is (or would be) promoted to int.