[llvm] [Flang-RT] Remerge iso_fortran_env and iso_fortran_env_impl (PR #169525)
Michael Kruse via llvm-commits
llvm-commits at lists.llvm.org
Tue Nov 25 09:04:43 PST 2025
https://github.com/Meinersbur created https://github.com/llvm/llvm-project/pull/169525
PR #95388 split the former `iso_fortran_env.f90` into a file for emitting the .mod (current `iso_fortran_env.f90`) and another file for emitting the object file (`iso_fortran_env_impl.f90`). The separation becomes unecessary with #137828 such that we can undo the workaround again.
>From 7364386cd572fb62869c7d5ada2b99f8ff918d70 Mon Sep 17 00:00:00 2001
From: Michael Kruse <llvm-project at meinersbur.de>
Date: Tue, 25 Nov 2025 17:34:35 +0100
Subject: [PATCH] Undo split of iso_fortran_env and iso_fortran_env_impl
---
flang-rt/lib/runtime/CMakeLists.txt | 1 -
flang-rt/lib/runtime/iso_fortran_env.f90 | 155 +++++++++++++-----
flang-rt/lib/runtime/iso_fortran_env_impl.f90 | 144 ----------------
3 files changed, 117 insertions(+), 183 deletions(-)
delete mode 100644 flang-rt/lib/runtime/iso_fortran_env_impl.f90
diff --git a/flang-rt/lib/runtime/CMakeLists.txt b/flang-rt/lib/runtime/CMakeLists.txt
index a678055430233..f96ba2f4553a2 100644
--- a/flang-rt/lib/runtime/CMakeLists.txt
+++ b/flang-rt/lib/runtime/CMakeLists.txt
@@ -87,7 +87,6 @@ set(host_sources
ieee_exceptions.f90
ieee_features.f90
iso_c_binding.f90
- iso_fortran_env_impl.f90
iso_fortran_env.f90
command.cpp
diff --git a/flang-rt/lib/runtime/iso_fortran_env.f90 b/flang-rt/lib/runtime/iso_fortran_env.f90
index 3729b95a339f3..a43dcbd3534b5 100644
--- a/flang-rt/lib/runtime/iso_fortran_env.f90
+++ b/flang-rt/lib/runtime/iso_fortran_env.f90
@@ -8,7 +8,7 @@
! See Fortran 2023, subclause 16.10.2
-#include '../include/flang/Runtime/magic-numbers.h'
+#include '../../../flang/include/flang/Runtime/magic-numbers.h'
module iso_fortran_env
@@ -22,26 +22,6 @@ module iso_fortran_env
compiler_options => __builtin_compiler_options, &
compiler_version => __builtin_compiler_version
- use iso_fortran_env_impl, only: &
- selectedInt8, selectedInt16, selectedInt32, selectedInt64, selectedInt128, &
- safeInt8, safeInt16, safeInt32, safeInt64, safeInt128, &
- int8, int16, int32, int64, int128, &
- selectedUInt8, selectedUInt16, selectedUInt32, selectedUInt64, selectedUInt128, &
- safeUInt8, safeUInt16, safeUInt32, safeUInt64, safeUInt128, &
- uint8, uint16, uint32, uint64, uint128, &
- logical8, logical16, logical32, logical64, &
- selectedReal16, selectedBfloat16, selectedReal32, &
- selectedReal64, selectedReal80, selectedReal64x2, &
- selectedReal128, &
- safeReal16, safeBfloat16, safeReal32, &
- safeReal64, safeReal80, safeReal64x2, &
- safeReal128, &
- real16, bfloat16, real32, real64, &
- real80, real64x2, real128, &
- integer_kinds => __builtin_integer_kinds, &
- real_kinds => __builtin_real_kinds, &
- logical_kinds => __builtin_logical_kinds
-
implicit none
private
@@ -58,26 +38,125 @@ module iso_fortran_env
pack([selectedUCS_2], selectedUCS_2 >= 0), &
pack([selectedUnicode], selectedUnicode >= 0)]
- public :: selectedInt8, selectedInt16, selectedInt32, selectedInt64, selectedInt128, &
- safeInt8, safeInt16, safeInt32, safeInt64, safeInt128, &
- int8, int16, int32, int64, int128
-
- public :: selectedUInt8, selectedUInt16, selectedUInt32, selectedUInt64, selectedUInt128, &
- safeUInt8, safeUInt16, safeUInt32, safeUInt64, safeUInt128, &
- uint8, uint16, uint32, uint64, uint128
+ integer, parameter :: &
+ selectedInt8 = selected_int_kind(2), &
+ selectedInt16 = selected_int_kind(4), &
+ selectedInt32 = selected_int_kind(9), &
+ selectedInt64 = selected_int_kind(18),&
+ selectedInt128 = selected_int_kind(38), &
+ safeInt8 = merge(selectedInt8, selected_int_kind(0), &
+ selectedInt8 >= 0), &
+ safeInt16 = merge(selectedInt16, selected_int_kind(0), &
+ selectedInt16 >= 0), &
+ safeInt32 = merge(selectedInt32, selected_int_kind(0), &
+ selectedInt32 >= 0), &
+ safeInt64 = merge(selectedInt64, selected_int_kind(0), &
+ selectedInt64 >= 0), &
+ safeInt128 = merge(selectedInt128, selected_int_kind(0), &
+ selectedInt128 >= 0)
+ integer, parameter, public :: &
+ int8 = merge(selectedInt8, merge(-2, -1, selectedInt8 >= 0), &
+ digits(int(0,kind=safeInt8)) == 7), &
+ int16 = merge(selectedInt16, merge(-2, -1, selectedInt16 >= 0), &
+ digits(int(0,kind=safeInt16)) == 15), &
+ int32 = merge(selectedInt32, merge(-2, -1, selectedInt32 >= 0), &
+ digits(int(0,kind=safeInt32)) == 31), &
+ int64 = merge(selectedInt64, merge(-2, -1, selectedInt64 >= 0), &
+ digits(int(0,kind=safeInt64)) == 63), &
+ int128 = merge(selectedInt128, merge(-2, -1, selectedInt128 >= 0), &
+ digits(int(0,kind=safeInt128)) == 127)
+
+ ! UNSIGNED types
+ integer, parameter, public :: &
+ selectedUInt8 = selected_unsigned_kind(2), &
+ selectedUInt16 = selected_unsigned_kind(4), &
+ selectedUInt32 = selected_unsigned_kind(9), &
+ selectedUInt64 = selected_unsigned_kind(18),&
+ selectedUInt128 = selected_unsigned_kind(38), &
+ safeUInt8 = merge(selectedUInt8, selected_unsigned_kind(0), &
+ selectedUInt8 >= 0), &
+ safeUInt16 = merge(selectedUInt16, selected_unsigned_kind(0), &
+ selectedUInt16 >= 0), &
+ safeUInt32 = merge(selectedUInt32, selected_unsigned_kind(0), &
+ selectedUInt32 >= 0), &
+ safeUInt64 = merge(selectedUInt64, selected_unsigned_kind(0), &
+ selectedUInt64 >= 0), &
+ safeUInt128 = merge(selectedUInt128, selected_unsigned_kind(0), &
+ selectedUInt128 >= 0)
- public :: logical8, logical16, logical32, logical64
+ integer, parameter, public :: &
+ uint8 = merge(selectedUInt8, merge(-2, -1, selectedUInt8 >= 0), &
+ digits(uint(0,kind=safeUInt8)) == 8), &
+ uint16 = merge(selectedUInt16, merge(-2, -1, selectedUInt16 >= 0), &
+ digits(uint(0,kind=safeUInt16)) == 16), &
+ uint32 = merge(selectedUInt32, merge(-2, -1, selectedUInt32 >= 0), &
+ digits(uint(0,kind=safeUInt32)) == 32), &
+ uint64 = merge(selectedUInt64, merge(-2, -1, selectedUInt64 >= 0), &
+ digits(uint(0,kind=safeUInt64)) == 64), &
+ uint128 = merge(selectedUInt128, merge(-2, -1, selectedUInt128 >= 0), &
+ digits(uint(0,kind=safeUInt128)) == 128)
+
+ integer, parameter, public :: integer_kinds(*) = [ &
+ selected_int_kind(0), &
+ [(pack([selected_int_kind(k)], &
+ selected_int_kind(k) >= 0 .and. &
+ selected_int_kind(k) /= selected_int_kind(k-1)), &
+ integer :: k=1, 39)]]
- public :: selectedReal16, selectedBfloat16, selectedReal32, &
- selectedReal64, selectedReal80, selectedReal64x2, &
- selectedReal128, &
- safeReal16, safeBfloat16, safeReal32, &
- safeReal64, safeReal80, safeReal64x2, &
- safeReal128, &
- real16, bfloat16, real32, real64, &
- real80, real64x2, real128
+ integer, parameter, public :: &
+ logical8 = int8, logical16 = int16, logical32 = int32, logical64 = int64
+ integer, parameter, public :: logical_kinds(*) = [ &
+ pack([logical8], logical8 >= 0), &
+ pack([logical16], logical16 >= 0), &
+ pack([logical32], logical32 >= 0), &
+ pack([logical64], logical64 >= 0)]
- public :: integer_kinds, real_kinds, logical_kinds
+ integer, parameter :: &
+ selectedReal16 = selected_real_kind(3, 4), & ! IEEE half
+ selectedBfloat16 = selected_real_kind(2, 37), & ! truncated IEEE single
+ selectedReal32 = selected_real_kind(6, 37), & ! IEEE single
+ selectedReal64 = selected_real_kind(15, 307), & ! IEEE double
+ selectedReal80 = selected_real_kind(18, 4931), & ! 80x87 extended
+ selectedReal64x2 = selected_real_kind(31, 307), & ! "double-double"
+ selectedReal128 = selected_real_kind(33, 4931), & ! IEEE quad
+ safeReal16 = merge(selectedReal16, selected_real_kind(0,0), &
+ selectedReal16 >= 0), &
+ safeBfloat16 = merge(selectedBfloat16, selected_real_kind(0,0), &
+ selectedBfloat16 >= 0), &
+ safeReal32 = merge(selectedReal32, selected_real_kind(0,0), &
+ selectedReal32 >= 0), &
+ safeReal64 = merge(selectedReal64, selected_real_kind(0,0), &
+ selectedReal64 >= 0), &
+ safeReal80 = merge(selectedReal80, selected_real_kind(0,0), &
+ selectedReal80 >= 0), &
+ safeReal64x2 = merge(selectedReal64x2, selected_real_kind(0,0), &
+ selectedReal64x2 >= 0), &
+ safeReal128 = merge(selectedReal128, selected_real_kind(0,0), &
+ selectedReal128 >= 0)
+ integer, parameter, public :: &
+ real16 = merge(selectedReal16, merge(-2, -1, selectedReal16 >= 0), &
+ digits(real(0,kind=safeReal16)) == 11), &
+ bfloat16 = merge(selectedBfloat16, merge(-2, -1, selectedBfloat16 >= 0), &
+ digits(real(0,kind=safeBfloat16)) == 8), &
+ real32 = merge(selectedReal32, merge(-2, -1, selectedReal32 >= 0), &
+ digits(real(0,kind=safeReal32)) == 24), &
+ real64 = merge(selectedReal64, merge(-2, -1, selectedReal64 >= 0), &
+ digits(real(0,kind=safeReal64)) == 53), &
+ real80 = merge(selectedReal80, merge(-2, -1, selectedReal80 >= 0), &
+ digits(real(0,kind=safeReal80)) == 64), &
+ real64x2 = merge(selectedReal64x2, merge(-2, -1, selectedReal64x2 >= 0), &
+ digits(real(0,kind=safeReal64x2)) == 106), &
+ real128 = merge(selectedReal128, merge(-2, -1, selectedReal128 >= 0), &
+ digits(real(0,kind=safeReal128)) == 113)
+
+ integer, parameter, public :: real_kinds(*) = [ &
+ pack([real16], real16 >= 0), &
+ pack([bfloat16], bfloat16 >= 0), &
+ pack([real32], real32 >= 0), &
+ pack([real64], real64 >= 0), &
+ pack([real80], real80 >= 0), &
+ pack([real64x2], real64x2 >= 0), &
+ pack([real128], real128 >= 0)]
integer, parameter, public :: current_team = -1, &
initial_team = -2, &
diff --git a/flang-rt/lib/runtime/iso_fortran_env_impl.f90 b/flang-rt/lib/runtime/iso_fortran_env_impl.f90
deleted file mode 100644
index 5408e7de37001..0000000000000
--- a/flang-rt/lib/runtime/iso_fortran_env_impl.f90
+++ /dev/null
@@ -1,144 +0,0 @@
-!===-- module/iso_fortran_env_impl.f90 --=--------------------------------===!
-!
-! Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-! See https://llvm.org/LICENSE.txt for license information.
-! SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-!
-!===------------------------------------------------------------------------===!
-
-! This MODULE implements part of the ISO_FORTRAN_ENV module file, which
-! partially requires linkable symbols for some entities defined
-! (e.g., real_kinds).
-
-module iso_fortran_env_impl
- implicit none
- private
-
- ! INTEGER types
- integer, parameter, public :: &
- selectedInt8 = selected_int_kind(2), &
- selectedInt16 = selected_int_kind(4), &
- selectedInt32 = selected_int_kind(9), &
- selectedInt64 = selected_int_kind(18),&
- selectedInt128 = selected_int_kind(38), &
- safeInt8 = merge(selectedInt8, selected_int_kind(0), &
- selectedInt8 >= 0), &
- safeInt16 = merge(selectedInt16, selected_int_kind(0), &
- selectedInt16 >= 0), &
- safeInt32 = merge(selectedInt32, selected_int_kind(0), &
- selectedInt32 >= 0), &
- safeInt64 = merge(selectedInt64, selected_int_kind(0), &
- selectedInt64 >= 0), &
- safeInt128 = merge(selectedInt128, selected_int_kind(0), &
- selectedInt128 >= 0)
-
- integer, parameter, public :: &
- int8 = merge(selectedInt8, merge(-2, -1, selectedInt8 >= 0), &
- digits(int(0,kind=safeInt8)) == 7), &
- int16 = merge(selectedInt16, merge(-2, -1, selectedInt16 >= 0), &
- digits(int(0,kind=safeInt16)) == 15), &
- int32 = merge(selectedInt32, merge(-2, -1, selectedInt32 >= 0), &
- digits(int(0,kind=safeInt32)) == 31), &
- int64 = merge(selectedInt64, merge(-2, -1, selectedInt64 >= 0), &
- digits(int(0,kind=safeInt64)) == 63), &
- int128 = merge(selectedInt128, merge(-2, -1, selectedInt128 >= 0), &
- digits(int(0,kind=safeInt128)) == 127)
-
- ! UNSIGNED types
- integer, parameter, public :: &
- selectedUInt8 = selected_unsigned_kind(2), &
- selectedUInt16 = selected_unsigned_kind(4), &
- selectedUInt32 = selected_unsigned_kind(9), &
- selectedUInt64 = selected_unsigned_kind(18),&
- selectedUInt128 = selected_unsigned_kind(38), &
- safeUInt8 = merge(selectedUInt8, selected_unsigned_kind(0), &
- selectedUInt8 >= 0), &
- safeUInt16 = merge(selectedUInt16, selected_unsigned_kind(0), &
- selectedUInt16 >= 0), &
- safeUInt32 = merge(selectedUInt32, selected_unsigned_kind(0), &
- selectedUInt32 >= 0), &
- safeUInt64 = merge(selectedUInt64, selected_unsigned_kind(0), &
- selectedUInt64 >= 0), &
- safeUInt128 = merge(selectedUInt128, selected_unsigned_kind(0), &
- selectedUInt128 >= 0)
-
- integer, parameter, public :: &
- uint8 = merge(selectedUInt8, merge(-2, -1, selectedUInt8 >= 0), &
- digits(uint(0,kind=safeUInt8)) == 8), &
- uint16 = merge(selectedUInt16, merge(-2, -1, selectedUInt16 >= 0), &
- digits(uint(0,kind=safeUInt16)) == 16), &
- uint32 = merge(selectedUInt32, merge(-2, -1, selectedUInt32 >= 0), &
- digits(uint(0,kind=safeUInt32)) == 32), &
- uint64 = merge(selectedUInt64, merge(-2, -1, selectedUInt64 >= 0), &
- digits(uint(0,kind=safeUInt64)) == 64), &
- uint128 = merge(selectedUInt128, merge(-2, -1, selectedUInt128 >= 0), &
- digits(uint(0,kind=safeUInt128)) == 128)
-
- integer, parameter, dimension(*), public :: __builtin_integer_kinds = [ &
- selected_int_kind(0), &
- [(pack([selected_int_kind(k)], &
- selected_int_kind(k) >= 0 .and. &
- selected_int_kind(k) /= selected_int_kind(k-1)), &
- integer :: k=1, 39)]]
-
- ! LOGICAL TYPES
- integer, parameter, public :: &
- logical8 = int8, logical16 = int16, logical32 = int32, logical64 = int64
-
- integer, parameter, dimension(*), public :: __builtin_logical_kinds = [ &
- pack([logical8], logical8 >= 0), &
- pack([logical16], logical16 >= 0), &
- pack([logical32], logical32 >= 0), &
- pack([logical64], logical64 >= 0) &
- ]
-
- ! REAL types
- integer, parameter, public :: &
- selectedReal16 = selected_real_kind(3, 4), & ! IEEE half
- selectedBfloat16 = selected_real_kind(2, 37), & ! truncated IEEE single
- selectedReal32 = selected_real_kind(6, 37), & ! IEEE single
- selectedReal64 = selected_real_kind(15, 307), & ! IEEE double
- selectedReal80 = selected_real_kind(18, 4931), & ! 80x87 extended
- selectedReal64x2 = selected_real_kind(31, 307), & ! "double-double"
- selectedReal128 = selected_real_kind(33, 4931), & ! IEEE quad
- safeReal16 = merge(selectedReal16, selected_real_kind(0,0), &
- selectedReal16 >= 0), &
- safeBfloat16 = merge(selectedBfloat16, selected_real_kind(0,0), &
- selectedBfloat16 >= 0), &
- safeReal32 = merge(selectedReal32, selected_real_kind(0,0), &
- selectedReal32 >= 0), &
- safeReal64 = merge(selectedReal64, selected_real_kind(0,0), &
- selectedReal64 >= 0), &
- safeReal80 = merge(selectedReal80, selected_real_kind(0,0), &
- selectedReal80 >= 0), &
- safeReal64x2 = merge(selectedReal64x2, selected_real_kind(0,0), &
- selectedReal64x2 >= 0), &
- safeReal128 = merge(selectedReal128, selected_real_kind(0,0), &
- selectedReal128 >= 0)
-
- integer, parameter, public :: &
- real16 = merge(selectedReal16, merge(-2, -1, selectedReal16 >= 0), &
- digits(real(0,kind=safeReal16)) == 11), &
- bfloat16 = merge(selectedBfloat16, merge(-2, -1, selectedBfloat16 >= 0), &
- digits(real(0,kind=safeBfloat16)) == 8), &
- real32 = merge(selectedReal32, merge(-2, -1, selectedReal32 >= 0), &
- digits(real(0,kind=safeReal32)) == 24), &
- real64 = merge(selectedReal64, merge(-2, -1, selectedReal64 >= 0), &
- digits(real(0,kind=safeReal64)) == 53), &
- real80 = merge(selectedReal80, merge(-2, -1, selectedReal80 >= 0), &
- digits(real(0,kind=safeReal80)) == 64), &
- real64x2 = merge(selectedReal64x2, merge(-2, -1, selectedReal64x2 >= 0), &
- digits(real(0,kind=safeReal64x2)) == 106), &
- real128 = merge(selectedReal128, merge(-2, -1, selectedReal128 >= 0), &
- digits(real(0,kind=safeReal128)) == 113)
-
- integer, parameter, dimension(*), public :: __builtin_real_kinds = [ &
- pack([real16], real16 >= 0), &
- pack([bfloat16], bfloat16 >= 0), &
- pack([real32], real32 >= 0), &
- pack([real64], real64 >= 0), &
- pack([real80], real80 >= 0), &
- pack([real64x2], real64x2 >= 0), &
- pack([real128], real128 >= 0) &
- ]
-end module iso_fortran_env_impl
More information about the llvm-commits
mailing list