On Tue, May 11, 2021 at 04:36:47PM +0200, Stefan Schulze Frielinghaus via 
Gcc-patches wrote:
> The type of the output operands *p and *q of the extended asm statement
> of function foo is unsigned long whereas the type of the corresponding
> input operands is int.  This results, e.g. on IBM Z, in the case that
> the immediates 2 and 3 are written into registers in SI mode and read in
> DI mode resulting in wrong values.  Fixed by lifting the input operands
> to type long.
> 
> gcc/testsuite/ChangeLog:
> 
>       * gcc.dg/guality/pr43077-1.c: Align types of output and input
>       operands by lifting immediates to type long.
> 
> Ok for mainline?

Ok, thanks.

> diff --git a/gcc/testsuite/gcc.dg/guality/pr43077-1.c 
> b/gcc/testsuite/gcc.dg/guality/pr43077-1.c
> index 39bd26aae01..2d9376298d4 100644
> --- a/gcc/testsuite/gcc.dg/guality/pr43077-1.c
> +++ b/gcc/testsuite/gcc.dg/guality/pr43077-1.c
> @@ -24,7 +24,7 @@ int __attribute__((noinline))
>  foo (unsigned long *p, unsigned long *q)
>  {
>    int ret;
> -  asm volatile ("" : "=r" (ret), "=r" (*p), "=r" (*q) : "0" (1), "1" (2), 
> "2" (3));
> +  asm volatile ("" : "=r" (ret), "=r" (*p), "=r" (*q) : "0" (1), "1" (2l), 
> "2" (3l));
>    return ret;
>  }
>  
> -- 
> 2.23.0

        Jakub

Reply via email to