2 ! { dg-additional-options "-ffree-line-length-none" }
4 ! Use dg-additional-options rather than dg-options to avoid overwriting the
5 ! default IEEE options which are passed by ieee.exp and necessary.
7 use ieee_features, only : ieee_datatype, ieee_denormal, ieee_divide, &
8 ieee_halting, ieee_inexact_flag, ieee_inf, ieee_invalid_flag, &
9 ieee_nan, ieee_rounding, ieee_sqrt, ieee_underflow_flag
14 type(ieee_flag_type), parameter :: x(5) = &
15 [ IEEE_INVALID, IEEE_OVERFLOW, IEEE_DIVIDE_BY_ZERO, &
16 IEEE_UNDERFLOW, IEEE_INEXACT ]
17 logical :: l(5) = .false.
20 #define FLAGS_STRING(S) \
21 call ieee_get_flag(x, l) ; \
22 write(S,"(5(A1))") merge(["I","O","Z","U","P"],[" "," "," "," "," "],l)
24 #define CHECK_FLAGS(expected) \
26 if (s /= expected) then ; \
27 write (*,"(A,I0,A,A)") "Flags at line ", __LINE__, ": ", s ; \
33 double precision, volatile :: dx
35 ! This file tests IEEE_SET_FLAG and IEEE_GET_FLAG
39 ! Initial flags are all off
42 ! Check we can clear them
43 call ieee_set_flag(ieee_all, .false.)
46 ! Raise invalid, then clear
50 call ieee_set_flag(ieee_all, .false.)
53 ! Raise overflow and precision
59 ! Also raise divide-by-zero
65 call ieee_set_flag([ieee_overflow,ieee_inexact,&
66 ieee_divide_by_zero],[.false.,.false.,.true.])
68 call ieee_set_flag(ieee_divide_by_zero, .false.)
78 call ieee_set_flag(ieee_all, .true.)
82 call ieee_set_flag(ieee_all, .false.)
87 ! Initial flags are all off
90 ! Check we can clear them
91 call ieee_set_flag(ieee_all, .false.)
94 ! Raise invalid, then clear
98 call ieee_set_flag(ieee_all, .false.)
101 ! Raise overflow and precision
107 ! Also raise divide-by-zero
113 call ieee_set_flag([ieee_overflow,ieee_inexact,&
114 ieee_divide_by_zero],[.false.,.false.,.true.])
116 call ieee_set_flag(ieee_divide_by_zero, .false.)
126 call ieee_set_flag(ieee_all, .true.)
130 call ieee_set_flag(ieee_all, .false.)
135 subroutine check_flag_sub
137 logical :: l(5) = .false.
138 type(ieee_flag_type), parameter :: x(5) = &
139 [ IEEE_INVALID, IEEE_OVERFLOW, IEEE_DIVIDE_BY_ZERO, &
140 IEEE_UNDERFLOW, IEEE_INEXACT ]
141 call ieee_get_flag(x, l)
144 print *, "Flags not cleared in subroutine"