Skip to content

Commit

Permalink
Revert "[flang] IEEE_ARITHMETIC must imply USE IEEE_EXCEPTIONS"
Browse files Browse the repository at this point in the history
This reverts commit b6a7600. It caused
the following build failure:
```
ninja: error: dependency cycle: include/flang/__fortran_ieee_exceptions.mod -> include/flang/__fortran_ieee_exceptions.mod
```

See e.g.:
* https://lab.llvm.org/buildbot/#/builders/172/builds/9595

To reproduce:
```
cmake -G Ninja \
  -DLLVM_TARGETS_TO_BUILD=host \
  -DCMAKE_BUILD_TYPE=Release \
  -DLLVM_ENABLE_PROJECTS="clang;flang" \
  ../../llvm
ninja check-flang
```
  • Loading branch information
banach-space committed Mar 14, 2022
1 parent a44aeab commit 75d74d9
Show file tree
Hide file tree
Showing 5 changed files with 116 additions and 142 deletions.
3 changes: 1 addition & 2 deletions flang/lib/Semantics/check-do-forall.cpp
Expand Up @@ -279,8 +279,7 @@ class DoConcurrentBodyEnforce {
" CONCURRENT"_err_en_US,
doConcurrentSourcePosition_);
}
if (name->symbol &&
fromScope(*name->symbol, "__fortran_ieee_exceptions"s)) {
if (name->symbol && fromScope(*name->symbol, "ieee_exceptions"s)) {
if (name->source == "ieee_set_halting_mode") {
SayWithDo(context_, currentStatementSourcePosition_,
"IEEE_SET_HALTING_MODE is not allowed in DO "
Expand Down
129 changes: 0 additions & 129 deletions flang/module/__fortran_ieee_exceptions.f90

This file was deleted.

5 changes: 0 additions & 5 deletions flang/module/ieee_arithmetic.f90
Expand Up @@ -29,11 +29,6 @@ module ieee_arithmetic
ieee_support_subnormal => __builtin_ieee_support_subnormal, &
ieee_support_underflow_control => __builtin_ieee_support_underflow_control

! 17.1: "The module IEEE_ARITHMETIC behaves as if it contained a USE statement
! for IEEE_EXCEPTIONS; everything that is public in IEEE_EXCEPTIONS is public
! in IEEE_ARITHMETIC."
use __Fortran_ieee_exceptions

implicit none

type :: ieee_class_type
Expand Down
116 changes: 115 additions & 1 deletion flang/module/ieee_exceptions.f90
Expand Up @@ -6,6 +6,120 @@
!
!===------------------------------------------------------------------------===!

! See Fortran 2018, clause 17
module ieee_exceptions
use __Fortran_ieee_exceptions

type :: ieee_flag_type ! Fortran 2018, 17.2 & 17.3
private
integer(kind=1) :: flag = 0
end type ieee_flag_type

type(ieee_flag_type), parameter :: &
ieee_invalid = ieee_flag_type(1), &
ieee_overflow = ieee_flag_type(2), &
ieee_divide_by_zero = ieee_flag_type(4), &
ieee_underflow = ieee_flag_type(8), &
ieee_inexact = ieee_flag_type(16), &
ieee_denorm = ieee_flag_type(32) ! PGI extension

type(ieee_flag_type), parameter :: &
ieee_usual(*) = [ &
ieee_overflow, ieee_divide_by_zero, ieee_invalid ], &
ieee_all(*) = [ &
ieee_usual, ieee_underflow, ieee_inexact, ieee_denorm ]

type :: ieee_modes_type ! Fortran 2018, 17.7
private
end type ieee_modes_type

type :: ieee_status_type ! Fortran 2018, 17.7
private
end type ieee_status_type

private :: ieee_support_flag_2, ieee_support_flag_3, &
ieee_support_flag_4, ieee_support_flag_8, ieee_support_flag_10, &
ieee_support_flag_16
interface ieee_support_flag
module procedure :: ieee_support_flag, &
ieee_support_flag_2, ieee_support_flag_3, &
ieee_support_flag_4, ieee_support_flag_8, ieee_support_flag_10, &
ieee_support_flag_16
end interface

contains
elemental subroutine ieee_get_flag(flag, flag_value)
type(ieee_flag_type), intent(in) :: flag
logical, intent(out) :: flag_value
end subroutine ieee_get_flag

elemental subroutine ieee_get_halting_mode(flag, halting)
type(ieee_flag_type), intent(in) :: flag
logical, intent(out) :: halting
end subroutine ieee_get_halting_mode

subroutine ieee_get_modes(modes)
type(ieee_modes_type), intent(out) :: modes
end subroutine ieee_get_modes

subroutine ieee_get_status(status)
type(ieee_status_type), intent(out) :: status
end subroutine ieee_get_status

pure subroutine ieee_set_flag(flag, flag_value)
type(ieee_flag_type), intent(in) :: flag
logical, intent(in) :: flag_value
end subroutine ieee_set_flag

pure subroutine ieee_set_halting_mode(flag, halting)
type(ieee_flag_type), intent(in) :: flag
logical, intent(in) :: halting
end subroutine ieee_set_halting_mode

subroutine ieee_set_modes(modes)
type(ieee_modes_type), intent(in) :: modes
end subroutine ieee_set_modes

subroutine ieee_set_status(status)
type(ieee_status_type), intent(in) :: status
end subroutine ieee_set_status

pure logical function ieee_support_flag(flag)
type(ieee_flag_type), intent(in) :: flag
ieee_support_flag = .true.
end function
pure logical function ieee_support_flag_2(flag, x)
type(ieee_flag_type), intent(in) :: flag
real(kind=2), intent(in) :: x(..)
ieee_support_flag_2 = .true.
end function
pure logical function ieee_support_flag_3(flag, x)
type(ieee_flag_type), intent(in) :: flag
real(kind=3), intent(in) :: x(..)
ieee_support_flag_3 = .true.
end function
pure logical function ieee_support_flag_4(flag, x)
type(ieee_flag_type), intent(in) :: flag
real(kind=4), intent(in) :: x(..)
ieee_support_flag_4 = .true.
end function
pure logical function ieee_support_flag_8(flag, x)
type(ieee_flag_type), intent(in) :: flag
real(kind=8), intent(in) :: x(..)
ieee_support_flag_8 = .true.
end function
pure logical function ieee_support_flag_10(flag, x)
type(ieee_flag_type), intent(in) :: flag
real(kind=10), intent(in) :: x(..)
ieee_support_flag_10 = .true.
end function
pure logical function ieee_support_flag_16(flag, x)
type(ieee_flag_type), intent(in) :: flag
real(kind=16), intent(in) :: x(..)
ieee_support_flag_16 = .true.
end function

pure logical function ieee_support_halting(flag)
type(ieee_flag_type), intent(in) :: flag
end function ieee_support_halting

end module ieee_exceptions
5 changes: 0 additions & 5 deletions flang/tools/f18/CMakeLists.txt
Expand Up @@ -6,7 +6,6 @@ set(LLVM_LINK_COMPONENTS

set(MODULES
"__fortran_builtins"
"__fortran_ieee_exceptions"
"__fortran_type_info"
"ieee_arithmetic"
"ieee_exceptions"
Expand All @@ -28,10 +27,6 @@ foreach(filename ${MODULES})
if(NOT ${filename} MATCHES "__fortran_type_info")
set(depends ${FLANG_INTRINSIC_MODULES_DIR}/__fortran_type_info.mod)
endif()
if(${filename} MATCHES "ieee_arithmetic" OR
${filename} MATCHES "ieee_exceptions")
set(depends ${FLANG_INTRINSIC_MODULES_DIR}/__fortran_ieee_exceptions.mod)
endif()
endif()
add_custom_command(OUTPUT ${base}.mod
COMMAND ${CMAKE_COMMAND} -E make_directory ${FLANG_INTRINSIC_MODULES_DIR}
Expand Down

0 comments on commit 75d74d9

Please sign in to comment.