! { 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 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 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 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 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