public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Torbjorn SVENSSON <torbjorn.svensson@foss.st.com>
To: <gcc-patches@gcc.gnu.org>
Cc: <joseph@codesourcery.com>, <kyrylo.tkachov@arm.com>,
	Yvan ROUX <yvan.roux@foss.st.com>
Subject: PING^1 [PATCH v3] testsuite: Sanitize fails for SP FPU on Arm
Date: Fri, 14 Oct 2022 09:44:22 +0200	[thread overview]
Message-ID: <0269d7c2-26f1-a957-2e54-54902b070dc5@foss.st.com> (raw)
In-Reply-To: <20221007132828.335317-1-torbjorn.svensson@foss.st.com>

Hi,

Ping, https://gcc.gnu.org/pipermail/gcc-patches/2022-October/603054.html

Kind regards,
Torbjörn

On 2022-10-07 15:28, Torbjörn SVENSSON wrote:
> This patch stops reporting fails for Arm targets with single
> precision floating point unit for types wider than 32 bits (the width
> of float on arm-none-eabi).
> 
> As reported in PR102017, fenv is reported as supported in recent
> versions of newlib. At the same time, for some Arm targets, the
> implementation in libgcc does not support exceptions and thus, the
> test fails with a call to abort().
> 
> gcc/testsuite/ChangeLog:
> 
> 	* lib/target-supports.exp
> 	(check_effective_target_fenv_exceptions_double): New.
> 	(check_effective_target_fenv_exceptions_long_double): New.
> 	* gcc.dg/c2x-float-7.c: Split into 3 tests...
> 	* gcc.dg/c2x-float-7a.c: Float part of c2x-float-7.c.
> 	* gcc.dg/c2x-float-7b.c: Double part of c2x-float-7.c.
> 	* gcc.dg/c2x-float-7c.c: Long double part of c2x-float-7.c.
> 	* gcc.dg/pr95115.c: Switch to fenv_exceptions_double.
> 	* gcc.dg/torture/float32x-nan-floath.c: Likewise.
> 	* gcc.dg/torture/float32x-nan.c: Likewise.
> 	* gcc.dg/torture/float64-nan-floath.c: Likewise.
> 	* gcc.dg/torture/float64-nan.c: Likewise.
> 	* gcc.dg/torture/inf-compare-1.c: Likewise.
> 	* gcc.dg/torture/inf-compare-2.c: Likewise.
> 	* gcc.dg/torture/inf-compare-3.c: Likewise.
> 	* gcc.dg/torture/inf-compare-4.c: Likewise.
> 	* gcc.dg/torture/inf-compare-5.c: Likewise.
> 	* gcc.dg/torture/inf-compare-6.c: Likewise.
> 	* gcc.dg/torture/inf-compare-7.c: Likewise.
> 	* gcc.dg/torture/inf-compare-8.c: Likewise.
> 	* gcc.dg/torture/inf-compare-1-float.c: New test.
> 	* gcc.dg/torture/inf-compare-2-float.c: New test.
> 	* gcc.dg/torture/inf-compare-3-float.c: New test.
> 	* gcc.dg/torture/inf-compare-4-float.c: New test.
> 	* gcc.dg/torture/inf-compare-5-float.c: New test.
> 	* gcc.dg/torture/inf-compare-6-float.c: New test.
> 	* gcc.dg/torture/inf-compare-7-float.c: New test.
> 	* gcc.dg/torture/inf-compare-8-float.c: New test.
> 
> Co-Authored-By: Yvan ROUX  <yvan.roux@foss.st.com>
> Signed-off-by: Torbjörn SVENSSON  <torbjorn.svensson@foss.st.com>
> ---
>   gcc/testsuite/gcc.dg/c2x-float-7.c            | 49 ------------
>   gcc/testsuite/gcc.dg/c2x-float-7a.c           | 32 ++++++++
>   gcc/testsuite/gcc.dg/c2x-float-7b.c           | 32 ++++++++
>   gcc/testsuite/gcc.dg/c2x-float-7c.c           | 32 ++++++++
>   gcc/testsuite/gcc.dg/pr95115.c                |  2 +-
>   .../gcc.dg/torture/float32x-nan-floath.c      |  2 +-
>   gcc/testsuite/gcc.dg/torture/float32x-nan.c   |  2 +-
>   .../gcc.dg/torture/float64-nan-floath.c       |  2 +-
>   gcc/testsuite/gcc.dg/torture/float64-nan.c    |  2 +-
>   .../gcc.dg/torture/inf-compare-1-float.c      | 21 ++++++
>   gcc/testsuite/gcc.dg/torture/inf-compare-1.c  |  2 +-
>   .../gcc.dg/torture/inf-compare-2-float.c      | 21 ++++++
>   gcc/testsuite/gcc.dg/torture/inf-compare-2.c  |  2 +-
>   .../gcc.dg/torture/inf-compare-3-float.c      | 21 ++++++
>   gcc/testsuite/gcc.dg/torture/inf-compare-3.c  |  2 +-
>   .../gcc.dg/torture/inf-compare-4-float.c      | 21 ++++++
>   gcc/testsuite/gcc.dg/torture/inf-compare-4.c  |  2 +-
>   .../gcc.dg/torture/inf-compare-5-float.c      | 19 +++++
>   gcc/testsuite/gcc.dg/torture/inf-compare-5.c  |  2 +-
>   .../gcc.dg/torture/inf-compare-6-float.c      | 19 +++++
>   gcc/testsuite/gcc.dg/torture/inf-compare-6.c  |  2 +-
>   .../gcc.dg/torture/inf-compare-7-float.c      | 19 +++++
>   gcc/testsuite/gcc.dg/torture/inf-compare-7.c  |  2 +-
>   .../gcc.dg/torture/inf-compare-8-float.c      | 19 +++++
>   gcc/testsuite/gcc.dg/torture/inf-compare-8.c  |  2 +-
>   gcc/testsuite/lib/target-supports.exp         | 74 +++++++++++++++++++
>   26 files changed, 343 insertions(+), 62 deletions(-)
>   delete mode 100644 gcc/testsuite/gcc.dg/c2x-float-7.c
>   create mode 100644 gcc/testsuite/gcc.dg/c2x-float-7a.c
>   create mode 100644 gcc/testsuite/gcc.dg/c2x-float-7b.c
>   create mode 100644 gcc/testsuite/gcc.dg/c2x-float-7c.c
>   create mode 100644 gcc/testsuite/gcc.dg/torture/inf-compare-1-float.c
>   create mode 100644 gcc/testsuite/gcc.dg/torture/inf-compare-2-float.c
>   create mode 100644 gcc/testsuite/gcc.dg/torture/inf-compare-3-float.c
>   create mode 100644 gcc/testsuite/gcc.dg/torture/inf-compare-4-float.c
>   create mode 100644 gcc/testsuite/gcc.dg/torture/inf-compare-5-float.c
>   create mode 100644 gcc/testsuite/gcc.dg/torture/inf-compare-6-float.c
>   create mode 100644 gcc/testsuite/gcc.dg/torture/inf-compare-7-float.c
>   create mode 100644 gcc/testsuite/gcc.dg/torture/inf-compare-8-float.c
> 
> diff --git a/gcc/testsuite/gcc.dg/c2x-float-7.c b/gcc/testsuite/gcc.dg/c2x-float-7.c
> deleted file mode 100644
> index 0c90ff24165..00000000000
> --- a/gcc/testsuite/gcc.dg/c2x-float-7.c
> +++ /dev/null
> @@ -1,49 +0,0 @@
> -/* Test SNAN macros.  Runtime exceptions test, to verify NaN is
> -   signaling.  */
> -/* { dg-do run } */
> -/* { dg-require-effective-target fenv_exceptions } */
> -/* { dg-options "-std=c2x -pedantic-errors -fsignaling-nans" } */
> -/* { dg-add-options ieee } */
> -
> -#include <fenv.h>
> -#include <float.h>
> -
> -/* These should be defined if and only if signaling NaNs are supported
> -   for the given types.  If the testsuite gains effective-target
> -   support for targets not supporting signaling NaNs, or not
> -   supporting them for all types, this test should be made
> -   appropriately conditional.  */
> -#ifndef FLT_SNAN
> -#error "FLT_SNAN undefined"
> -#endif
> -#ifndef DBL_SNAN
> -#error "DBL_SNAN undefined"
> -#endif
> -#ifndef LDBL_SNAN
> -#error "LDBL_SNAN undefined"
> -#endif
> -
> -volatile float f = FLT_SNAN;
> -volatile double d = DBL_SNAN;
> -volatile long double ld = LDBL_SNAN;
> -
> -extern void abort (void);
> -extern void exit (int);
> -
> -int
> -main (void)
> -{
> -  feclearexcept (FE_ALL_EXCEPT);
> -  f += f;
> -  if (!fetestexcept (FE_INVALID))
> -    abort ();
> -  feclearexcept (FE_ALL_EXCEPT);
> -  d += d;
> -  if (!fetestexcept (FE_INVALID))
> -    abort ();
> -  feclearexcept (FE_ALL_EXCEPT);
> -  ld += ld;
> -  if (!fetestexcept (FE_INVALID))
> -    abort ();
> -  exit (0);
> -}
> diff --git a/gcc/testsuite/gcc.dg/c2x-float-7a.c b/gcc/testsuite/gcc.dg/c2x-float-7a.c
> new file mode 100644
> index 00000000000..129e7906adc
> --- /dev/null
> +++ b/gcc/testsuite/gcc.dg/c2x-float-7a.c
> @@ -0,0 +1,32 @@
> +/* Test SNAN macros.  Runtime exceptions test, to verify NaN is
> +   signaling.  */
> +/* { dg-do run } */
> +/* { dg-require-effective-target fenv_exceptions } */
> +/* { dg-options "-std=c2x -pedantic-errors -fsignaling-nans" } */
> +/* { dg-add-options ieee } */
> +
> +#include <fenv.h>
> +#include <float.h>
> +
> +/* This should be defined if and only if signaling NaNs is supported
> +   for the given type.  If the testsuite gains effective-target
> +   support for targets not supporting signaling NaNs, this test
> +   should be made appropriately conditional.  */
> +#ifndef FLT_SNAN
> +#error "FLT_SNAN undefined"
> +#endif
> +
> +volatile float f = FLT_SNAN;
> +
> +extern void abort (void);
> +extern void exit (int);
> +
> +int
> +main (void)
> +{
> +  feclearexcept (FE_ALL_EXCEPT);
> +  f += f;
> +  if (!fetestexcept (FE_INVALID))
> +    abort ();
> +  exit (0);
> +}
> diff --git a/gcc/testsuite/gcc.dg/c2x-float-7b.c b/gcc/testsuite/gcc.dg/c2x-float-7b.c
> new file mode 100644
> index 00000000000..0ae9038c1f2
> --- /dev/null
> +++ b/gcc/testsuite/gcc.dg/c2x-float-7b.c
> @@ -0,0 +1,32 @@
> +/* Test SNAN macros.  Runtime exceptions test, to verify NaN is
> +   signaling.  */
> +/* { dg-do run } */
> +/* { dg-require-effective-target fenv_exceptions_double } */
> +/* { dg-options "-std=c2x -pedantic-errors -fsignaling-nans" } */
> +/* { dg-add-options ieee } */
> +
> +#include <fenv.h>
> +#include <float.h>
> +
> +/* This should be defined if and only if signaling NaNs is supported
> +   for the given type.  If the testsuite gains effective-target
> +   support for targets not supporting signaling NaNs, this test
> +   should be made appropriately conditional.  */
> +#ifndef DBL_SNAN
> +#error "DBL_SNAN undefined"
> +#endif
> +
> +volatile double d = DBL_SNAN;
> +
> +extern void abort (void);
> +extern void exit (int);
> +
> +int
> +main (void)
> +{
> +  feclearexcept (FE_ALL_EXCEPT);
> +  d += d;
> +  if (!fetestexcept (FE_INVALID))
> +    abort ();
> +  exit (0);
> +}
> diff --git a/gcc/testsuite/gcc.dg/c2x-float-7c.c b/gcc/testsuite/gcc.dg/c2x-float-7c.c
> new file mode 100644
> index 00000000000..038fd5501b3
> --- /dev/null
> +++ b/gcc/testsuite/gcc.dg/c2x-float-7c.c
> @@ -0,0 +1,32 @@
> +/* Test SNAN macros.  Runtime exceptions test, to verify NaN is
> +   signaling.  */
> +/* { dg-do run } */
> +/* { dg-require-effective-target fenv_exceptions_long_double } */
> +/* { dg-options "-std=c2x -pedantic-errors -fsignaling-nans" } */
> +/* { dg-add-options ieee } */
> +
> +#include <fenv.h>
> +#include <float.h>
> +
> +/* This should be defined if and only if signaling NaNs is supported
> +   for the given type.  If the testsuite gains effective-target
> +   support for targets not supporting signaling NaNs, this test
> +   should be made appropriately conditional.  */
> +#ifndef LDBL_SNAN
> +#error "LDBL_SNAN undefined"
> +#endif
> +
> +volatile long double ld = LDBL_SNAN;
> +
> +extern void abort (void);
> +extern void exit (int);
> +
> +int
> +main (void)
> +{
> +  feclearexcept (FE_ALL_EXCEPT);
> +  ld += ld;
> +  if (!fetestexcept (FE_INVALID))
> +    abort ();
> +  exit (0);
> +}
> diff --git a/gcc/testsuite/gcc.dg/pr95115.c b/gcc/testsuite/gcc.dg/pr95115.c
> index 46a95dfb698..69c4f83250c 100644
> --- a/gcc/testsuite/gcc.dg/pr95115.c
> +++ b/gcc/testsuite/gcc.dg/pr95115.c
> @@ -1,7 +1,7 @@
>   /* { dg-do run } */
>   /* { dg-options "-O2 -ftrapping-math" } */
>   /* { dg-add-options ieee } */
> -/* { dg-require-effective-target fenv_exceptions } */
> +/* { dg-require-effective-target fenv_exceptions_double } */
>   
>   #include <fenv.h>
>   #include <stdlib.h>
> diff --git a/gcc/testsuite/gcc.dg/torture/float32x-nan-floath.c b/gcc/testsuite/gcc.dg/torture/float32x-nan-floath.c
> index 0aab4be26ca..8d58b41e069 100644
> --- a/gcc/testsuite/gcc.dg/torture/float32x-nan-floath.c
> +++ b/gcc/testsuite/gcc.dg/torture/float32x-nan-floath.c
> @@ -4,7 +4,7 @@
>   /* { dg-add-options float32x } */
>   /* { dg-add-options ieee } */
>   /* { dg-require-effective-target float32x_runtime } */
> -/* { dg-require-effective-target fenv_exceptions } */
> +/* { dg-require-effective-target fenv_exceptions_double } */
>   
>   #define WIDTH 32
>   #define EXT 1
> diff --git a/gcc/testsuite/gcc.dg/torture/float32x-nan.c b/gcc/testsuite/gcc.dg/torture/float32x-nan.c
> index d976d379732..46f35a4ca80 100644
> --- a/gcc/testsuite/gcc.dg/torture/float32x-nan.c
> +++ b/gcc/testsuite/gcc.dg/torture/float32x-nan.c
> @@ -4,7 +4,7 @@
>   /* { dg-add-options float32x } */
>   /* { dg-add-options ieee } */
>   /* { dg-require-effective-target float32x_runtime } */
> -/* { dg-require-effective-target fenv_exceptions } */
> +/* { dg-require-effective-target fenv_exceptions_double } */
>   
>   #define WIDTH 32
>   #define EXT 1
> diff --git a/gcc/testsuite/gcc.dg/torture/float64-nan-floath.c b/gcc/testsuite/gcc.dg/torture/float64-nan-floath.c
> index 1f5298bd399..444f234737b 100644
> --- a/gcc/testsuite/gcc.dg/torture/float64-nan-floath.c
> +++ b/gcc/testsuite/gcc.dg/torture/float64-nan-floath.c
> @@ -4,7 +4,7 @@
>   /* { dg-add-options float64 } */
>   /* { dg-add-options ieee } */
>   /* { dg-require-effective-target float64_runtime } */
> -/* { dg-require-effective-target fenv_exceptions } */
> +/* { dg-require-effective-target fenv_exceptions_double } */
>   
>   #define WIDTH 64
>   #define EXT 0
> diff --git a/gcc/testsuite/gcc.dg/torture/float64-nan.c b/gcc/testsuite/gcc.dg/torture/float64-nan.c
> index 51a6437fd52..11b70edea37 100644
> --- a/gcc/testsuite/gcc.dg/torture/float64-nan.c
> +++ b/gcc/testsuite/gcc.dg/torture/float64-nan.c
> @@ -4,7 +4,7 @@
>   /* { dg-add-options float64 } */
>   /* { dg-add-options ieee } */
>   /* { dg-require-effective-target float64_runtime } */
> -/* { dg-require-effective-target fenv_exceptions } */
> +/* { dg-require-effective-target fenv_exceptions_double } */
>   
>   #define WIDTH 64
>   #define EXT 0
> diff --git a/gcc/testsuite/gcc.dg/torture/inf-compare-1-float.c b/gcc/testsuite/gcc.dg/torture/inf-compare-1-float.c
> new file mode 100644
> index 00000000000..6409878f39f
> --- /dev/null
> +++ b/gcc/testsuite/gcc.dg/torture/inf-compare-1-float.c
> @@ -0,0 +1,21 @@
> +/* { dg-do run { xfail { powerpc*-*-* } } } */
> +/* remove the xfail for powerpc when pr58684 is fixed */
> +/* { dg-add-options ieee } */
> +/* { dg-require-effective-target fenv_exceptions } */
> +/* { dg-skip-if "fenv" { powerpc-ibm-aix* } } */
> +
> +#include <fenv.h>
> +
> +extern void abort (void);
> +extern void exit (int);
> +
> +volatile float x = __builtin_nan ("");
> +volatile int i;
> +
> +int
> +main (void)
> +{
> +  i = x > __builtin_inf ();
> +  if (i != 0 || !fetestexcept (FE_INVALID))
> +    abort ();
> +}
> diff --git a/gcc/testsuite/gcc.dg/torture/inf-compare-1.c b/gcc/testsuite/gcc.dg/torture/inf-compare-1.c
> index 70f255e680a..5e0a2d0c601 100644
> --- a/gcc/testsuite/gcc.dg/torture/inf-compare-1.c
> +++ b/gcc/testsuite/gcc.dg/torture/inf-compare-1.c
> @@ -1,7 +1,7 @@
>   /* { dg-do run { xfail { powerpc*-*-* } } } */
>   /* remove the xfail for powerpc when pr58684 is fixed */
>   /* { dg-add-options ieee } */
> -/* { dg-require-effective-target fenv_exceptions } */
> +/* { dg-require-effective-target fenv_exceptions_double } */
>   /* { dg-skip-if "fenv" { powerpc-ibm-aix* } } */
>   
>   #include <fenv.h>
> diff --git a/gcc/testsuite/gcc.dg/torture/inf-compare-2-float.c b/gcc/testsuite/gcc.dg/torture/inf-compare-2-float.c
> new file mode 100644
> index 00000000000..3cb7df8c157
> --- /dev/null
> +++ b/gcc/testsuite/gcc.dg/torture/inf-compare-2-float.c
> @@ -0,0 +1,21 @@
> +/* { dg-do run { xfail { powerpc*-*-* } } } */
> +/* remove the xfail for powerpc when pr58684 is fixed */
> +/* { dg-add-options ieee } */
> +/* { dg-require-effective-target fenv_exceptions } */
> +/* { dg-skip-if "fenv" { powerpc-ibm-aix* } } */
> +
> +#include <fenv.h>
> +
> +extern void abort (void);
> +extern void exit (int);
> +
> +volatile float x = __builtin_nan ("");
> +volatile int i;
> +
> +int
> +main (void)
> +{
> +  i = x < -__builtin_inf ();
> +  if (i != 0 || !fetestexcept (FE_INVALID))
> +    abort ();
> +}
> diff --git a/gcc/testsuite/gcc.dg/torture/inf-compare-2.c b/gcc/testsuite/gcc.dg/torture/inf-compare-2.c
> index 011f992d5a0..6e396fb6c98 100644
> --- a/gcc/testsuite/gcc.dg/torture/inf-compare-2.c
> +++ b/gcc/testsuite/gcc.dg/torture/inf-compare-2.c
> @@ -1,7 +1,7 @@
>   /* { dg-do run { xfail { powerpc*-*-* } } } */
>   /* remove the xfail for powerpc when pr58684 is fixed */
>   /* { dg-add-options ieee } */
> -/* { dg-require-effective-target fenv_exceptions } */
> +/* { dg-require-effective-target fenv_exceptions_double } */
>   /* { dg-skip-if "fenv" { powerpc-ibm-aix* } } */
>   
>   #include <fenv.h>
> diff --git a/gcc/testsuite/gcc.dg/torture/inf-compare-3-float.c b/gcc/testsuite/gcc.dg/torture/inf-compare-3-float.c
> new file mode 100644
> index 00000000000..297aa0e2e0e
> --- /dev/null
> +++ b/gcc/testsuite/gcc.dg/torture/inf-compare-3-float.c
> @@ -0,0 +1,21 @@
> +/* { dg-do run { xfail { powerpc*-*-* } } } */
> +/* remove the xfail for powerpc when pr58684 is fixed */
> +/* { dg-add-options ieee } */
> +/* { dg-require-effective-target fenv_exceptions } */
> +/* { dg-skip-if "fenv" { powerpc-ibm-aix* } } */
> +
> +#include <fenv.h>
> +
> +extern void abort (void);
> +extern void exit (int);
> +
> +volatile float x = __builtin_nan ("");
> +volatile int i;
> +
> +int
> +main (void)
> +{
> +  i = x <= __builtin_inf ();
> +  if (i != 0 || !fetestexcept (FE_INVALID))
> +    abort ();
> +}
> diff --git a/gcc/testsuite/gcc.dg/torture/inf-compare-3.c b/gcc/testsuite/gcc.dg/torture/inf-compare-3.c
> index de5c478a8d8..cac8c68f49f 100644
> --- a/gcc/testsuite/gcc.dg/torture/inf-compare-3.c
> +++ b/gcc/testsuite/gcc.dg/torture/inf-compare-3.c
> @@ -1,7 +1,7 @@
>   /* { dg-do run { xfail { powerpc*-*-* } } } */
>   /* remove the xfail for powerpc when pr58684 is fixed */
>   /* { dg-add-options ieee } */
> -/* { dg-require-effective-target fenv_exceptions } */
> +/* { dg-require-effective-target fenv_exceptions_double } */
>   /* { dg-skip-if "fenv" { powerpc-ibm-aix* } } */
>   
>   #include <fenv.h>
> diff --git a/gcc/testsuite/gcc.dg/torture/inf-compare-4-float.c b/gcc/testsuite/gcc.dg/torture/inf-compare-4-float.c
> new file mode 100644
> index 00000000000..e719c3700e9
> --- /dev/null
> +++ b/gcc/testsuite/gcc.dg/torture/inf-compare-4-float.c
> @@ -0,0 +1,21 @@
> +/* { dg-do run { xfail { powerpc*-*-* } } } */
> +/* remove the xfail for powerpc when pr58684 is fixed */
> +/* { dg-add-options ieee } */
> +/* { dg-require-effective-target fenv_exceptions } */
> +/* { dg-skip-if "fenv" { powerpc-ibm-aix* } } */
> +
> +#include <fenv.h>
> +
> +extern void abort (void);
> +extern void exit (int);
> +
> +volatile float x = __builtin_nan ("");
> +volatile int i;
> +
> +int
> +main (void)
> +{
> +  i = x >= -__builtin_inf ();
> +  if (i != 0 || !fetestexcept (FE_INVALID))
> +    abort ();
> +}
> diff --git a/gcc/testsuite/gcc.dg/torture/inf-compare-4.c b/gcc/testsuite/gcc.dg/torture/inf-compare-4.c
> index 685562d3a40..43b2b2f04ff 100644
> --- a/gcc/testsuite/gcc.dg/torture/inf-compare-4.c
> +++ b/gcc/testsuite/gcc.dg/torture/inf-compare-4.c
> @@ -1,7 +1,7 @@
>   /* { dg-do run { xfail { powerpc*-*-* } } } */
>   /* remove the xfail for powerpc when pr58684 is fixed */
>   /* { dg-add-options ieee } */
> -/* { dg-require-effective-target fenv_exceptions } */
> +/* { dg-require-effective-target fenv_exceptions_double } */
>   /* { dg-skip-if "fenv" { powerpc-ibm-aix* } } */
>   
>   #include <fenv.h>
> diff --git a/gcc/testsuite/gcc.dg/torture/inf-compare-5-float.c b/gcc/testsuite/gcc.dg/torture/inf-compare-5-float.c
> new file mode 100644
> index 00000000000..0050644ee8d
> --- /dev/null
> +++ b/gcc/testsuite/gcc.dg/torture/inf-compare-5-float.c
> @@ -0,0 +1,19 @@
> +/* { dg-do run } */
> +/* { dg-add-options ieee } */
> +/* { dg-require-effective-target fenv_exceptions } */
> +
> +#include <fenv.h>
> +
> +extern void abort (void);
> +extern void exit (int);
> +
> +volatile float x = __builtin_nan ("");
> +volatile int i;
> +
> +int
> +main (void)
> +{
> +  i = x == __builtin_inf ();
> +  if (i != 0 || fetestexcept (FE_INVALID))
> +    abort ();
> +}
> diff --git a/gcc/testsuite/gcc.dg/torture/inf-compare-5.c b/gcc/testsuite/gcc.dg/torture/inf-compare-5.c
> index d7f17e7dd21..37289b4771f 100644
> --- a/gcc/testsuite/gcc.dg/torture/inf-compare-5.c
> +++ b/gcc/testsuite/gcc.dg/torture/inf-compare-5.c
> @@ -1,6 +1,6 @@
>   /* { dg-do run } */
>   /* { dg-add-options ieee } */
> -/* { dg-require-effective-target fenv_exceptions } */
> +/* { dg-require-effective-target fenv_exceptions_double } */
>   
>   #include <fenv.h>
>   
> diff --git a/gcc/testsuite/gcc.dg/torture/inf-compare-6-float.c b/gcc/testsuite/gcc.dg/torture/inf-compare-6-float.c
> new file mode 100644
> index 00000000000..46e8758b4aa
> --- /dev/null
> +++ b/gcc/testsuite/gcc.dg/torture/inf-compare-6-float.c
> @@ -0,0 +1,19 @@
> +/* { dg-do run } */
> +/* { dg-add-options ieee } */
> +/* { dg-require-effective-target fenv_exceptions } */
> +
> +#include <fenv.h>
> +
> +extern void abort (void);
> +extern void exit (int);
> +
> +volatile float x = __builtin_nan ("");
> +volatile int i;
> +
> +int
> +main (void)
> +{
> +  i = x == -__builtin_inf ();
> +  if (i != 0 || fetestexcept (FE_INVALID))
> +    abort ();
> +}
> diff --git a/gcc/testsuite/gcc.dg/torture/inf-compare-6.c b/gcc/testsuite/gcc.dg/torture/inf-compare-6.c
> index 2dd862b7ebe..7a8ff01fab2 100644
> --- a/gcc/testsuite/gcc.dg/torture/inf-compare-6.c
> +++ b/gcc/testsuite/gcc.dg/torture/inf-compare-6.c
> @@ -1,6 +1,6 @@
>   /* { dg-do run } */
>   /* { dg-add-options ieee } */
> -/* { dg-require-effective-target fenv_exceptions } */
> +/* { dg-require-effective-target fenv_exceptions_double } */
>   
>   #include <fenv.h>
>   
> diff --git a/gcc/testsuite/gcc.dg/torture/inf-compare-7-float.c b/gcc/testsuite/gcc.dg/torture/inf-compare-7-float.c
> new file mode 100644
> index 00000000000..11d987a9f4d
> --- /dev/null
> +++ b/gcc/testsuite/gcc.dg/torture/inf-compare-7-float.c
> @@ -0,0 +1,19 @@
> +/* { dg-do run } */
> +/* { dg-add-options ieee } */
> +/* { dg-require-effective-target fenv_exceptions } */
> +
> +#include <fenv.h>
> +
> +extern void abort (void);
> +extern void exit (int);
> +
> +volatile float x = __builtin_nan ("");
> +volatile int i;
> +
> +int
> +main (void)
> +{
> +  i = x != __builtin_inf ();
> +  if (i != 1 || fetestexcept (FE_INVALID))
> +    abort ();
> +}
> diff --git a/gcc/testsuite/gcc.dg/torture/inf-compare-7.c b/gcc/testsuite/gcc.dg/torture/inf-compare-7.c
> index 36676b4e79f..c0e080b4027 100644
> --- a/gcc/testsuite/gcc.dg/torture/inf-compare-7.c
> +++ b/gcc/testsuite/gcc.dg/torture/inf-compare-7.c
> @@ -1,6 +1,6 @@
>   /* { dg-do run } */
>   /* { dg-add-options ieee } */
> -/* { dg-require-effective-target fenv_exceptions } */
> +/* { dg-require-effective-target fenv_exceptions_double } */
>   
>   #include <fenv.h>
>   
> diff --git a/gcc/testsuite/gcc.dg/torture/inf-compare-8-float.c b/gcc/testsuite/gcc.dg/torture/inf-compare-8-float.c
> new file mode 100644
> index 00000000000..5510c67401c
> --- /dev/null
> +++ b/gcc/testsuite/gcc.dg/torture/inf-compare-8-float.c
> @@ -0,0 +1,19 @@
> +/* { dg-do run } */
> +/* { dg-add-options ieee } */
> +/* { dg-require-effective-target fenv_exceptions } */
> +
> +#include <fenv.h>
> +
> +extern void abort (void);
> +extern void exit (int);
> +
> +volatile float x = __builtin_nan ("");
> +volatile int i;
> +
> +int
> +main (void)
> +{
> +  i = x != -__builtin_inf ();
> +  if (i != 1 || fetestexcept (FE_INVALID))
> +    abort ();
> +}
> diff --git a/gcc/testsuite/gcc.dg/torture/inf-compare-8.c b/gcc/testsuite/gcc.dg/torture/inf-compare-8.c
> index cfda813a0c6..ebc0260bfba 100644
> --- a/gcc/testsuite/gcc.dg/torture/inf-compare-8.c
> +++ b/gcc/testsuite/gcc.dg/torture/inf-compare-8.c
> @@ -1,6 +1,6 @@
>   /* { dg-do run } */
>   /* { dg-add-options ieee } */
> -/* { dg-require-effective-target fenv_exceptions } */
> +/* { dg-require-effective-target fenv_exceptions_double } */
>   
>   #include <fenv.h>
>   
> diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
> index 7c9dd45f2a7..ab3f52c2715 100644
> --- a/gcc/testsuite/lib/target-supports.exp
> +++ b/gcc/testsuite/lib/target-supports.exp
> @@ -10835,6 +10835,80 @@ proc check_effective_target_fenv_exceptions_dfp {} {
>       } [add_options_for_ieee "-std=gnu99"]]
>   }
>   
> +# Return 1 if <fenv.h> is available with all the standard IEEE
> +# exceptions and floating-point exceptions are raised by arithmetic
> +# operations.  (If the target requires special options for "inexact"
> +# exceptions, those need to be specified in the testcases.)
> +
> +proc check_effective_target_fenv_exceptions_double {} {
> +    return [check_runtime fenv_exceptions_double {
> +	#include <fenv.h>
> +	#include <stdlib.h>
> +	#ifndef FE_DIVBYZERO
> +	# error Missing FE_DIVBYZERO
> +	#endif
> +	#ifndef FE_INEXACT
> +	# error Missing FE_INEXACT
> +	#endif
> +	#ifndef FE_INVALID
> +	# error Missing FE_INVALID
> +	#endif
> +	#ifndef FE_OVERFLOW
> +	# error Missing FE_OVERFLOW
> +	#endif
> +	#ifndef FE_UNDERFLOW
> +	# error Missing FE_UNDERFLOW
> +	#endif
> +	volatile double a = 0.0f, r;
> +	int
> +	main (void)
> +	{
> +	  r = a / a;
> +	  if (fetestexcept (FE_INVALID))
> +	    exit (0);
> +	  else
> +	    abort ();
> +	}
> +    } [add_options_for_ieee "-std=gnu99"]]
> +}
> +
> +# Return 1 if <fenv.h> is available with all the standard IEEE
> +# exceptions and floating-point exceptions are raised by arithmetic
> +# operations.  (If the target requires special options for "inexact"
> +# exceptions, those need to be specified in the testcases.)
> +
> +proc check_effective_target_fenv_exceptions_long_double {} {
> +    return [check_runtime fenv_exceptions_long_double {
> +	#include <fenv.h>
> +	#include <stdlib.h>
> +	#ifndef FE_DIVBYZERO
> +	# error Missing FE_DIVBYZERO
> +	#endif
> +	#ifndef FE_INEXACT
> +	# error Missing FE_INEXACT
> +	#endif
> +	#ifndef FE_INVALID
> +	# error Missing FE_INVALID
> +	#endif
> +	#ifndef FE_OVERFLOW
> +	# error Missing FE_OVERFLOW
> +	#endif
> +	#ifndef FE_UNDERFLOW
> +	# error Missing FE_UNDERFLOW
> +	#endif
> +	volatile long double a = 0.0f, r;
> +	int
> +	main (void)
> +	{
> +	  r = a / a;
> +	  if (fetestexcept (FE_INVALID))
> +	    exit (0);
> +	  else
> +	    abort ();
> +	}
> +    } [add_options_for_ieee "-std=gnu99"]]
> +}
> +
>   # Return 1 if -fexceptions is supported.
>   
>   proc check_effective_target_exceptions {} {

      reply	other threads:[~2022-10-14  7:44 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-10-07 13:28 Torbjörn SVENSSON
2022-10-14  7:44 ` Torbjorn SVENSSON [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=0269d7c2-26f1-a957-2e54-54902b070dc5@foss.st.com \
    --to=torbjorn.svensson@foss.st.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=joseph@codesourcery.com \
    --cc=kyrylo.tkachov@arm.com \
    --cc=yvan.roux@foss.st.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).