On Tue, 21 Nov 2023 at 09:48, Jakub Jelinek <ja...@redhat.com> 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?
>
> 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.
>

Thanks for the fix!

I keep forgetting about the -fshort-enum difference between arm-linux
and arm-eabi targets....

Christophe

> --- 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
>

Reply via email to