On Tue, 21 Nov 2023, Jakub Jelinek wrote:

> Hi!
> 
> ARM defaults to -fshort-enums and the following testcase FAILs there in 2
> lines.  The difference is that in C++, E0 has enum E type, which normally
> has unsigned int underlying type, so it isn't int nor something that
> promotes to int, which is why we diagnose it (in C it is promoted to int).
> But with -fshort-enums, the underlying type is unsigned char in that case,
> which promotes to int just fine.
> 
> The following patch adjusts the expectations, such that we don't expect
> it on arm or when people manually test with -fshort-enums.
> 
> Tested on x86_64-linux and i686-linux, ok for trunk?

OK

> 2023-11-21  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" } */
> 
>       Jakub
> 
> 

-- 
Richard Biener <rguent...@suse.de>
SUSE Software Solutions Germany GmbH,
Frankenstrasse 146, 90461 Nuernberg, Germany;
GF: Ivo Totev, Andrew McDonald, Werner Knoblich; (HRB 36809, AG Nuernberg)

Reply via email to