]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Fortran: Fix test on targets without REAL128
authorFrancois-Xavier Coudert <fxcoudert@gmail.com>
Fri, 31 Dec 2021 22:19:03 +0000 (23:19 +0100)
committerFrancois-Xavier Coudert <fxcoudert@gmail.com>
Fri, 31 Dec 2021 22:19:34 +0000 (23:19 +0100)
REAL128 is a named constant, so we cannot simply use
(REAL128 > 0) to conditionally compile for targets with
REAL128.

gcc/testsuite/ChangeLog:

PR fortran/89639
* gfortran.dg/ieee/ieee_9.f90: Adjust test for targets without
REAL128.

gcc/testsuite/gfortran.dg/ieee/ieee_9.f90

index 5e0ac36f028d349ae6000415ce164f66a16974ea..e5935ecd702166cc05fcf4843d7c1da9ab2ddc9c 100644 (file)
@@ -1,71 +1,45 @@
-! { dg-do run { xfail arm*-*-gnueabi arm*-*-gnueabihf } }
-! { dg-skip-if "PR89639" { hppa*-*-linux* } }
+! { dg-do run }
 program foo
    use ieee_arithmetic
    use iso_fortran_env
+   implicit none
+
+   ! This allows us to test REAL128 if it exists, and still compile
+   ! on platforms were it is not present
+   ! https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89639
+   integer, parameter :: large = merge(real128, real64, real128 > 0)
+
    integer i, p
    real x
    x = 4
    i = 4
 
-   if (int8 > 0) then
-      if (real32 > 0) then
-         p = int(ieee_scalb(real(x, real32), int(i, int8)))
-         if (p /= 64) stop 1
-      endif
-      if (real64 > 0) then
-         p = int(ieee_scalb(real(x, real64), int(i, int8)))
-         if (p /= 64) stop 2
-      endif
-      if (real128 > 0) then
-         p = int(ieee_scalb(real(x, real128), int(i, int8)))
-         if (p /= 64) stop 3
-      end if
-   end if
+   p = int(ieee_scalb(real(x, real32), int(i, int8)))
+   if (p /= 64) stop 1
+   p = int(ieee_scalb(real(x, real64), int(i, int8)))
+   if (p /= 64) stop 2
+   p = int(ieee_scalb(real(x, large), int(i, int8)))
+   if (p /= 64) stop 3
 
-   if (int16 > 0) then
-      if (real32 > 0) then
-         p = int(ieee_scalb(real(x, real32), int(i, int16)))
-         if (p /= 64) stop 4
-      endif
-      if (real64 > 0) then
-         p = int(ieee_scalb(real(x, real64), int(i, int16)))
-         if (p /= 64) stop 5
-      endif
-      if (real128 > 0) then
-         p = int(ieee_scalb(real(x, real128), int(i, int16)))
-         if (p /= 64) stop 6
-      end if
-   end if
+   p = int(ieee_scalb(real(x, real32), int(i, int16)))
+   if (p /= 64) stop 4
+   p = int(ieee_scalb(real(x, real64), int(i, int16)))
+   if (p /= 64) stop 5
+   p = int(ieee_scalb(real(x, large), int(i, int16)))
+   if (p /= 64) stop 6
 
-   if (int32 > 0) then
-      if (real32 > 0) then
-         p = int(ieee_scalb(real(x, real32), int(i, int32)))
-         if (p /= 64) stop 7
-      endif
-      if (real64 > 0) then
-         p = int(ieee_scalb(real(x, real64), int(i, int32)))
-         if (p /= 64) stop 8
-      endif
-      if (real128 > 0) then
-         p = int(ieee_scalb(real(x, real128), int(i, int32)))
-         if (p /= 64) stop 9
-      end if
-   end if
+   p = int(ieee_scalb(real(x, real32), int(i, int32)))
+   if (p /= 64) stop 7
+   p = int(ieee_scalb(real(x, real64), int(i, int32)))
+   if (p /= 64) stop 8
+   p = int(ieee_scalb(real(x, large), int(i, int32)))
+   if (p /= 64) stop 9
 
-   if (int64 > 0) then
-      if (real32 > 0) then
-         p = int(ieee_scalb(real(x, real32), int(i, int64)))
-         if (p /= 64) stop 10
-      endif
-      if (real64 > 0) then
-         p = int(ieee_scalb(real(x, real64), int(i, int64)))
-         if (p /= 64) stop 11
-      endif
-      if (real128 > 0) then
-         p = int(ieee_scalb(real(x, real128), int(i, int64)))
-         if (p /= 64) stop 12
-      end if
-   end if
+   p = int(ieee_scalb(real(x, real32), int(i, int64)))
+   if (p /= 64) stop 10
+   p = int(ieee_scalb(real(x, real64), int(i, int64)))
+   if (p /= 64) stop 11
+   p = int(ieee_scalb(real(x, large), int(i, int64)))
+   if (p /= 64) stop 12
 
 end program foo