testsuite: Fix pr108574-3.c failed in arch where sign defaults to unsigned.

Message ID 20230131061038.97059-1-cooper.qu@linux.alibaba.com
State Accepted
Headers
Series testsuite: Fix pr108574-3.c failed in arch where sign defaults to unsigned. |

Checks

Context Check Description
snail/gcc-patch-check success Github commit url

Commit Message

瞿仙淼 Jan. 31, 2023, 6:10 a.m. UTC
  In the architecture where sign defaults to unsigned, the 'f' will be zero
extended to int type in the expression 'd = ~(f & ~2880764155)', then the
'd' will become -1 wich cause the case to fail.
So it's ok for the architectures where sign defaults to signed like x86,
but failed for the architectures where sign defaults to unsigned like arm
and csky. Change char to signed char to avoid this problem.

gcc/testsuite:
	* gcc.dg/torture/pr108574-3.c (b, f): Change type from char to
	signed char.
---
 gcc/testsuite/gcc.dg/torture/pr108574-3.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
  

Comments

Richard Biener Jan. 31, 2023, 6:57 a.m. UTC | #1
On Tue, 31 Jan 2023, Xianmiao Qu wrote:

> In the architecture where sign defaults to unsigned, the 'f' will be zero
> extended to int type in the expression 'd = ~(f & ~2880764155)', then the
> 'd' will become -1 wich cause the case to fail.
> So it's ok for the architectures where sign defaults to signed like x86,
> but failed for the architectures where sign defaults to unsigned like arm
> and csky. Change char to signed char to avoid this problem.

Whoops - thanks for fixing!

OK.

Richard.

> gcc/testsuite:
> 	* gcc.dg/torture/pr108574-3.c (b, f): Change type from char to
> 	signed char.
> ---
>  gcc/testsuite/gcc.dg/torture/pr108574-3.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/gcc/testsuite/gcc.dg/torture/pr108574-3.c b/gcc/testsuite/gcc.dg/torture/pr108574-3.c
> index 3c9146e31ac..b4d5dae9f80 100644
> --- a/gcc/testsuite/gcc.dg/torture/pr108574-3.c
> +++ b/gcc/testsuite/gcc.dg/torture/pr108574-3.c
> @@ -1,7 +1,7 @@
>  /* { dg-do run } */
>  
>  int a = 3557301289, d;
> -char b, f;
> +signed char b, f;
>  unsigned short c = 241;
>  short e, g;
>  static void h() {
>
  
Richard Biener Jan. 31, 2023, 8:51 a.m. UTC | #2
On Tue, 31 Jan 2023, Richard Biener wrote:

> On Tue, 31 Jan 2023, Xianmiao Qu wrote:
> 
> > In the architecture where sign defaults to unsigned, the 'f' will be zero
> > extended to int type in the expression 'd = ~(f & ~2880764155)', then the
> > 'd' will become -1 wich cause the case to fail.
> > So it's ok for the architectures where sign defaults to signed like x86,
> > but failed for the architectures where sign defaults to unsigned like arm
> > and csky. Change char to signed char to avoid this problem.
> 
> Whoops - thanks for fixing!
> 
> OK.

I've pushed the fix.

Richard.

> Richard.
> 
> > gcc/testsuite:
> > 	* gcc.dg/torture/pr108574-3.c (b, f): Change type from char to
> > 	signed char.
> > ---
> >  gcc/testsuite/gcc.dg/torture/pr108574-3.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/gcc/testsuite/gcc.dg/torture/pr108574-3.c b/gcc/testsuite/gcc.dg/torture/pr108574-3.c
> > index 3c9146e31ac..b4d5dae9f80 100644
> > --- a/gcc/testsuite/gcc.dg/torture/pr108574-3.c
> > +++ b/gcc/testsuite/gcc.dg/torture/pr108574-3.c
> > @@ -1,7 +1,7 @@
> >  /* { dg-do run } */
> >  
> >  int a = 3557301289, d;
> > -char b, f;
> > +signed char b, f;
> >  unsigned short c = 241;
> >  short e, g;
> >  static void h() {
> > 
> 
>
  

Patch

diff --git a/gcc/testsuite/gcc.dg/torture/pr108574-3.c b/gcc/testsuite/gcc.dg/torture/pr108574-3.c
index 3c9146e31ac..b4d5dae9f80 100644
--- a/gcc/testsuite/gcc.dg/torture/pr108574-3.c
+++ b/gcc/testsuite/gcc.dg/torture/pr108574-3.c
@@ -1,7 +1,7 @@ 
 /* { dg-do run } */
 
 int a = 3557301289, d;
-char b, f;
+signed char b, f;
 unsigned short c = 241;
 short e, g;
 static void h() {