public inbox for fortran@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] Fortran: make IEEE_CLASS recognize signaling NaNs
@ 2022-01-02 10:50 FX
  2022-01-09 10:52 ` FX
  2022-01-11 22:01 ` Harald Anlauf
  0 siblings, 2 replies; 15+ messages in thread
From: FX @ 2022-01-02 10:50 UTC (permalink / raw)
  To: fortran; +Cc: gcc-patches

[-- Attachment #1: Type: text/plain, Size: 1001 bytes --]

Hi,

This is the first part of a three-patch series to fix PR 82207 (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82207), making gfortran handle signaling NaNs. This part fixes the library code implementing IEEE_CLASS, by using the issignaling macro (from TS 18661-1:2014) to check whether a NaN is signalling.

The patch comes with a testcase, conditional on issignaling support (which will therefore run on glibc targets), which uses C built-ins to generate signaling NaNs and checks in Fortran code that they are classified and behave as expected.

Once this is in, the next two parts are:

- Add support for generating signaling NaNs in IEEE_VALUE, which is a longer patch because it requires moving the IEEE_VALUE library code from Fortran to C (but will be much more efficient and correct than the current implementation).
- Provide a fallback implementation of issignaling on targets that don’t have it.


Bootstrapped and regtested on x86_64-pc-gnu-linux. OK to commit?

FX


[-- Attachment #2: 0001-Fortran-Allow-IEEE_CLASS-to-identify-signaling-NaNs.patch --]
[-- Type: application/octet-stream, Size: 8566 bytes --]

From b341ad50e2d228de60e86dd6ffbd09b8733ef468 Mon Sep 17 00:00:00 2001
From: Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
Date: Sun, 2 Jan 2022 11:36:23 +0100
Subject: [PATCH] Fortran: Allow IEEE_CLASS to identify signaling NaNs

We use the issignaling macro, present in some libc's (notably glibc),
when it is available. Compile all IEEE-related files in the library
(both C and Fortran sources) with -fsignaling-nans to ensure maximum
compatibility.

libgfortran/ChangeLog:

	PR fortran/82207
	* Makefile.am: Pass -fsignaling-nans for IEEE files.
	* Makefile.in: Regenerate.
	* ieee/ieee_helper.c: Use issignaling macro to recognized
	signaling NaNs.

gcc/testsuite/ChangeLog:

	PR fortran/82207
	* gfortran.dg/ieee/signaling_1.f90: New test.
	* gfortran.dg/ieee/signaling_1_c.c: New file.
---
 .../gfortran.dg/ieee/signaling_1.f90          | 89 +++++++++++++++++++
 .../gfortran.dg/ieee/signaling_1_c.c          | 14 +++
 libgfortran/Makefile.am                       |  8 +-
 libgfortran/Makefile.in                       |  6 +-
 libgfortran/ieee/ieee_helper.c                | 15 +++-
 5 files changed, 128 insertions(+), 4 deletions(-)
 create mode 100644 gcc/testsuite/gfortran.dg/ieee/signaling_1.f90
 create mode 100644 gcc/testsuite/gfortran.dg/ieee/signaling_1_c.c

diff --git a/gcc/testsuite/gfortran.dg/ieee/signaling_1.f90 b/gcc/testsuite/gfortran.dg/ieee/signaling_1.f90
new file mode 100644
index 00000000000..a1403e6ce16
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/ieee/signaling_1.f90
@@ -0,0 +1,89 @@
+! { dg-do run }
+! { dg-require-effective-target issignaling } */
+! { dg-additional-sources signaling_1_c.c }
+! { dg-options "-fsignaling-nans" }
+!
+program test
+  use, intrinsic :: iso_c_binding
+  use, intrinsic :: ieee_arithmetic
+  implicit none
+
+  interface
+    real(kind=c_float) function create_nansf () bind(c)
+      import :: c_float
+    end function
+
+    real(kind=c_double) function create_nans () bind(c)
+      import :: c_double
+    end function
+
+    real(kind=c_long_double) function create_nansl () bind(c)
+      import :: c_long_double
+    end function
+  end interface
+
+  real(kind=c_float) :: x
+  real(kind=c_double) :: y
+  real(kind=c_long_double) :: z
+
+  if (ieee_support_nan(x)) then
+    x = create_nansf()
+    if (ieee_class(x) /= ieee_signaling_nan) stop 100
+    if (.not. ieee_is_nan(x)) stop 101
+    if (ieee_is_negative(x)) stop 102
+    if (ieee_is_finite(x)) stop 103
+    if (ieee_is_normal(x)) stop 104
+    if (.not. ieee_unordered(x, x)) stop 105
+    if (.not. ieee_unordered(x, 1._c_float)) stop 106
+
+    x = ieee_value(y, ieee_quiet_nan)
+    if (ieee_class(x) /= ieee_quiet_nan) stop 107
+    if (.not. ieee_is_nan(x)) stop 108
+    if (ieee_is_negative(x)) stop 109
+    if (ieee_is_finite(x)) stop 110
+    if (ieee_is_normal(x)) stop 111
+    if (.not. ieee_unordered(x, x)) stop 112
+    if (.not. ieee_unordered(x, 1._c_double)) stop 113
+  end if
+
+  if (ieee_support_nan(y)) then
+    y = create_nans()
+    if (ieee_class(y) /= ieee_signaling_nan) stop 200
+    if (.not. ieee_is_nan(y)) stop 201
+    if (ieee_is_negative(y)) stop 202
+    if (ieee_is_finite(y)) stop 203
+    if (ieee_is_normal(y)) stop 204
+    if (.not. ieee_unordered(y, x)) stop 205
+    if (.not. ieee_unordered(y, 1._c_double)) stop 206
+
+    y = ieee_value(y, ieee_quiet_nan)
+    if (ieee_class(y) /= ieee_quiet_nan) stop 207
+    if (.not. ieee_is_nan(y)) stop 208
+    if (ieee_is_negative(y)) stop 209
+    if (ieee_is_finite(y)) stop 210
+    if (ieee_is_normal(y)) stop 211
+    if (.not. ieee_unordered(y, y)) stop 212
+    if (.not. ieee_unordered(y, 1._c_double)) stop 213
+  end if
+
+  if (ieee_support_nan(z)) then
+    z = create_nansl()
+    if (ieee_class(z) /= ieee_signaling_nan) stop 300
+    if (.not. ieee_is_nan(z)) stop 301
+    if (ieee_is_negative(z)) stop 302
+    if (ieee_is_finite(z)) stop 303
+    if (ieee_is_normal(z)) stop 304
+    if (.not. ieee_unordered(z, z)) stop 305
+    if (.not. ieee_unordered(z, 1._c_long_double)) stop 306
+
+    z = ieee_value(y, ieee_quiet_nan)
+    if (ieee_class(z) /= ieee_quiet_nan) stop 307
+    if (.not. ieee_is_nan(z)) stop 308
+    if (ieee_is_negative(z)) stop 309
+    if (ieee_is_finite(z)) stop 310
+    if (ieee_is_normal(z)) stop 311
+    if (.not. ieee_unordered(z, z)) stop 312
+    if (.not. ieee_unordered(z, 1._c_double)) stop 313
+  end if
+
+end program test
diff --git a/gcc/testsuite/gfortran.dg/ieee/signaling_1_c.c b/gcc/testsuite/gfortran.dg/ieee/signaling_1_c.c
new file mode 100644
index 00000000000..ab19bb7eae7
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/ieee/signaling_1_c.c
@@ -0,0 +1,14 @@
+float create_nansf (void)
+{
+  return __builtin_nansf("");
+}
+
+double create_nans (void)
+{
+  return __builtin_nans("");
+}
+
+long double create_nansl (void)
+{
+  return __builtin_nansl("");
+}
diff --git a/libgfortran/Makefile.am b/libgfortran/Makefile.am
index 008f2e7549c..b7ef912a440 100644
--- a/libgfortran/Makefile.am
+++ b/libgfortran/Makefile.am
@@ -185,6 +185,8 @@ endif
 
 if IEEE_SUPPORT
 
+gfor_ieee_helper_src=ieee/ieee_helper.c
+
 gfor_helper_src+=ieee/ieee_helper.c
 
 gfor_ieee_src= \
@@ -991,9 +993,13 @@ selected_real_kind.lo selected_int_kind.lo: AM_FCFLAGS += -fallow-leading-unders
 
 if IEEE_SUPPORT
 # Add flags for IEEE modules
-$(patsubst %.F90,%.lo,$(notdir $(gfor_ieee_src))): AM_FCFLAGS += -Wno-unused-dummy-argument -Wno-c-binding-type -ffree-line-length-0 -fallow-leading-underscore
+$(patsubst %.F90,%.lo,$(notdir $(gfor_ieee_src))): AM_FCFLAGS += -Wno-unused-dummy-argument -Wno-c-binding-type -ffree-line-length-0 -fallow-leading-underscore -fsignaling-nans
+
+# Add flags for IEEE helper code
+$(patsubst %.c,%.lo,$(notdir $(gfor_ieee_helper_src))): AM_CFLAGS += -fsignaling-nans
 endif
 
+
 # Dependencies between IEEE_ARITHMETIC and IEEE_EXCEPTIONS
 ieee_arithmetic.lo: ieee/ieee_arithmetic.F90 ieee_exceptions.lo
 	$(LTPPFCCOMPILE) -c -o $@ $<
diff --git a/libgfortran/Makefile.in b/libgfortran/Makefile.in
index 5dac04e171e..3684b2aaa75 100644
--- a/libgfortran/Makefile.in
+++ b/libgfortran/Makefile.in
@@ -779,6 +779,7 @@ gfor_helper_src = intrinsics/associated.c intrinsics/abort.c \
 	intrinsics/selected_real_kind.f90 intrinsics/trigd.c \
 	intrinsics/unpack_generic.c runtime/in_pack_generic.c \
 	runtime/in_unpack_generic.c $(am__append_3) $(am__append_4)
+@IEEE_SUPPORT_TRUE@gfor_ieee_helper_src = ieee/ieee_helper.c
 @IEEE_SUPPORT_FALSE@gfor_ieee_src = 
 @IEEE_SUPPORT_TRUE@gfor_ieee_src = \
 @IEEE_SUPPORT_TRUE@ieee/ieee_arithmetic.F90 \
@@ -6999,7 +7000,10 @@ $(patsubst %.F90,%.lo,$(patsubst %.f90,%.lo,$(notdir $(gfor_specific_src)))): AM
 selected_real_kind.lo selected_int_kind.lo: AM_FCFLAGS += -fallow-leading-underscore
 
 # Add flags for IEEE modules
-@IEEE_SUPPORT_TRUE@$(patsubst %.F90,%.lo,$(notdir $(gfor_ieee_src))): AM_FCFLAGS += -Wno-unused-dummy-argument -Wno-c-binding-type -ffree-line-length-0 -fallow-leading-underscore
+@IEEE_SUPPORT_TRUE@$(patsubst %.F90,%.lo,$(notdir $(gfor_ieee_src))): AM_FCFLAGS += -Wno-unused-dummy-argument -Wno-c-binding-type -ffree-line-length-0 -fallow-leading-underscore -fsignaling-nans
+
+# Add flags for IEEE helper code
+@IEEE_SUPPORT_TRUE@$(patsubst %.c,%.lo,$(notdir $(gfor_ieee_helper_src))): AM_CFLAGS += -fsignaling-nans
 
 # Dependencies between IEEE_ARITHMETIC and IEEE_EXCEPTIONS
 ieee_arithmetic.lo: ieee/ieee_arithmetic.F90 ieee_exceptions.lo
diff --git a/libgfortran/ieee/ieee_helper.c b/libgfortran/ieee/ieee_helper.c
index fd2ba69488b..5a824a180e2 100644
--- a/libgfortran/ieee/ieee_helper.c
+++ b/libgfortran/ieee/ieee_helper.c
@@ -25,6 +25,15 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 
 #include "libgfortran.h"
 
+
+/* Check support for issignaling macro.
+   TODO: In the future, provide fallback implementations for IEEE types,
+   because many libc's do not have issignaling yet.  */
+#ifndef issignaling
+# define issignaling(X) 0
+#endif
+
+
 /* Prototypes.  */
 
 extern int ieee_class_helper_4 (GFC_REAL_4 *);
@@ -86,8 +95,10 @@ enum {
  \
     if (res == IEEE_QUIET_NAN) \
     { \
-      /* TODO: Handle signaling NaNs  */ \
-      return res; \
+      if (issignaling (*value)) \
+	return IEEE_SIGNALING_NAN; \
+      else \
+	return IEEE_QUIET_NAN; \
     } \
  \
     return res; \
-- 
2.25.1


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH] Fortran: make IEEE_CLASS recognize signaling NaNs
  2022-01-02 10:50 [PATCH] Fortran: make IEEE_CLASS recognize signaling NaNs FX
@ 2022-01-09 10:52 ` FX
  2022-01-09 19:34   ` Mikael Morin
  2022-01-11 22:01 ` Harald Anlauf
  1 sibling, 1 reply; 15+ messages in thread
From: FX @ 2022-01-09 10:52 UTC (permalink / raw)
  To: fortran; +Cc: gcc-patches

[-- Attachment #1: Type: text/plain, Size: 1112 bytes --]

ping


> Le 2 janv. 2022 à 11:50, FX <fxcoudert@gmail.com> a écrit :
> 
> Hi,
> 
> This is the first part of a three-patch series to fix PR 82207 (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82207), making gfortran handle signaling NaNs. This part fixes the library code implementing IEEE_CLASS, by using the issignaling macro (from TS 18661-1:2014) to check whether a NaN is signalling.
> 
> The patch comes with a testcase, conditional on issignaling support (which will therefore run on glibc targets), which uses C built-ins to generate signaling NaNs and checks in Fortran code that they are classified and behave as expected.
> 
> Once this is in, the next two parts are:
> 
> - Add support for generating signaling NaNs in IEEE_VALUE, which is a longer patch because it requires moving the IEEE_VALUE library code from Fortran to C (but will be much more efficient and correct than the current implementation).
> - Provide a fallback implementation of issignaling on targets that don’t have it.
> 
> 
> Bootstrapped and regtested on x86_64-pc-gnu-linux. OK to commit?
> 
> FX
> 

[-- Attachment #2: 0001-Fortran-Allow-IEEE_CLASS-to-identify-signaling-NaNs.patch --]
[-- Type: application/octet-stream, Size: 8566 bytes --]

From b341ad50e2d228de60e86dd6ffbd09b8733ef468 Mon Sep 17 00:00:00 2001
From: Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
Date: Sun, 2 Jan 2022 11:36:23 +0100
Subject: [PATCH] Fortran: Allow IEEE_CLASS to identify signaling NaNs

We use the issignaling macro, present in some libc's (notably glibc),
when it is available. Compile all IEEE-related files in the library
(both C and Fortran sources) with -fsignaling-nans to ensure maximum
compatibility.

libgfortran/ChangeLog:

	PR fortran/82207
	* Makefile.am: Pass -fsignaling-nans for IEEE files.
	* Makefile.in: Regenerate.
	* ieee/ieee_helper.c: Use issignaling macro to recognized
	signaling NaNs.

gcc/testsuite/ChangeLog:

	PR fortran/82207
	* gfortran.dg/ieee/signaling_1.f90: New test.
	* gfortran.dg/ieee/signaling_1_c.c: New file.
---
 .../gfortran.dg/ieee/signaling_1.f90          | 89 +++++++++++++++++++
 .../gfortran.dg/ieee/signaling_1_c.c          | 14 +++
 libgfortran/Makefile.am                       |  8 +-
 libgfortran/Makefile.in                       |  6 +-
 libgfortran/ieee/ieee_helper.c                | 15 +++-
 5 files changed, 128 insertions(+), 4 deletions(-)
 create mode 100644 gcc/testsuite/gfortran.dg/ieee/signaling_1.f90
 create mode 100644 gcc/testsuite/gfortran.dg/ieee/signaling_1_c.c

diff --git a/gcc/testsuite/gfortran.dg/ieee/signaling_1.f90 b/gcc/testsuite/gfortran.dg/ieee/signaling_1.f90
new file mode 100644
index 00000000000..a1403e6ce16
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/ieee/signaling_1.f90
@@ -0,0 +1,89 @@
+! { dg-do run }
+! { dg-require-effective-target issignaling } */
+! { dg-additional-sources signaling_1_c.c }
+! { dg-options "-fsignaling-nans" }
+!
+program test
+  use, intrinsic :: iso_c_binding
+  use, intrinsic :: ieee_arithmetic
+  implicit none
+
+  interface
+    real(kind=c_float) function create_nansf () bind(c)
+      import :: c_float
+    end function
+
+    real(kind=c_double) function create_nans () bind(c)
+      import :: c_double
+    end function
+
+    real(kind=c_long_double) function create_nansl () bind(c)
+      import :: c_long_double
+    end function
+  end interface
+
+  real(kind=c_float) :: x
+  real(kind=c_double) :: y
+  real(kind=c_long_double) :: z
+
+  if (ieee_support_nan(x)) then
+    x = create_nansf()
+    if (ieee_class(x) /= ieee_signaling_nan) stop 100
+    if (.not. ieee_is_nan(x)) stop 101
+    if (ieee_is_negative(x)) stop 102
+    if (ieee_is_finite(x)) stop 103
+    if (ieee_is_normal(x)) stop 104
+    if (.not. ieee_unordered(x, x)) stop 105
+    if (.not. ieee_unordered(x, 1._c_float)) stop 106
+
+    x = ieee_value(y, ieee_quiet_nan)
+    if (ieee_class(x) /= ieee_quiet_nan) stop 107
+    if (.not. ieee_is_nan(x)) stop 108
+    if (ieee_is_negative(x)) stop 109
+    if (ieee_is_finite(x)) stop 110
+    if (ieee_is_normal(x)) stop 111
+    if (.not. ieee_unordered(x, x)) stop 112
+    if (.not. ieee_unordered(x, 1._c_double)) stop 113
+  end if
+
+  if (ieee_support_nan(y)) then
+    y = create_nans()
+    if (ieee_class(y) /= ieee_signaling_nan) stop 200
+    if (.not. ieee_is_nan(y)) stop 201
+    if (ieee_is_negative(y)) stop 202
+    if (ieee_is_finite(y)) stop 203
+    if (ieee_is_normal(y)) stop 204
+    if (.not. ieee_unordered(y, x)) stop 205
+    if (.not. ieee_unordered(y, 1._c_double)) stop 206
+
+    y = ieee_value(y, ieee_quiet_nan)
+    if (ieee_class(y) /= ieee_quiet_nan) stop 207
+    if (.not. ieee_is_nan(y)) stop 208
+    if (ieee_is_negative(y)) stop 209
+    if (ieee_is_finite(y)) stop 210
+    if (ieee_is_normal(y)) stop 211
+    if (.not. ieee_unordered(y, y)) stop 212
+    if (.not. ieee_unordered(y, 1._c_double)) stop 213
+  end if
+
+  if (ieee_support_nan(z)) then
+    z = create_nansl()
+    if (ieee_class(z) /= ieee_signaling_nan) stop 300
+    if (.not. ieee_is_nan(z)) stop 301
+    if (ieee_is_negative(z)) stop 302
+    if (ieee_is_finite(z)) stop 303
+    if (ieee_is_normal(z)) stop 304
+    if (.not. ieee_unordered(z, z)) stop 305
+    if (.not. ieee_unordered(z, 1._c_long_double)) stop 306
+
+    z = ieee_value(y, ieee_quiet_nan)
+    if (ieee_class(z) /= ieee_quiet_nan) stop 307
+    if (.not. ieee_is_nan(z)) stop 308
+    if (ieee_is_negative(z)) stop 309
+    if (ieee_is_finite(z)) stop 310
+    if (ieee_is_normal(z)) stop 311
+    if (.not. ieee_unordered(z, z)) stop 312
+    if (.not. ieee_unordered(z, 1._c_double)) stop 313
+  end if
+
+end program test
diff --git a/gcc/testsuite/gfortran.dg/ieee/signaling_1_c.c b/gcc/testsuite/gfortran.dg/ieee/signaling_1_c.c
new file mode 100644
index 00000000000..ab19bb7eae7
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/ieee/signaling_1_c.c
@@ -0,0 +1,14 @@
+float create_nansf (void)
+{
+  return __builtin_nansf("");
+}
+
+double create_nans (void)
+{
+  return __builtin_nans("");
+}
+
+long double create_nansl (void)
+{
+  return __builtin_nansl("");
+}
diff --git a/libgfortran/Makefile.am b/libgfortran/Makefile.am
index 008f2e7549c..b7ef912a440 100644
--- a/libgfortran/Makefile.am
+++ b/libgfortran/Makefile.am
@@ -185,6 +185,8 @@ endif
 
 if IEEE_SUPPORT
 
+gfor_ieee_helper_src=ieee/ieee_helper.c
+
 gfor_helper_src+=ieee/ieee_helper.c
 
 gfor_ieee_src= \
@@ -991,9 +993,13 @@ selected_real_kind.lo selected_int_kind.lo: AM_FCFLAGS += -fallow-leading-unders
 
 if IEEE_SUPPORT
 # Add flags for IEEE modules
-$(patsubst %.F90,%.lo,$(notdir $(gfor_ieee_src))): AM_FCFLAGS += -Wno-unused-dummy-argument -Wno-c-binding-type -ffree-line-length-0 -fallow-leading-underscore
+$(patsubst %.F90,%.lo,$(notdir $(gfor_ieee_src))): AM_FCFLAGS += -Wno-unused-dummy-argument -Wno-c-binding-type -ffree-line-length-0 -fallow-leading-underscore -fsignaling-nans
+
+# Add flags for IEEE helper code
+$(patsubst %.c,%.lo,$(notdir $(gfor_ieee_helper_src))): AM_CFLAGS += -fsignaling-nans
 endif
 
+
 # Dependencies between IEEE_ARITHMETIC and IEEE_EXCEPTIONS
 ieee_arithmetic.lo: ieee/ieee_arithmetic.F90 ieee_exceptions.lo
 	$(LTPPFCCOMPILE) -c -o $@ $<
diff --git a/libgfortran/Makefile.in b/libgfortran/Makefile.in
index 5dac04e171e..3684b2aaa75 100644
--- a/libgfortran/Makefile.in
+++ b/libgfortran/Makefile.in
@@ -779,6 +779,7 @@ gfor_helper_src = intrinsics/associated.c intrinsics/abort.c \
 	intrinsics/selected_real_kind.f90 intrinsics/trigd.c \
 	intrinsics/unpack_generic.c runtime/in_pack_generic.c \
 	runtime/in_unpack_generic.c $(am__append_3) $(am__append_4)
+@IEEE_SUPPORT_TRUE@gfor_ieee_helper_src = ieee/ieee_helper.c
 @IEEE_SUPPORT_FALSE@gfor_ieee_src = 
 @IEEE_SUPPORT_TRUE@gfor_ieee_src = \
 @IEEE_SUPPORT_TRUE@ieee/ieee_arithmetic.F90 \
@@ -6999,7 +7000,10 @@ $(patsubst %.F90,%.lo,$(patsubst %.f90,%.lo,$(notdir $(gfor_specific_src)))): AM
 selected_real_kind.lo selected_int_kind.lo: AM_FCFLAGS += -fallow-leading-underscore
 
 # Add flags for IEEE modules
-@IEEE_SUPPORT_TRUE@$(patsubst %.F90,%.lo,$(notdir $(gfor_ieee_src))): AM_FCFLAGS += -Wno-unused-dummy-argument -Wno-c-binding-type -ffree-line-length-0 -fallow-leading-underscore
+@IEEE_SUPPORT_TRUE@$(patsubst %.F90,%.lo,$(notdir $(gfor_ieee_src))): AM_FCFLAGS += -Wno-unused-dummy-argument -Wno-c-binding-type -ffree-line-length-0 -fallow-leading-underscore -fsignaling-nans
+
+# Add flags for IEEE helper code
+@IEEE_SUPPORT_TRUE@$(patsubst %.c,%.lo,$(notdir $(gfor_ieee_helper_src))): AM_CFLAGS += -fsignaling-nans
 
 # Dependencies between IEEE_ARITHMETIC and IEEE_EXCEPTIONS
 ieee_arithmetic.lo: ieee/ieee_arithmetic.F90 ieee_exceptions.lo
diff --git a/libgfortran/ieee/ieee_helper.c b/libgfortran/ieee/ieee_helper.c
index fd2ba69488b..5a824a180e2 100644
--- a/libgfortran/ieee/ieee_helper.c
+++ b/libgfortran/ieee/ieee_helper.c
@@ -25,6 +25,15 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 
 #include "libgfortran.h"
 
+
+/* Check support for issignaling macro.
+   TODO: In the future, provide fallback implementations for IEEE types,
+   because many libc's do not have issignaling yet.  */
+#ifndef issignaling
+# define issignaling(X) 0
+#endif
+
+
 /* Prototypes.  */
 
 extern int ieee_class_helper_4 (GFC_REAL_4 *);
@@ -86,8 +95,10 @@ enum {
  \
     if (res == IEEE_QUIET_NAN) \
     { \
-      /* TODO: Handle signaling NaNs  */ \
-      return res; \
+      if (issignaling (*value)) \
+	return IEEE_SIGNALING_NAN; \
+      else \
+	return IEEE_QUIET_NAN; \
     } \
  \
     return res; \
-- 
2.25.1


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH] Fortran: make IEEE_CLASS recognize signaling NaNs
  2022-01-09 10:52 ` FX
@ 2022-01-09 19:34   ` Mikael Morin
  2022-01-10 12:04     ` FX
  0 siblings, 1 reply; 15+ messages in thread
From: Mikael Morin @ 2022-01-09 19:34 UTC (permalink / raw)
  To: FX, fortran; +Cc: gcc-patches

Le 09/01/2022 à 11:52, FX via Fortran a écrit :
> ping
> 
> 
>> Le 2 janv. 2022 à 11:50, FX <fxcoudert@gmail.com> a écrit :
>>
>> Hi,
>>
>> This is the first part of a three-patch series to fix PR 82207 (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82207), making gfortran handle signaling NaNs. This part fixes the library code implementing IEEE_CLASS, by using the issignaling macro (from TS 18661-1:2014) to check whether a NaN is signalling.
>>
>> The patch comes with a testcase, conditional on issignaling support (which will therefore run on glibc targets), which uses C built-ins to generate signaling NaNs and checks in Fortran code that they are classified and behave as expected.
>>
>> Once this is in, the next two parts are:
>>
>> - Add support for generating signaling NaNs in IEEE_VALUE, which is a longer patch because it requires moving the IEEE_VALUE library code from Fortran to C (but will be much more efficient and correct than the current implementation).
>> - Provide a fallback implementation of issignaling on targets that don’t have it.
>>
>>
>> Bootstrapped and regtested on x86_64-pc-gnu-linux. OK to commit?
>>
>> FX
>>

Hello,

this is touching areas that I don’t know very much, but it looks 
reasonable, so without any other comment, please proceed.

Thanks.

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH] Fortran: make IEEE_CLASS recognize signaling NaNs
  2022-01-09 19:34   ` Mikael Morin
@ 2022-01-10 12:04     ` FX
  0 siblings, 0 replies; 15+ messages in thread
From: FX @ 2022-01-10 12:04 UTC (permalink / raw)
  To: Mikael Morin; +Cc: fortran, gcc-patches

Thanks Mikael. I haven’t been active with gfortran development in a while, but I originally wrote those IEEE routines so I believe my understanding of them is fair. I will continue posting my next patches to gather comments (if any), but they’re relatively straightforward.

The main limitation (not with this patch, but with the next ones) is some targets have really weird floating-point formats, and I cannot test on all possible targets. Feel free to poke me on any issue that arises, in ML or in bugzilla.

Best,
FX

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH] Fortran: make IEEE_CLASS recognize signaling NaNs
  2022-01-02 10:50 [PATCH] Fortran: make IEEE_CLASS recognize signaling NaNs FX
  2022-01-09 10:52 ` FX
@ 2022-01-11 22:01 ` Harald Anlauf
  2022-01-11 22:01   ` Harald Anlauf
  2022-01-11 22:04   ` FX
  1 sibling, 2 replies; 15+ messages in thread
From: Harald Anlauf @ 2022-01-11 22:01 UTC (permalink / raw)
  To: FX, fortran; +Cc: gcc-patches

Hi FX,

Am 02.01.22 um 11:50 schrieb FX via Fortran:
> Hi,
>
> This is the first part of a three-patch series to fix PR 82207 (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82207), making gfortran handle signaling NaNs. This part fixes the library code implementing IEEE_CLASS, by using the issignaling macro (from TS 18661-1:2014) to check whether a NaN is signalling.
>
> The patch comes with a testcase, conditional on issignaling support (which will therefore run on glibc targets), which uses C built-ins to generate signaling NaNs and checks in Fortran code that they are classified and behave as expected.
>
> Once this is in, the next two parts are:
>
> - Add support for generating signaling NaNs in IEEE_VALUE, which is a longer patch because it requires moving the IEEE_VALUE library code from Fortran to C (but will be much more efficient and correct than the current implementation).
> - Provide a fallback implementation of issignaling on targets that don’t have it.
>
>
> Bootstrapped and regtested on x86_64-pc-gnu-linux. OK to commit?
>
> FX
>

I think this patch breaks the testsuite, since the directive
! { dg-additional-sources signaling_1_c.c }

should rather read

! { dg-additional-sources "signaling_1_c.c" }

At least this is similar what I see in other testcases.

Harald

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH] Fortran: make IEEE_CLASS recognize signaling NaNs
  2022-01-11 22:01 ` Harald Anlauf
@ 2022-01-11 22:01   ` Harald Anlauf
  2022-01-11 22:04   ` FX
  1 sibling, 0 replies; 15+ messages in thread
From: Harald Anlauf @ 2022-01-11 22:01 UTC (permalink / raw)
  To: fortran; +Cc: gcc-patches

Hi FX,

Am 02.01.22 um 11:50 schrieb FX via Fortran:
> Hi,
> 
> This is the first part of a three-patch series to fix PR 82207 (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82207), making gfortran handle signaling NaNs. This part fixes the library code implementing IEEE_CLASS, by using the issignaling macro (from TS 18661-1:2014) to check whether a NaN is signalling.
> 
> The patch comes with a testcase, conditional on issignaling support (which will therefore run on glibc targets), which uses C built-ins to generate signaling NaNs and checks in Fortran code that they are classified and behave as expected.
> 
> Once this is in, the next two parts are:
> 
> - Add support for generating signaling NaNs in IEEE_VALUE, which is a longer patch because it requires moving the IEEE_VALUE library code from Fortran to C (but will be much more efficient and correct than the current implementation).
> - Provide a fallback implementation of issignaling on targets that don’t have it.
> 
> 
> Bootstrapped and regtested on x86_64-pc-gnu-linux. OK to commit?
> 
> FX
> 

I think this patch breaks the testsuite, since the directive
! { dg-additional-sources signaling_1_c.c }

should rather read

! { dg-additional-sources "signaling_1_c.c" }

At least this is similar what I see in other testcases.

Harald


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH] Fortran: make IEEE_CLASS recognize signaling NaNs
  2022-01-11 22:01 ` Harald Anlauf
  2022-01-11 22:01   ` Harald Anlauf
@ 2022-01-11 22:04   ` FX
  2022-01-11 22:11     ` Harald Anlauf
  1 sibling, 1 reply; 15+ messages in thread
From: FX @ 2022-01-11 22:04 UTC (permalink / raw)
  To: Harald Anlauf; +Cc: fortran, gcc-patches

Hi Harald,

> I think this patch breaks the testsuite

On what platform? It regtested fine on x86_64-pc-linux-gnu


> since the directive
> ! { dg-additional-sources signaling_1_c.c }
> should rather read
> ! { dg-additional-sources "signaling_1_c.c" }

I find plenty of evidence saying it’s allowed (just quoting a few, but there are a lot):

./gfortran.dg/PR94331.f90:! { dg-additional-sources PR94331.c }
./gfortran.dg/global_vars_c_init.f90:! { dg-additional-sources global_vars_c_init_driver.c }
./gfortran.dg/c_char_tests.f03:! { dg-additional-sources c_char_driver.c }


FX

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH] Fortran: make IEEE_CLASS recognize signaling NaNs
  2022-01-11 22:04   ` FX
@ 2022-01-11 22:11     ` Harald Anlauf
  2022-01-11 22:11       ` Harald Anlauf
  2022-01-11 22:32       ` FX
  0 siblings, 2 replies; 15+ messages in thread
From: Harald Anlauf @ 2022-01-11 22:11 UTC (permalink / raw)
  To: FX; +Cc: gcc-patches, fortran

Hi FX,

Am 11.01.22 um 23:04 schrieb FX via Fortran:
> Hi Harald,
>
>> I think this patch breaks the testsuite
>
> On what platform? It regtested fine on x86_64-pc-linux-gnu

I looked at gcc-testresults and find e.g.

https://gcc.gnu.org/pipermail/gcc-testresults/2022-January/747938.html
https://gcc.gnu.org/pipermail/gcc-testresults/2022-January/747935.html

which is x86 (64 and 32 bit) by H.J.; plus some more.

Maybe H.J. can explain what is different from your platform?

>
>> since the directive
>> ! { dg-additional-sources signaling_1_c.c }
>> should rather read
>> ! { dg-additional-sources "signaling_1_c.c" }
>
> I find plenty of evidence saying it’s allowed (just quoting a few, but there are a lot):
>
> ./gfortran.dg/PR94331.f90:! { dg-additional-sources PR94331.c }
> ./gfortran.dg/global_vars_c_init.f90:! { dg-additional-sources global_vars_c_init_driver.c }
> ./gfortran.dg/c_char_tests.f03:! { dg-additional-sources c_char_driver.c }
>
>
> FX

Harald

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH] Fortran: make IEEE_CLASS recognize signaling NaNs
  2022-01-11 22:11     ` Harald Anlauf
@ 2022-01-11 22:11       ` Harald Anlauf
  2022-01-11 22:32       ` FX
  1 sibling, 0 replies; 15+ messages in thread
From: Harald Anlauf @ 2022-01-11 22:11 UTC (permalink / raw)
  To: fortran; +Cc: gcc-patches

Hi FX,

Am 11.01.22 um 23:04 schrieb FX via Fortran:
> Hi Harald,
> 
>> I think this patch breaks the testsuite
> 
> On what platform? It regtested fine on x86_64-pc-linux-gnu

I looked at gcc-testresults and find e.g.

https://gcc.gnu.org/pipermail/gcc-testresults/2022-January/747938.html
https://gcc.gnu.org/pipermail/gcc-testresults/2022-January/747935.html

which is x86 (64 and 32 bit) by H.J.; plus some more.

Maybe H.J. can explain what is different from your platform?

> 
>> since the directive
>> ! { dg-additional-sources signaling_1_c.c }
>> should rather read
>> ! { dg-additional-sources "signaling_1_c.c" }
> 
> I find plenty of evidence saying it’s allowed (just quoting a few, but there are a lot):
> 
> ./gfortran.dg/PR94331.f90:! { dg-additional-sources PR94331.c }
> ./gfortran.dg/global_vars_c_init.f90:! { dg-additional-sources global_vars_c_init_driver.c }
> ./gfortran.dg/c_char_tests.f03:! { dg-additional-sources c_char_driver.c }
> 
> 
> FX

Harald


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH] Fortran: make IEEE_CLASS recognize signaling NaNs
  2022-01-11 22:11     ` Harald Anlauf
  2022-01-11 22:11       ` Harald Anlauf
@ 2022-01-11 22:32       ` FX
  2022-01-12 10:23         ` FX
  1 sibling, 1 reply; 15+ messages in thread
From: FX @ 2022-01-11 22:32 UTC (permalink / raw)
  To: Harald Anlauf; +Cc: gcc-patches, fortran, hjl

Hi HJ,

> I looked at gcc-testresults and find e.g.
> 
> https://gcc.gnu.org/pipermail/gcc-testresults/2022-January/747938.html
> https://gcc.gnu.org/pipermail/gcc-testresults/2022-January/747935.html
> 
> which is x86 (64 and 32 bit) by H.J.; plus some more.
> Maybe H.J. can explain what is different from your platform?

Could you kindly look up what the log says for these failures on your boxes:

FAIL: gfortran.dg/ieee/signaling_1.f90   -O0  (test for excess errors)
UNRESOLVED: gfortran.dg/ieee/signaling_1.f90   -O0  compilation failed to produce executable

Somehow they did not seem to show up on my test machine. I’m launching a fresh bootstrap, but it will take a while.

FX

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH] Fortran: make IEEE_CLASS recognize signaling NaNs
  2022-01-11 22:32       ` FX
@ 2022-01-12 10:23         ` FX
  2022-01-12 10:34           ` Jakub Jelinek
  0 siblings, 1 reply; 15+ messages in thread
From: FX @ 2022-01-12 10:23 UTC (permalink / raw)
  To: gcc-patches; +Cc: Harald Anlauf, fortran, hjl.tools, schwab

[-- Attachment #1: Type: text/plain, Size: 1575 bytes --]

Hi,

I can confirm that I don’t see this failure on a Debian bullseye/sid (Linux 5.11.0-46, glibc 2.31-0ubuntu9.2) with a fresh bootstrap of master:

$ grep signaling testsuite/gfortran/gfortran.sum
PASS: gfortran.dg/ieee/signaling_1.f90   -O0  (test for excess errors)
PASS: gfortran.dg/ieee/signaling_1.f90   -O0  execution test
PASS: gfortran.dg/ieee/signaling_1.f90   -O1  (test for excess errors)
PASS: gfortran.dg/ieee/signaling_1.f90   -O1  execution test
PASS: gfortran.dg/ieee/signaling_1.f90   -O2  (test for excess errors)
PASS: gfortran.dg/ieee/signaling_1.f90   -O2  execution test
PASS: gfortran.dg/ieee/signaling_1.f90   -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions  (test for excess errors)
PASS: gfortran.dg/ieee/signaling_1.f90   -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions  execution test
PASS: gfortran.dg/ieee/signaling_1.f90   -O3 -g  (test for excess errors)
PASS: gfortran.dg/ieee/signaling_1.f90   -O3 -g  execution test
PASS: gfortran.dg/ieee/signaling_1.f90   -Os  (test for excess errors)
PASS: gfortran.dg/ieee/signaling_1.f90   -Os  execution test

It’s showing on some gcc-testresults for x86_64 and aarch64 linux, so I’ll need someone (HJ, Andreas are in CC) to show me what the error is.

It may be related to the use of dg-options instead of dg-additional-options in that testcase, so I pushed the attached fix. I’ll check the test results mailing-list to see if it improved things (or confirm when the error message is posted).

FX



[-- Attachment #2: test.patch --]
[-- Type: application/octet-stream, Size: 1187 bytes --]

commit 6b14100b9504800768da726dcb81f1857db3b493
Author: Francois-Xavier Coudert <fxcoudert@gmail.com>
Date:   2022-01-12 11:19:37 +0100

    Fortran: fix testcase compiler flags
    
    -fsignaling-nans is already passed by ieee.exp, so it's not needed.
    We must use dg-additional-options instead of dg-options, otherwise we
    override flags passed from ieee.exp. And we need to use -w because
    some options only make sense for the Fortran source.
    
    gcc/testsuite/ChangeLog:
    
            * gfortran.dg/ieee/signaling_1.f90: Adjust flags.

diff --git a/gcc/testsuite/gfortran.dg/ieee/signaling_1.f90 b/gcc/testsuite/gfortran.dg/ieee/signaling_1.f90
index a1403e6ce16..3d846fc1038 100644
--- a/gcc/testsuite/gfortran.dg/ieee/signaling_1.f90
+++ b/gcc/testsuite/gfortran.dg/ieee/signaling_1.f90
@@ -1,7 +1,9 @@
 ! { dg-do run }
 ! { dg-require-effective-target issignaling } */
 ! { dg-additional-sources signaling_1_c.c }
-! { dg-options "-fsignaling-nans" }
+! { dg-additional-options "-w" }
+! the -w option is needed to make f951 not report a warning for 
+! the -fintrinsic-modules-path option passed by ieee.exp
 !
 program test
   use, intrinsic :: iso_c_binding

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH] Fortran: make IEEE_CLASS recognize signaling NaNs
  2022-01-12 10:23         ` FX
@ 2022-01-12 10:34           ` Jakub Jelinek
  2022-01-12 11:03             ` FX
  0 siblings, 1 reply; 15+ messages in thread
From: Jakub Jelinek @ 2022-01-12 10:34 UTC (permalink / raw)
  To: FX; +Cc: gcc-patches, Harald Anlauf, fortran, schwab

On Wed, Jan 12, 2022 at 11:23:43AM +0100, FX via Gcc-patches wrote:
> I can confirm that I don’t see this failure on a Debian bullseye/sid (Linux 5.11.0-46, glibc 2.31-0ubuntu9.2) with a fresh bootstrap of master:
> 
> $ grep signaling testsuite/gfortran/gfortran.sum
> PASS: gfortran.dg/ieee/signaling_1.f90   -O0  (test for excess errors)
> PASS: gfortran.dg/ieee/signaling_1.f90   -O0  execution test
> PASS: gfortran.dg/ieee/signaling_1.f90   -O1  (test for excess errors)
> PASS: gfortran.dg/ieee/signaling_1.f90   -O1  execution test
> PASS: gfortran.dg/ieee/signaling_1.f90   -O2  (test for excess errors)
> PASS: gfortran.dg/ieee/signaling_1.f90   -O2  execution test
> PASS: gfortran.dg/ieee/signaling_1.f90   -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions  (test for excess errors)
> PASS: gfortran.dg/ieee/signaling_1.f90   -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions  execution test
> PASS: gfortran.dg/ieee/signaling_1.f90   -O3 -g  (test for excess errors)
> PASS: gfortran.dg/ieee/signaling_1.f90   -O3 -g  execution test
> PASS: gfortran.dg/ieee/signaling_1.f90   -Os  (test for excess errors)
> PASS: gfortran.dg/ieee/signaling_1.f90   -Os  execution test

The error I was getting was:
/home/jakub/src/gcc/obj46/gcc/testsuite/gfortran2/../../gfortran -B/home/jakub/src/gcc/obj46/gcc/testsuite/gfortran2/../../ -B/home/jakub/src/gcc/obj46/x86_64-pc
-linux-gnu/./libgfortran/ /home/jakub/src/gcc/gcc/testsuite/gfortran.dg/ieee/signaling_1.f90 -fdiagnostics-plain-output -fdiagnostics-plain-output -O1 -fsignaling-nans /home/jakub/sr
c/gcc/gcc/testsuite/gfortran.dg/ieee/signaling_1_c.c -dumpbase  -B/home/jakub/src/gcc/obj46/x86_64-pc-linux-gnu/./libgfortran/.libs -L/home/jakub/src/gcc/obj46/x86_64-pc-linux-gnu/./
libgfortran/.libs -L/home/jakub/src/gcc/obj46/x86_64-pc-linux-gnu/./libgfortran/.libs -L/home/jakub/src/gcc/obj46/x86_64-pc-linux-gnu/./libatomic/.libs -B/home/jakub/src/gcc/obj46/x8
6_64-pc-linux-gnu/./libquadmath/.libs -L/home/jakub/src/gcc/obj46/x86_64-pc-linux-gnu/./libquadmath/.libs -L/home/jakub/src/gcc/obj46/x86_64-pc-linux-gnu/./libquadmath/.libs -lm -o .
/signaling_1.exe
/home/jakub/src/gcc/gcc/testsuite/gfortran.dg/ieee/signaling_1.f90:8:20: Fatal Error: Cannot find an intrinsic module named 'ieee_arithmetic' at (1)
compilation terminated.
compiler exited with status 1
FAIL: gfortran.dg/ieee/signaling_1.f90   -O1  (test for excess errors)
Excess errors:
/home/jakub/src/gcc/gcc/testsuite/gfortran.dg/ieee/signaling_1.f90:8:20: Fatal Error: Cannot find an intrinsic module named 'ieee_arithmetic' at (1)
compilation terminated.

UNRESOLVED: gfortran.dg/ieee/signaling_1.f90   -O1  compilation failed to produce executable
And
-! { dg-options "-fsignaling-nans" }
+! { dg-additional-options "-fsignaling-nans" }
doesn't fix it, it changes the FAIL into:
cc1: warning: command-line option '-fintrinsic-modules-path /home/jakub/src/gcc/obj46/x86_64-pc-linux-gnu/./libgfortran/' is valid for Fortran but not for C
FAIL: gfortran.dg/ieee/signaling_1.f90   -O1  (test for excess errors)
Excess errors:
cc1: warning: command-line option '-fintrinsic-modules-path /home/jakub/src/gcc/obj46/x86_64-pc-linux-gnu/./libgfortran/' is valid for Fortran but not for C

We need -fintrinsic-modules-path option for the signalling_1.f90 compilation
but need to make sure it isn't used when the *.c file is compiled, so they
need to be compiled by separate compiler invocations probably.

	Jakub


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH] Fortran: make IEEE_CLASS recognize signaling NaNs
  2022-01-12 10:34           ` Jakub Jelinek
@ 2022-01-12 11:03             ` FX
  2022-01-12 11:06               ` Jakub Jelinek
  0 siblings, 1 reply; 15+ messages in thread
From: FX @ 2022-01-12 11:03 UTC (permalink / raw)
  To: Jakub Jelinek; +Cc: gcc-patches, Harald Anlauf, fortran, schwab

Hi Jakub,

> We need -fintrinsic-modules-path option for the signalling_1.f90 compilation
> but need to make sure it isn't used when the *.c file is compiled, so they
> need to be compiled by separate compiler invocations probably.

Thanks for posting the errors! So I wasn’t seeing it because I had run “make install” before the testsuite. The patch I pushed at https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=6b14100b9504800768da726dcb81f1857db3b493 should fix the failure, then.

FX

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH] Fortran: make IEEE_CLASS recognize signaling NaNs
  2022-01-12 11:03             ` FX
@ 2022-01-12 11:06               ` Jakub Jelinek
  2022-01-12 11:55                 ` FX
  0 siblings, 1 reply; 15+ messages in thread
From: Jakub Jelinek @ 2022-01-12 11:06 UTC (permalink / raw)
  To: FX; +Cc: gcc-patches, Harald Anlauf, fortran, schwab

On Wed, Jan 12, 2022 at 12:03:40PM +0100, FX wrote:
> > We need -fintrinsic-modules-path option for the signalling_1.f90 compilation
> > but need to make sure it isn't used when the *.c file is compiled, so they
> > need to be compiled by separate compiler invocations probably.
> 
> Thanks for posting the errors!  So I wasn’t seeing it because I had run
> “make install” before the testsuite.  The patch I pushed at
> https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=6b14100b9504800768da726dcb81f1857db3b493
> should fix the failure, then.

Thanks.  Just a nit, it is cc1 that reports the warning, not f951.

	Jakub


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH] Fortran: make IEEE_CLASS recognize signaling NaNs
  2022-01-12 11:06               ` Jakub Jelinek
@ 2022-01-12 11:55                 ` FX
  0 siblings, 0 replies; 15+ messages in thread
From: FX @ 2022-01-12 11:55 UTC (permalink / raw)
  To: Jakub Jelinek; +Cc: gcc-patches, Harald Anlauf, fortran, schwab

> Thanks.  Just a nit, it is cc1 that reports the warning, not f951.

I confirm the patch fixes the testcase failure. And I fixed the comment in a follow-up commit.

Thanks!

FX

^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2022-01-12 11:55 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-01-02 10:50 [PATCH] Fortran: make IEEE_CLASS recognize signaling NaNs FX
2022-01-09 10:52 ` FX
2022-01-09 19:34   ` Mikael Morin
2022-01-10 12:04     ` FX
2022-01-11 22:01 ` Harald Anlauf
2022-01-11 22:01   ` Harald Anlauf
2022-01-11 22:04   ` FX
2022-01-11 22:11     ` Harald Anlauf
2022-01-11 22:11       ` Harald Anlauf
2022-01-11 22:32       ` FX
2022-01-12 10:23         ` FX
2022-01-12 10:34           ` Jakub Jelinek
2022-01-12 11:03             ` FX
2022-01-12 11:06               ` Jakub Jelinek
2022-01-12 11:55                 ` FX

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