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.

Reply via email to