[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