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:
parent
e3cbb8c66c
commit
cb48166e52
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user