Fortran: Fix test on targets without REAL128

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.
This commit is contained in:
Francois-Xavier Coudert 2021-12-31 23:19:03 +01:00
parent e3cbb8c66c
commit cb48166e52

View 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