[llvm-branch-commits] [clang] [flang] [lld] [llvm] [Flang] LLVM_ENABLE_RUNTIMES=flang-rt (PR #110217)
Michael Kruse via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Mon Nov 11 06:57:20 PST 2024
https://github.com/Meinersbur updated https://github.com/llvm/llvm-project/pull/110217
>From f89c561fe1d11ead1172e576479ceff5b84fb8f7 Mon Sep 17 00:00:00 2001
From: Michael Kruse <llvm-project at meinersbur.de>
Date: Fri, 27 Sep 2024 09:18:49 +0200
Subject: [PATCH 01/32] [Flang] LLVM_ENABLE_RUNTIMES=FortranRuntime
Extract Flang's runtime library to use the LLVM_ENABLE_RUNTIME
mechanism.
---
FortranRuntime/.clang-format | 21 +
FortranRuntime/CMakeLists.txt | 184 ++++++++
FortranRuntime/CODE_OWNERS.TXT | 14 +
FortranRuntime/LICENSE.TXT | 234 +++++++++++
FortranRuntime/README.md | 20 +
.../cmake/config.h.cmake.in | 0
.../cmake/modules/AddFortranRuntime.cmake | 109 +++++
.../include/flang/Common/Fortran-consts.h | 50 +++
.../flang/Common}/ISO_Fortran_binding.h | 5 +-
.../Common}/ISO_Fortran_binding_wrapper.h | 7 +-
.../include/flang/Common/api-attrs.h | 5 +-
.../flang/Common}/binary-floating-point.h | 2 +-
.../flang/Common/bit-population-count.h | 0
.../include/flang/Common/constexpr-bitset.h | 0
.../include/flang/Common}/decimal.h | 5 +-
.../include/flang/Common/enum-class.h | 0
.../include/flang/Common/enum-set.h | 0
.../include/flang/Common/fast-int-set.h | 2 +-
.../include/flang/Common/float128.h | 2 +-
.../include/flang/Common/format.h | 2 +-
.../include/flang/Common/idioms.h | 0
.../flang/Common/leading-zero-bit-count.h | 0
.../include/flang/Common/optional.h | 0
.../include/flang/Common/real.h | 0
.../include/flang/Common/reference-wrapper.h | 0
.../include/flang/Common/restorer.h | 0
.../include/flang/Common/target-rounding.h | 40 ++
.../include/flang/Common/uint128.h | 0
.../include/flang/Common/variant.h | 0
.../include/flang/Common/visit.h | 0
.../include/flang/Common/windows-include.h | 0
.../include/flang/Runtime/CUDA/allocator.h | 0
.../include/flang/Runtime/CUDA/descriptor.h | 0
.../include/flang/Runtime/allocatable.h | 0
.../flang/Runtime/allocator-registry.h | 2 +-
.../include/flang/Runtime/array-constructor.h | 0
.../include/flang/Runtime/assign.h | 0
.../include/flang/Runtime/c-or-cpp.h | 0
.../include/flang/Runtime/character.h | 0
.../include/flang/Runtime/command.h | 0
.../include/flang/Runtime/cpp-type.h | 2 +-
.../include/flang/Runtime/derived-api.h | 0
.../include/flang/Runtime/descriptor.h | 2 +-
.../include/flang/Runtime/entry-names.h | 5 +-
.../include/flang/Runtime/exceptions.h | 2 +-
.../include/flang/Runtime/execute.h | 2 +-
.../include/flang/Runtime/extensions.h | 0
.../flang/Runtime/freestanding-tools.h | 0
.../include/flang/Runtime/inquiry.h | 2 +-
.../include/flang/Runtime/io-api.h | 0
.../include/flang/Runtime/iostat.h | 0
.../include/flang/Runtime/magic-numbers.h | 6 +-
.../include/flang/Runtime/main.h | 0
.../flang/Runtime/matmul-instances.inc | 0
.../include/flang/Runtime/matmul-transpose.h | 0
.../include/flang/Runtime/matmul.h | 0
.../include/flang/Runtime/memory.h | 0
.../include/flang/Runtime/misc-intrinsic.h | 0
.../include/flang/Runtime/numeric.h | 0
.../include/flang/Runtime/pointer.h | 0
.../include/flang/Runtime/ragged.h | 2 +-
.../include/flang/Runtime/random.h | 0
.../include/flang/Runtime/reduce.h | 0
.../include/flang/Runtime/reduction.h | 0
.../include/flang/Runtime/stop.h | 0
.../include/flang/Runtime/support.h | 2 +-
.../include/flang/Runtime/temporary-stack.h | 0
.../include/flang/Runtime/time-intrinsic.h | 0
.../include/flang/Runtime/transformational.h | 0
.../include/flang/Runtime/type-code.h | 4 +-
.../include/flang/Testing}/fp-testing.h | 14 +-
.../include/flang/Testing}/testing.h | 8 +
FortranRuntime/lib/CMakeLists.txt | 12 +
.../lib/Common}/big-radix-floating-point.h | 6 +-
.../lib/Common}/binary-to-decimal.cpp | 4 +-
.../lib/Common}/decimal-to-binary.cpp | 6 +-
FortranRuntime/lib/Runtime/CMakeLists.txt | 242 +++++++++++
.../lib/Runtime}/CUDA/CMakeLists.txt | 2 +-
.../lib/Runtime}/CUDA/allocator.cpp | 4 +-
.../lib/Runtime}/CUDA/descriptor.cpp | 2 +-
.../lib/Runtime}/Float128Math/CMakeLists.txt | 2 +-
.../lib/Runtime}/Float128Math/acos.cpp | 2 +-
.../lib/Runtime}/Float128Math/acosh.cpp | 2 +-
.../lib/Runtime}/Float128Math/asin.cpp | 2 +-
.../lib/Runtime}/Float128Math/asinh.cpp | 2 +-
.../lib/Runtime}/Float128Math/atan.cpp | 2 +-
.../lib/Runtime}/Float128Math/atan2.cpp | 2 +-
.../lib/Runtime}/Float128Math/atanh.cpp | 2 +-
.../lib/Runtime}/Float128Math/ceil.cpp | 2 +-
.../lib/Runtime}/Float128Math/complex-math.c | 5 +-
.../lib/Runtime}/Float128Math/complex-math.h | 2 +-
.../lib/Runtime}/Float128Math/cos.cpp | 2 +-
.../lib/Runtime}/Float128Math/cosh.cpp | 2 +-
.../lib/Runtime}/Float128Math/erf.cpp | 2 +-
.../lib/Runtime}/Float128Math/erfc.cpp | 2 +-
.../lib/Runtime}/Float128Math/exp.cpp | 2 +-
.../lib/Runtime}/Float128Math/exponent.cpp | 2 +-
.../lib/Runtime}/Float128Math/floor.cpp | 2 +-
.../lib/Runtime}/Float128Math/fma.cpp | 2 +-
.../lib/Runtime}/Float128Math/fraction.cpp | 2 +-
.../lib/Runtime}/Float128Math/hypot.cpp | 2 +-
.../lib/Runtime}/Float128Math/j0.cpp | 2 +-
.../lib/Runtime}/Float128Math/j1.cpp | 2 +-
.../lib/Runtime}/Float128Math/jn.cpp | 2 +-
.../lib/Runtime}/Float128Math/lgamma.cpp | 2 +-
.../lib/Runtime}/Float128Math/llround.cpp | 2 +-
.../lib/Runtime}/Float128Math/log.cpp | 2 +-
.../lib/Runtime}/Float128Math/log10.cpp | 2 +-
.../lib/Runtime}/Float128Math/lround.cpp | 2 +-
.../lib/Runtime}/Float128Math/math-entries.h | 2 +-
.../lib/Runtime}/Float128Math/mod-real.cpp | 2 +-
.../lib/Runtime}/Float128Math/modulo-real.cpp | 2 +-
.../lib/Runtime}/Float128Math/nearest.cpp | 2 +-
.../lib/Runtime}/Float128Math/norm2.cpp | 2 +-
.../Float128Math/numeric-template-specs.h | 2 +-
.../lib/Runtime}/Float128Math/pow.cpp | 2 +-
.../lib/Runtime}/Float128Math/random.cpp | 2 +-
.../lib/Runtime}/Float128Math/round.cpp | 2 +-
.../lib/Runtime}/Float128Math/rrspacing.cpp | 2 +-
.../lib/Runtime}/Float128Math/scale.cpp | 2 +-
.../Runtime}/Float128Math/set-exponent.cpp | 2 +-
.../lib/Runtime}/Float128Math/sin.cpp | 2 +-
.../lib/Runtime}/Float128Math/sinh.cpp | 2 +-
.../lib/Runtime}/Float128Math/spacing.cpp | 2 +-
.../lib/Runtime}/Float128Math/sqrt.cpp | 2 +-
.../lib/Runtime}/Float128Math/tan.cpp | 2 +-
.../lib/Runtime}/Float128Math/tanh.cpp | 2 +-
.../lib/Runtime}/Float128Math/tgamma.cpp | 2 +-
.../lib/Runtime}/Float128Math/trunc.cpp | 2 +-
.../lib/Runtime}/Float128Math/y0.cpp | 2 +-
.../lib/Runtime}/Float128Math/y1.cpp | 2 +-
.../lib/Runtime}/Float128Math/yn.cpp | 2 +-
.../lib/Runtime}/ISO_Fortran_binding.cpp | 4 +-
.../lib/Runtime}/ISO_Fortran_util.h | 4 +-
.../lib/Runtime}/allocatable.cpp | 4 +-
.../lib/Runtime}/allocator-registry.cpp | 2 +-
.../lib/Runtime}/array-constructor.cpp | 2 +-
.../lib/Runtime}/assign-impl.h | 2 +-
.../lib/Runtime}/assign.cpp | 2 +-
.../lib/Runtime}/buffer.cpp | 2 +-
.../lib/Runtime}/buffer.h | 2 +-
.../lib/Runtime}/character.cpp | 2 +-
.../lib/Runtime}/command.cpp | 2 +-
.../lib/Runtime}/complex-powi.cpp | 15 +-
.../lib/Runtime}/complex-reduction.c | 5 +-
.../lib/Runtime}/complex-reduction.h | 5 +-
.../lib/Runtime}/connection.cpp | 2 +-
.../lib/Runtime}/connection.h | 2 +-
.../lib/Runtime}/copy.cpp | 2 +-
.../lib/Runtime}/copy.h | 2 +-
.../lib/Runtime}/derived-api.cpp | 3 +-
.../lib/Runtime}/derived.cpp | 2 +-
.../lib/Runtime}/derived.h | 2 +-
.../lib/Runtime}/descriptor-io.cpp | 2 +-
.../lib/Runtime}/descriptor-io.h | 2 +-
.../lib/Runtime}/descriptor.cpp | 2 +-
.../lib/Runtime}/dot-product.cpp | 2 +-
.../lib/Runtime}/edit-input.cpp | 2 +-
.../lib/Runtime}/edit-input.h | 4 +-
.../lib/Runtime}/edit-output.cpp | 2 +-
.../lib/Runtime}/edit-output.h | 4 +-
.../lib/Runtime}/emit-encoded.h | 2 +-
.../lib/Runtime}/environment-default-list.h | 5 +-
.../lib/Runtime}/environment.cpp | 2 +-
.../lib/Runtime}/environment.h | 4 +-
.../lib/Runtime}/exceptions.cpp | 2 +-
.../lib/Runtime}/execute.cpp | 2 +-
.../lib/Runtime}/extensions.cpp | 2 +-
.../lib/Runtime}/external-unit.cpp | 2 +-
.../lib/Runtime}/extrema.cpp | 2 +-
.../lib/Runtime}/file.cpp | 2 +-
.../lib/Runtime}/file.h | 2 +-
.../lib/Runtime}/findloc.cpp | 2 +-
.../lib/Runtime}/format-implementation.h | 4 +-
.../lib/Runtime}/format.cpp | 2 +-
.../lib/Runtime}/format.h | 6 +-
.../lib/Runtime}/inquiry.cpp | 2 +-
.../lib/Runtime}/internal-unit.cpp | 2 +-
.../lib/Runtime}/internal-unit.h | 2 +-
.../lib/Runtime}/io-api-common.h | 2 +-
.../lib/Runtime}/io-api-minimal.cpp | 2 +-
.../lib/Runtime}/io-api.cpp | 2 +-
.../lib/Runtime}/io-error.cpp | 2 +-
.../lib/Runtime}/io-error.h | 2 +-
.../lib/Runtime}/io-stmt.cpp | 2 +-
.../lib/Runtime}/io-stmt.h | 2 +-
.../lib/Runtime}/iostat.cpp | 2 +-
.../lib/Runtime}/iso_fortran_env_impl.f90 | 2 +-
.../lib/Runtime}/lock.h | 2 +-
.../lib/Runtime}/main.cpp | 2 +-
.../lib/Runtime}/matmul-transpose.cpp | 2 +-
.../lib/Runtime}/matmul.cpp | 2 +-
.../lib/Runtime}/memory.cpp | 2 +-
.../lib/Runtime}/misc-intrinsic.cpp | 2 +-
.../lib/Runtime}/namelist.cpp | 2 +-
.../lib/Runtime}/namelist.h | 2 +-
.../lib/Runtime}/non-tbp-dio.cpp | 2 +-
.../lib/Runtime}/non-tbp-dio.h | 5 +-
.../lib/Runtime}/numeric-templates.h | 2 +-
.../lib/Runtime}/numeric.cpp | 2 +-
.../lib/Runtime}/pointer.cpp | 2 +-
.../lib/Runtime}/product.cpp | 2 +-
.../lib/Runtime}/pseudo-unit.cpp | 2 +-
.../lib/Runtime}/ragged.cpp | 2 +-
.../lib/Runtime}/random-templates.h | 2 +-
.../lib/Runtime}/random.cpp | 2 +-
.../lib/Runtime}/reduce.cpp | 2 +-
.../lib/Runtime}/reduction-templates.h | 2 +-
.../lib/Runtime}/reduction.cpp | 2 +-
.../lib/Runtime}/stack.h | 2 +-
.../lib/Runtime}/stat.cpp | 2 +-
.../lib/Runtime}/stat.h | 4 +-
.../lib/Runtime}/stop.cpp | 2 +-
.../lib/Runtime}/sum.cpp | 2 +-
.../lib/Runtime}/support.cpp | 2 +-
.../lib/Runtime}/temporary-stack.cpp | 4 +-
.../lib/Runtime}/terminator.cpp | 2 +-
.../lib/Runtime}/terminator.h | 2 +-
.../lib/Runtime}/time-intrinsic.cpp | 2 +-
.../lib/Runtime}/tools.cpp | 2 +-
.../lib/Runtime}/tools.h | 2 +-
.../lib/Runtime}/transformational.cpp | 2 +-
.../lib/Runtime}/type-code.cpp | 3 +-
.../lib/Runtime}/type-info.cpp | 2 +-
.../lib/Runtime}/type-info.h | 4 +-
.../lib/Runtime}/unit-map.cpp | 2 +-
.../lib/Runtime}/unit-map.h | 2 +-
.../lib/Runtime}/unit.cpp | 2 +-
.../lib/Runtime}/unit.h | 2 +-
.../lib/Runtime}/utf.cpp | 2 +-
.../lib/Runtime}/utf.h | 2 +-
FortranRuntime/lib/Testing/CMakeLists.txt | 19 +
.../lib/Testing}/fp-testing.cpp | 12 +-
.../lib/Testing}/testing.cpp | 10 +-
.../module/.clang-format | 0
FortranRuntime/module/CMakeLists.txt | 63 +++
.../module/__cuda_builtins.f90 | 0
.../module/__fortran_builtins.f90 | 0
.../module/__fortran_ieee_exceptions.f90 | 0
.../module/__fortran_type_info.f90 | 0
.../module/__ppc_intrinsics.f90 | 0
.../module/__ppc_types.f90 | 0
.../module/cudadevice.f90 | 2 +-
.../module/ieee_arithmetic.f90 | 0
.../module/ieee_exceptions.f90 | 0
.../module/ieee_features.f90 | 0
.../module/iso_c_binding.f90 | 0
.../module/iso_fortran_env.f90 | 0
{flang => FortranRuntime}/module/mma.f90 | 43 +-
FortranRuntime/test/CMakeLists.txt | 70 ++++
FortranRuntime/test/NonGtestUnit/lit.cfg.py | 21 +
.../test/NonGtestUnit/lit.site.cfg.py.in | 13 +
.../test/Runtime/no-cpp-dep.c | 12 +-
FortranRuntime/test/Unit/lit.cfg.py | 21 +
FortranRuntime/test/Unit/lit.site.cfg.py.in | 14 +
FortranRuntime/test/lit.cfg.py | 78 ++++
FortranRuntime/test/lit.site.cfg.py.in | 17 +
FortranRuntime/unittests/CMakeLists.txt | 62 +++
.../unittests/Common/CMakeLists.txt | 13 +
.../unittests/Common/FastIntSetTest.cpp | 2 +-
.../unittests/Decimal/CMakeLists.txt | 20 +
.../unittests/Decimal/quick-sanity-test.cpp | 10 +-
.../unittests/Decimal/thorough-test.cpp | 10 +-
.../unittests/Evaluate/CMakeLists.txt | 19 +
.../Evaluate/ISO-Fortran-binding.cpp | 12 +-
.../unittests/Evaluate/reshape.cpp | 10 +-
.../unittests/Runtime/AccessTest.cpp | 2 +-
.../unittests/Runtime/Allocatable.cpp | 2 +-
.../unittests/Runtime/ArrayConstructor.cpp | 2 +-
.../unittests/Runtime/BufferTest.cpp | 4 +-
.../unittests/Runtime/CMakeLists.txt | 19 +-
.../unittests/Runtime/CUDA/AllocatorCUF.cpp | 4 +-
.../unittests/Runtime/CharacterTest.cpp | 2 +-
.../unittests/Runtime/CommandTest.cpp | 2 +-
.../unittests/Runtime/Complex.cpp | 4 +-
.../unittests/Runtime/CrashHandlerFixture.cpp | 4 +-
.../unittests/Runtime/CrashHandlerFixture.h | 2 +-
.../unittests/Runtime/Derived.cpp | 2 +-
.../unittests/Runtime/ExternalIOTest.cpp | 2 +-
.../unittests/Runtime/Format.cpp | 8 +-
.../unittests/Runtime/Inquiry.cpp | 2 +-
.../unittests/Runtime/ListInputTest.cpp | 4 +-
.../unittests/Runtime/LogicalFormatTest.cpp | 2 +-
.../unittests/Runtime/Matmul.cpp | 2 +-
.../unittests/Runtime/MatmulTranspose.cpp | 2 +-
.../unittests/Runtime/MiscIntrinsic.cpp | 2 +-
.../unittests/Runtime/Namelist.cpp | 4 +-
.../unittests/Runtime/Numeric.cpp | 2 +-
.../unittests/Runtime/NumericalFormatTest.cpp | 2 +-
.../unittests/Runtime/Pointer.cpp | 2 +-
.../unittests/Runtime/Ragged.cpp | 2 +-
.../unittests/Runtime/Random.cpp | 2 +-
.../unittests/Runtime/Reduction.cpp | 2 +-
.../unittests/Runtime/RuntimeCrashTest.cpp | 4 +-
.../unittests/Runtime/Stop.cpp | 4 +-
.../unittests/Runtime/Support.cpp | 2 +-
.../unittests/Runtime/TemporaryStack.cpp | 4 +-
.../unittests/Runtime/Time.cpp | 2 +-
.../unittests/Runtime/Transformational.cpp | 2 +-
.../unittests/Runtime/tools.h | 2 +-
clang/lib/Driver/ToolChains/CommonArgs.cpp | 3 +-
clang/lib/Driver/ToolChains/Flang.cpp | 4 -
flang/CMakeLists.txt | 45 +-
flang/docs/FlangDriver.md | 5 +-
flang/include/flang/Evaluate/call.h | 6 +-
.../include/flang/Evaluate/characteristics.h | 6 +-
flang/include/flang/Evaluate/common.h | 18 +-
flang/include/flang/Evaluate/constant.h | 4 +-
flang/include/flang/Evaluate/expression.h | 6 +-
flang/include/flang/Evaluate/formatting.h | 2 +-
flang/include/flang/Evaluate/intrinsics.h | 2 +-
flang/include/flang/Evaluate/shape.h | 2 +-
flang/include/flang/Evaluate/target.h | 17 +-
flang/include/flang/Evaluate/tools.h | 4 +-
flang/include/flang/Evaluate/traverse.h | 2 +-
flang/include/flang/Evaluate/type.h | 6 +-
flang/include/flang/Evaluate/variable.h | 4 +-
.../include/flang/Frontend/FrontendOptions.h | 2 +-
flang/include/flang/Lower/AbstractConverter.h | 2 +-
flang/include/flang/Lower/Bridge.h | 2 +-
flang/include/flang/Lower/CallInterface.h | 2 +-
flang/include/flang/Lower/ConvertType.h | 2 +-
flang/include/flang/Lower/LoweringOptions.h | 2 +-
flang/include/flang/Lower/PFTBuilder.h | 4 +-
flang/include/flang/Lower/Support/Utils.h | 2 +-
flang/include/flang/Lower/SymbolMap.h | 2 +-
.../flang/Optimizer/Builder/FIRBuilder.h | 2 +-
.../flang/Optimizer/Builder/IntrinsicCall.h | 1 +
.../Optimizer/Builder/PPCIntrinsicCall.h | 2 +-
.../Optimizer/Builder/Runtime/RTBuilder.h | 2 +-
.../flang/Optimizer/CodeGen/DescriptorModel.h | 2 +-
.../Dialect/CUF/Attributes/CUFAttr.h | 2 +-
.../flang/Optimizer/Support/TypeCode.h | 2 +-
flang/include/flang/Optimizer/Support/Utils.h | 2 +-
flang/include/flang/Parser/char-block.h | 2 +-
flang/include/flang/Parser/dump-parse-tree.h | 4 +-
flang/include/flang/Parser/message.h | 2 +-
flang/include/flang/Parser/parse-state.h | 2 +-
flang/include/flang/Parser/parse-tree.h | 4 +-
flang/include/flang/Parser/parsing.h | 2 +-
flang/include/flang/Parser/provenance.h | 2 +-
flang/include/flang/Parser/source.h | 2 +-
flang/include/flang/Parser/user-state.h | 2 +-
flang/include/flang/Semantics/expression.h | 4 +-
.../flang/Semantics/runtime-type-info.h | 2 +-
flang/include/flang/Semantics/scope.h | 4 +-
flang/include/flang/Semantics/semantics.h | 2 +-
flang/include/flang/Semantics/symbol.h | 4 +-
flang/include/flang/Semantics/tools.h | 2 +-
flang/include/flang/Semantics/type.h | 2 +-
.../{Common => Support}/Fortran-features.h | 4 +-
.../flang/{Common => Support}/Fortran.h | 38 +-
.../{Common => Support}/MathOptionsBase.def | 0
.../{Common => Support}/MathOptionsBase.h | 8 +-
.../{Common => Support}/OpenMP-features.h | 2 +-
.../flang/{Common => Support}/Version.h | 2 +-
.../flang/{Common => Support}/default-kinds.h | 4 +-
.../flang/{Common => Support}/indirection.h | 4 +-
.../flang/{Common => Support}/interval.h | 4 +-
.../{Common => Support}/reference-counted.h | 2 +-
.../flang/{Common => Support}/reference.h | 2 +-
.../static-multimap-view.h | 2 +-
.../flang/{Common => Support}/template.h | 4 +-
.../flang/{Common => Support}/unwrap.h | 6 +-
flang/include/flang/Tools/CrossToolHelpers.h | 2 +-
flang/lib/CMakeLists.txt | 5 +-
flang/lib/Common/CMakeLists.txt | 60 +--
flang/lib/Decimal/CMakeLists.txt | 86 ----
flang/lib/Evaluate/CMakeLists.txt | 3 +-
flang/lib/Evaluate/call.cpp | 2 +-
flang/lib/Evaluate/characteristics.cpp | 2 +-
flang/lib/Evaluate/common.cpp | 4 +
flang/lib/Evaluate/fold-implementation.h | 6 +-
flang/lib/Evaluate/formatting.cpp | 2 +-
flang/lib/Evaluate/intrinsics-library.cpp | 2 +-
flang/lib/Evaluate/intrinsics.cpp | 2 +-
flang/lib/Evaluate/real.cpp | 2 +-
flang/lib/Evaluate/shape.cpp | 2 +-
flang/lib/Evaluate/target.cpp | 2 +-
flang/lib/Frontend/CMakeLists.txt | 2 +-
flang/lib/Frontend/CompilerInstance.cpp | 2 +-
flang/lib/Frontend/CompilerInvocation.cpp | 6 +-
flang/lib/Frontend/FrontendActions.cpp | 2 +-
flang/lib/Lower/Bridge.cpp | 2 +-
flang/lib/Lower/CMakeLists.txt | 2 +-
flang/lib/Lower/CallInterface.cpp | 2 +-
flang/lib/Lower/ConvertExpr.cpp | 4 +-
flang/lib/Lower/Mangler.cpp | 2 +-
flang/lib/Optimizer/Builder/IntrinsicCall.cpp | 21 +-
flang/lib/Optimizer/CodeGen/TypeConverter.cpp | 2 +-
flang/lib/Optimizer/Dialect/FIRType.cpp | 2 +-
.../lib/Optimizer/Transforms/AddDebugInfo.cpp | 2 +-
.../Transforms/AssumedRankOpConversion.cpp | 2 +-
flang/lib/Optimizer/Transforms/CMakeLists.txt | 1 +
.../Optimizer/Transforms/CufOpConversion.cpp | 2 +-
.../Transforms/ExternalNameConversion.cpp | 2 +-
.../Optimizer/Transforms/LoopVersioning.cpp | 2 +-
.../Transforms/SimplifyIntrinsics.cpp | 2 +-
.../lib/Optimizer/Transforms/StackReclaim.cpp | 2 +-
flang/lib/Optimizer/Transforms/VScaleAttr.cpp | 2 +-
flang/lib/Parser/CMakeLists.txt | 2 +-
flang/lib/Parser/basic-parsers.h | 4 +-
flang/lib/Parser/parse-tree.cpp | 2 +-
flang/lib/Parser/prescan.h | 2 +-
flang/lib/Parser/unparse.cpp | 4 +-
flang/lib/Semantics/CMakeLists.txt | 2 +-
flang/lib/Semantics/assignment.h | 2 +-
flang/lib/Semantics/check-case.cpp | 4 +-
flang/lib/Semantics/check-coarray.cpp | 2 +-
flang/lib/Semantics/check-cuda.cpp | 2 +-
flang/lib/Semantics/check-data.h | 2 +-
flang/lib/Semantics/check-do-forall.cpp | 2 +-
flang/lib/Semantics/check-return.cpp | 2 +-
flang/lib/Semantics/check-select-rank.cpp | 2 +-
flang/lib/Semantics/check-select-type.cpp | 2 +-
flang/lib/Semantics/check-stop.cpp | 2 +-
flang/lib/Semantics/data-to-inits.h | 4 +-
flang/lib/Semantics/expression.cpp | 2 +-
flang/lib/Semantics/pointer-assignment.cpp | 2 +-
flang/lib/Semantics/resolve-labels.cpp | 2 +-
flang/lib/Semantics/resolve-names-utils.cpp | 6 +-
flang/lib/Semantics/resolve-names.cpp | 6 +-
flang/lib/Semantics/rewrite-parse-tree.cpp | 2 +-
flang/lib/Semantics/semantics.cpp | 2 +-
flang/lib/Semantics/tools.cpp | 4 +-
flang/lib/Support/CMakeLists.txt | 56 +++
.../{Common => Support}/Fortran-features.cpp | 6 +-
flang/lib/{Common => Support}/Fortran.cpp | 6 +-
flang/lib/{Common => Support}/Version.cpp | 4 +-
flang/lib/Support/big-radix-floating-point.h | 396 ++++++++++++++++++
.../lib/{Common => Support}/default-kinds.cpp | 4 +-
flang/lib/{Common => Support}/idioms.cpp | 2 +-
flang/runtime/CMakeLists.txt | 314 --------------
flang/test/CMakeLists.txt | 4 +-
flang/test/Driver/linker-flags.f90 | 6 +-
.../test/Driver/msvc-dependent-lib-flags.f90 | 4 -
flang/test/lib/CMakeLists.txt | 1 +
flang/test/lit.cfg.py | 23 -
flang/test/lit.site.cfg.py.in | 1 -
flang/tools/CMakeLists.txt | 1 -
flang/tools/bbc/CMakeLists.txt | 1 +
flang/tools/bbc/bbc.cpp | 8 +-
flang/tools/f18-parse-demo/CMakeLists.txt | 2 +
flang/tools/f18-parse-demo/f18-parse-demo.cpp | 4 +-
flang/tools/f18/CMakeLists.txt | 173 --------
flang/tools/f18/dump.cpp | 42 --
flang/tools/fir-opt/CMakeLists.txt | 2 +
flang/tools/flang-driver/CMakeLists.txt | 3 +
flang/tools/tco/CMakeLists.txt | 2 +
flang/unittests/CMakeLists.txt | 37 --
flang/unittests/Common/CMakeLists.txt | 3 -
flang/unittests/Decimal/CMakeLists.txt | 10 -
flang/unittests/Evaluate/CMakeLists.txt | 24 +-
.../Evaluate/bit-population-count.cpp | 2 +-
flang/unittests/Evaluate/expression.cpp | 2 +-
flang/unittests/Evaluate/folding.cpp | 2 +-
flang/unittests/Evaluate/integer.cpp | 2 +-
flang/unittests/Evaluate/intrinsics.cpp | 2 +-
.../Evaluate/leading-zero-bit-count.cpp | 2 +-
flang/unittests/Evaluate/logical.cpp | 2 +-
flang/unittests/Evaluate/real.cpp | 4 +-
flang/unittests/Evaluate/uint128.cpp | 2 +-
flang/unittests/Runtime/CUDA/CMakeLists.txt | 15 -
lld/COFF/MinGW.cpp | 6 +-
llvm/CMakeLists.txt | 2 +-
.../modules/LLVMExternalProjectUtils.cmake | 16 +-
llvm/projects/CMakeLists.txt | 5 +-
llvm/runtimes/CMakeLists.txt | 32 +-
runtimes/CMakeLists.txt | 3 +-
469 files changed, 2512 insertions(+), 1388 deletions(-)
create mode 100644 FortranRuntime/.clang-format
create mode 100644 FortranRuntime/CMakeLists.txt
create mode 100644 FortranRuntime/CODE_OWNERS.TXT
create mode 100644 FortranRuntime/LICENSE.TXT
create mode 100644 FortranRuntime/README.md
rename flang/runtime/config.h.cmake => FortranRuntime/cmake/config.h.cmake.in (100%)
create mode 100644 FortranRuntime/cmake/modules/AddFortranRuntime.cmake
create mode 100644 FortranRuntime/include/flang/Common/Fortran-consts.h
rename {flang/include/flang => FortranRuntime/include/flang/Common}/ISO_Fortran_binding.h (97%)
rename {flang/include/flang => FortranRuntime/include/flang/Common}/ISO_Fortran_binding_wrapper.h (85%)
rename {flang => FortranRuntime}/include/flang/Common/api-attrs.h (99%)
rename {flang/include/flang/Decimal => FortranRuntime/include/flang/Common}/binary-floating-point.h (99%)
rename {flang => FortranRuntime}/include/flang/Common/bit-population-count.h (100%)
rename {flang => FortranRuntime}/include/flang/Common/constexpr-bitset.h (100%)
rename {flang/include/flang/Decimal => FortranRuntime/include/flang/Common}/decimal.h (97%)
rename {flang => FortranRuntime}/include/flang/Common/enum-class.h (100%)
rename {flang => FortranRuntime}/include/flang/Common/enum-set.h (100%)
rename {flang => FortranRuntime}/include/flang/Common/fast-int-set.h (99%)
rename {flang => FortranRuntime}/include/flang/Common/float128.h (96%)
rename {flang => FortranRuntime}/include/flang/Common/format.h (99%)
rename {flang => FortranRuntime}/include/flang/Common/idioms.h (100%)
rename {flang => FortranRuntime}/include/flang/Common/leading-zero-bit-count.h (100%)
rename {flang => FortranRuntime}/include/flang/Common/optional.h (100%)
rename {flang => FortranRuntime}/include/flang/Common/real.h (100%)
rename {flang => FortranRuntime}/include/flang/Common/reference-wrapper.h (100%)
rename {flang => FortranRuntime}/include/flang/Common/restorer.h (100%)
create mode 100644 FortranRuntime/include/flang/Common/target-rounding.h
rename {flang => FortranRuntime}/include/flang/Common/uint128.h (100%)
rename {flang => FortranRuntime}/include/flang/Common/variant.h (100%)
rename {flang => FortranRuntime}/include/flang/Common/visit.h (100%)
rename {flang => FortranRuntime}/include/flang/Common/windows-include.h (100%)
rename {flang => FortranRuntime}/include/flang/Runtime/CUDA/allocator.h (100%)
rename {flang => FortranRuntime}/include/flang/Runtime/CUDA/descriptor.h (100%)
rename {flang => FortranRuntime}/include/flang/Runtime/allocatable.h (100%)
rename {flang => FortranRuntime}/include/flang/Runtime/allocator-registry.h (96%)
rename {flang => FortranRuntime}/include/flang/Runtime/array-constructor.h (100%)
rename {flang => FortranRuntime}/include/flang/Runtime/assign.h (100%)
rename {flang => FortranRuntime}/include/flang/Runtime/c-or-cpp.h (100%)
rename {flang => FortranRuntime}/include/flang/Runtime/character.h (100%)
rename {flang => FortranRuntime}/include/flang/Runtime/command.h (100%)
rename {flang => FortranRuntime}/include/flang/Runtime/cpp-type.h (98%)
rename {flang => FortranRuntime}/include/flang/Runtime/derived-api.h (100%)
rename {flang => FortranRuntime}/include/flang/Runtime/descriptor.h (99%)
rename {flang => FortranRuntime}/include/flang/Runtime/entry-names.h (97%)
rename {flang => FortranRuntime}/include/flang/Runtime/exceptions.h (91%)
rename {flang => FortranRuntime}/include/flang/Runtime/execute.h (93%)
rename {flang => FortranRuntime}/include/flang/Runtime/extensions.h (100%)
rename {flang => FortranRuntime}/include/flang/Runtime/freestanding-tools.h (100%)
rename {flang => FortranRuntime}/include/flang/Runtime/inquiry.h (94%)
rename {flang => FortranRuntime}/include/flang/Runtime/io-api.h (100%)
rename {flang => FortranRuntime}/include/flang/Runtime/iostat.h (100%)
rename {flang => FortranRuntime}/include/flang/Runtime/magic-numbers.h (98%)
rename {flang => FortranRuntime}/include/flang/Runtime/main.h (100%)
rename {flang => FortranRuntime}/include/flang/Runtime/matmul-instances.inc (100%)
rename {flang => FortranRuntime}/include/flang/Runtime/matmul-transpose.h (100%)
rename {flang => FortranRuntime}/include/flang/Runtime/matmul.h (100%)
rename {flang => FortranRuntime}/include/flang/Runtime/memory.h (100%)
rename {flang => FortranRuntime}/include/flang/Runtime/misc-intrinsic.h (100%)
rename {flang => FortranRuntime}/include/flang/Runtime/numeric.h (100%)
rename {flang => FortranRuntime}/include/flang/Runtime/pointer.h (100%)
rename {flang => FortranRuntime}/include/flang/Runtime/ragged.h (97%)
rename {flang => FortranRuntime}/include/flang/Runtime/random.h (100%)
rename {flang => FortranRuntime}/include/flang/Runtime/reduce.h (100%)
rename {flang => FortranRuntime}/include/flang/Runtime/reduction.h (100%)
rename {flang => FortranRuntime}/include/flang/Runtime/stop.h (100%)
rename {flang => FortranRuntime}/include/flang/Runtime/support.h (96%)
rename {flang => FortranRuntime}/include/flang/Runtime/temporary-stack.h (100%)
rename {flang => FortranRuntime}/include/flang/Runtime/time-intrinsic.h (100%)
rename {flang => FortranRuntime}/include/flang/Runtime/transformational.h (100%)
rename {flang => FortranRuntime}/include/flang/Runtime/type-code.h (96%)
rename {flang/unittests/Evaluate => FortranRuntime/include/flang/Testing}/fp-testing.h (56%)
rename {flang/unittests/Evaluate => FortranRuntime/include/flang/Testing}/testing.h (80%)
create mode 100644 FortranRuntime/lib/CMakeLists.txt
rename {flang/lib/Decimal => FortranRuntime/lib/Common}/big-radix-floating-point.h (98%)
rename {flang/lib/Decimal => FortranRuntime/lib/Common}/binary-to-decimal.cpp (99%)
rename {flang/lib/Decimal => FortranRuntime/lib/Common}/decimal-to-binary.cpp (99%)
create mode 100644 FortranRuntime/lib/Runtime/CMakeLists.txt
rename {flang/runtime => FortranRuntime/lib/Runtime}/CUDA/CMakeLists.txt (93%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/CUDA/allocator.cpp (94%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/CUDA/descriptor.cpp (91%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/Float128Math/CMakeLists.txt (98%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/Float128Math/acos.cpp (87%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/Float128Math/acosh.cpp (87%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/Float128Math/asin.cpp (87%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/Float128Math/asinh.cpp (87%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/Float128Math/atan.cpp (87%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/Float128Math/atan2.cpp (88%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/Float128Math/atanh.cpp (87%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/Float128Math/ceil.cpp (87%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/Float128Math/complex-math.c (92%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/Float128Math/complex-math.h (96%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/Float128Math/cos.cpp (87%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/Float128Math/cosh.cpp (87%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/Float128Math/erf.cpp (87%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/Float128Math/erfc.cpp (87%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/Float128Math/exp.cpp (87%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/Float128Math/exponent.cpp (90%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/Float128Math/floor.cpp (87%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/Float128Math/fma.cpp (89%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/Float128Math/fraction.cpp (87%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/Float128Math/hypot.cpp (88%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/Float128Math/j0.cpp (87%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/Float128Math/j1.cpp (87%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/Float128Math/jn.cpp (87%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/Float128Math/lgamma.cpp (87%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/Float128Math/llround.cpp (88%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/Float128Math/log.cpp (87%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/Float128Math/log10.cpp (87%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/Float128Math/lround.cpp (87%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/Float128Math/math-entries.h (99%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/Float128Math/mod-real.cpp (89%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/Float128Math/modulo-real.cpp (89%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/Float128Math/nearest.cpp (89%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/Float128Math/norm2.cpp (93%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/Float128Math/numeric-template-specs.h (96%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/Float128Math/pow.cpp (88%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/Float128Math/random.cpp (89%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/Float128Math/round.cpp (89%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/Float128Math/rrspacing.cpp (87%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/Float128Math/scale.cpp (90%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/Float128Math/set-exponent.cpp (88%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/Float128Math/sin.cpp (87%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/Float128Math/sinh.cpp (87%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/Float128Math/spacing.cpp (87%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/Float128Math/sqrt.cpp (87%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/Float128Math/tan.cpp (87%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/Float128Math/tanh.cpp (87%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/Float128Math/tgamma.cpp (87%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/Float128Math/trunc.cpp (89%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/Float128Math/y0.cpp (87%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/Float128Math/y1.cpp (87%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/Float128Math/yn.cpp (87%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/ISO_Fortran_binding.cpp (98%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/ISO_Fortran_util.h (96%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/allocatable.cpp (98%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/allocator-registry.cpp (94%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/array-constructor.cpp (99%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/assign-impl.h (93%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/assign.cpp (99%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/buffer.cpp (92%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/buffer.h (99%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/character.cpp (99%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/command.cpp (98%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/complex-powi.cpp (91%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/complex-reduction.c (97%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/complex-reduction.h (97%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/connection.cpp (96%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/connection.h (98%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/copy.cpp (99%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/copy.h (93%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/derived-api.cpp (98%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/derived.cpp (99%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/derived.h (94%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/descriptor-io.cpp (98%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/descriptor-io.h (99%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/descriptor.cpp (99%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/dot-product.cpp (99%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/edit-input.cpp (99%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/edit-input.h (95%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/edit-output.cpp (99%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/edit-output.h (98%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/emit-encoded.h (98%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/environment-default-list.h (85%)
mode change 100755 => 100644
rename {flang/runtime => FortranRuntime/lib/Runtime}/environment.cpp (98%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/environment.h (95%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/exceptions.cpp (96%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/execute.cpp (99%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/extensions.cpp (98%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/external-unit.cpp (99%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/extrema.cpp (99%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/file.cpp (99%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/file.h (98%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/findloc.cpp (99%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/format-implementation.h (99%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/format.cpp (92%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/format.h (98%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/inquiry.cpp (97%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/internal-unit.cpp (98%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/internal-unit.h (97%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/io-api-common.h (98%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/io-api-minimal.cpp (98%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/io-api.cpp (99%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/io-error.cpp (98%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/io-error.h (97%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/io-stmt.cpp (99%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/io-stmt.h (99%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/iostat.cpp (98%)
rename {flang/module => FortranRuntime/lib/Runtime}/iso_fortran_env_impl.f90 (98%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/lock.h (97%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/main.cpp (94%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/matmul-transpose.cpp (99%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/matmul.cpp (99%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/memory.cpp (93%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/misc-intrinsic.cpp (98%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/namelist.cpp (99%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/namelist.h (96%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/non-tbp-dio.cpp (93%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/non-tbp-dio.h (93%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/numeric-templates.h (99%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/numeric.cpp (99%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/pointer.cpp (99%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/product.cpp (98%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/pseudo-unit.cpp (98%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/ragged.cpp (97%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/random-templates.h (97%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/random.cpp (98%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/reduce.cpp (99%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/reduction-templates.h (99%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/reduction.cpp (99%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/stack.h (98%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/stat.cpp (97%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/stat.h (95%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/stop.cpp (98%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/sum.cpp (98%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/support.cpp (94%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/temporary-stack.cpp (98%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/terminator.cpp (97%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/terminator.h (98%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/time-intrinsic.cpp (99%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/tools.cpp (99%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/tools.h (99%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/transformational.cpp (99%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/type-code.cpp (98%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/type-info.cpp (99%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/type-info.h (99%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/unit-map.cpp (97%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/unit-map.h (97%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/unit.cpp (99%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/unit.h (99%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/utf.cpp (98%)
rename {flang/runtime => FortranRuntime/lib/Runtime}/utf.h (97%)
create mode 100644 FortranRuntime/lib/Testing/CMakeLists.txt
rename {flang/unittests/Evaluate => FortranRuntime/lib/Testing}/fp-testing.cpp (86%)
rename {flang/unittests/Evaluate => FortranRuntime/lib/Testing}/testing.cpp (88%)
rename {flang => FortranRuntime}/module/.clang-format (100%)
create mode 100644 FortranRuntime/module/CMakeLists.txt
rename {flang => FortranRuntime}/module/__cuda_builtins.f90 (100%)
rename {flang => FortranRuntime}/module/__fortran_builtins.f90 (100%)
rename {flang => FortranRuntime}/module/__fortran_ieee_exceptions.f90 (100%)
rename {flang => FortranRuntime}/module/__fortran_type_info.f90 (100%)
rename {flang => FortranRuntime}/module/__ppc_intrinsics.f90 (100%)
rename {flang => FortranRuntime}/module/__ppc_types.f90 (100%)
rename {flang => FortranRuntime}/module/cudadevice.f90 (96%)
rename {flang => FortranRuntime}/module/ieee_arithmetic.f90 (100%)
rename {flang => FortranRuntime}/module/ieee_exceptions.f90 (100%)
rename {flang => FortranRuntime}/module/ieee_features.f90 (100%)
rename {flang => FortranRuntime}/module/iso_c_binding.f90 (100%)
rename {flang => FortranRuntime}/module/iso_fortran_env.f90 (100%)
rename {flang => FortranRuntime}/module/mma.f90 (98%)
create mode 100644 FortranRuntime/test/CMakeLists.txt
create mode 100644 FortranRuntime/test/NonGtestUnit/lit.cfg.py
create mode 100644 FortranRuntime/test/NonGtestUnit/lit.site.cfg.py.in
rename {flang => FortranRuntime}/test/Runtime/no-cpp-dep.c (75%)
create mode 100644 FortranRuntime/test/Unit/lit.cfg.py
create mode 100644 FortranRuntime/test/Unit/lit.site.cfg.py.in
create mode 100644 FortranRuntime/test/lit.cfg.py
create mode 100644 FortranRuntime/test/lit.site.cfg.py.in
create mode 100644 FortranRuntime/unittests/CMakeLists.txt
create mode 100644 FortranRuntime/unittests/Common/CMakeLists.txt
rename {flang => FortranRuntime}/unittests/Common/FastIntSetTest.cpp (97%)
create mode 100644 FortranRuntime/unittests/Decimal/CMakeLists.txt
rename {flang => FortranRuntime}/unittests/Decimal/quick-sanity-test.cpp (91%)
rename {flang => FortranRuntime}/unittests/Decimal/thorough-test.cpp (85%)
create mode 100644 FortranRuntime/unittests/Evaluate/CMakeLists.txt
rename {flang => FortranRuntime}/unittests/Evaluate/ISO-Fortran-binding.cpp (98%)
rename {flang => FortranRuntime}/unittests/Evaluate/reshape.cpp (88%)
rename {flang => FortranRuntime}/unittests/Runtime/AccessTest.cpp (99%)
rename {flang => FortranRuntime}/unittests/Runtime/Allocatable.cpp (98%)
rename {flang => FortranRuntime}/unittests/Runtime/ArrayConstructor.cpp (99%)
rename {flang => FortranRuntime}/unittests/Runtime/BufferTest.cpp (97%)
rename {flang => FortranRuntime}/unittests/Runtime/CMakeLists.txt (54%)
rename {flang => FortranRuntime}/unittests/Runtime/CUDA/AllocatorCUF.cpp (95%)
rename {flang => FortranRuntime}/unittests/Runtime/CharacterTest.cpp (99%)
rename {flang => FortranRuntime}/unittests/Runtime/CommandTest.cpp (99%)
rename {flang => FortranRuntime}/unittests/Runtime/Complex.cpp (98%)
rename {flang => FortranRuntime}/unittests/Runtime/CrashHandlerFixture.cpp (92%)
rename {flang => FortranRuntime}/unittests/Runtime/CrashHandlerFixture.h (91%)
rename {flang => FortranRuntime}/unittests/Runtime/Derived.cpp (96%)
rename {flang => FortranRuntime}/unittests/Runtime/ExternalIOTest.cpp (99%)
rename {flang => FortranRuntime}/unittests/Runtime/Format.cpp (96%)
rename {flang => FortranRuntime}/unittests/Runtime/Inquiry.cpp (98%)
rename {flang => FortranRuntime}/unittests/Runtime/ListInputTest.cpp (98%)
rename {flang => FortranRuntime}/unittests/Runtime/LogicalFormatTest.cpp (96%)
rename {flang => FortranRuntime}/unittests/Runtime/Matmul.cpp (99%)
rename {flang => FortranRuntime}/unittests/Runtime/MatmulTranspose.cpp (99%)
rename {flang => FortranRuntime}/unittests/Runtime/MiscIntrinsic.cpp (98%)
rename {flang => FortranRuntime}/unittests/Runtime/Namelist.cpp (99%)
rename {flang => FortranRuntime}/unittests/Runtime/Numeric.cpp (99%)
rename {flang => FortranRuntime}/unittests/Runtime/NumericalFormatTest.cpp (99%)
rename {flang => FortranRuntime}/unittests/Runtime/Pointer.cpp (98%)
rename {flang => FortranRuntime}/unittests/Runtime/Ragged.cpp (94%)
rename {flang => FortranRuntime}/unittests/Runtime/Random.cpp (97%)
rename {flang => FortranRuntime}/unittests/Runtime/Reduction.cpp (99%)
rename {flang => FortranRuntime}/unittests/Runtime/RuntimeCrashTest.cpp (98%)
rename {flang => FortranRuntime}/unittests/Runtime/Stop.cpp (96%)
rename {flang => FortranRuntime}/unittests/Runtime/Support.cpp (97%)
rename {flang => FortranRuntime}/unittests/Runtime/TemporaryStack.cpp (98%)
rename {flang => FortranRuntime}/unittests/Runtime/Time.cpp (98%)
rename {flang => FortranRuntime}/unittests/Runtime/Transformational.cpp (99%)
rename {flang => FortranRuntime}/unittests/Runtime/tools.h (96%)
rename flang/include/flang/{Common => Support}/Fortran-features.h (98%)
rename flang/include/flang/{Common => Support}/Fortran.h (73%)
rename flang/include/flang/{Common => Support}/MathOptionsBase.def (100%)
rename flang/include/flang/{Common => Support}/MathOptionsBase.h (86%)
rename flang/include/flang/{Common => Support}/OpenMP-features.h (94%)
rename flang/include/flang/{Common => Support}/Version.h (95%)
rename flang/include/flang/{Common => Support}/default-kinds.h (96%)
rename flang/include/flang/{Common => Support}/indirection.h (98%)
rename flang/include/flang/{Common => Support}/interval.h (97%)
rename flang/include/flang/{Common => Support}/reference-counted.h (96%)
rename flang/include/flang/{Common => Support}/reference.h (97%)
rename flang/include/flang/{Common => Support}/static-multimap-view.h (97%)
rename flang/include/flang/{Common => Support}/template.h (99%)
rename flang/include/flang/{Common => Support}/unwrap.h (97%)
delete mode 100644 flang/lib/Decimal/CMakeLists.txt
create mode 100644 flang/lib/Support/CMakeLists.txt
rename flang/lib/{Common => Support}/Fortran-features.cpp (91%)
rename flang/lib/{Common => Support}/Fortran.cpp (96%)
rename flang/lib/{Common => Support}/Version.cpp (95%)
create mode 100644 flang/lib/Support/big-radix-floating-point.h
rename flang/lib/{Common => Support}/default-kinds.cpp (94%)
rename flang/lib/{Common => Support}/idioms.cpp (89%)
delete mode 100644 flang/runtime/CMakeLists.txt
delete mode 100644 flang/tools/f18/CMakeLists.txt
delete mode 100644 flang/tools/f18/dump.cpp
delete mode 100644 flang/unittests/Common/CMakeLists.txt
delete mode 100644 flang/unittests/Decimal/CMakeLists.txt
delete mode 100644 flang/unittests/Runtime/CUDA/CMakeLists.txt
diff --git a/FortranRuntime/.clang-format b/FortranRuntime/.clang-format
new file mode 100644
index 00000000000000..c1dfe06fdf5782
--- /dev/null
+++ b/FortranRuntime/.clang-format
@@ -0,0 +1,21 @@
+---
+# See: https://clang.llvm.org/docs/ClangFormatStyleOptions.html
+BasedOnStyle: LLVM
+AlignAfterOpenBracket: DontAlign
+AlignEscapedNewlines: DontAlign
+AlignConsecutiveAssignments: false
+AlignConsecutiveDeclarations: false
+AlignOperands: false
+AlignTrailingComments: false
+IncludeCategories:
+ - Regex: '^<'
+ Priority: 4
+ - Regex: '^"(llvm|llvm-c|clang|clang-c)/'
+ Priority: 3
+ - Regex: '^"(flang|\.\.)/'
+ Priority: 2
+ - Regex: '.*'
+ Priority: 1
+...
+
+# vim:set filetype=yaml:
diff --git a/FortranRuntime/CMakeLists.txt b/FortranRuntime/CMakeLists.txt
new file mode 100644
index 00000000000000..765e1445fc1a18
--- /dev/null
+++ b/FortranRuntime/CMakeLists.txt
@@ -0,0 +1,184 @@
+#===-- CMakeLists.txt ------------------------------------------------------===#
+#
+# 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
+#
+#===------------------------------------------------------------------------===#
+#
+# Build instructions for the FortranRuntime library and Fortran modules required
+# by programs compiled by Flang. This is file is intended to be included using
+# the LLVM_ENABLE_RUNTIMES mechanism.
+#
+#===------------------------------------------------------------------------===#
+
+set(LLVM_SUBPROJECT_TITLE "Fortran Runtime")
+set(FORTRANRUNTIME_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
+set(FORTRANRUNTIME_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}")
+
+list(APPEND CMAKE_MODULE_PATH
+ "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules"
+ )
+include(AddFortranRuntime)
+
+
+
+############################
+# Build Mode Introspection #
+############################
+
+# Setting these variables from an LLVM build is sufficient that FortranRuntime can
+# construct the output paths, so it can behave as if it were in-tree here.
+set(LLVM_TREE_AVAILABLE OFF)
+if (LLVM_LIBRARY_OUTPUT_INTDIR AND LLVM_RUNTIME_OUTPUT_INTDIR AND PACKAGE_VERSION)
+ # This is a bootstap build
+ set(LLVM_TREE_AVAILABLE ON)
+endif()
+
+if (LLVM_TREE_AVAILABLE)
+ # Despite Clang in the name, get_clang_resource_dir does not depend on Clang being added to the build
+ # flang-new uses the same resource dir as clang.
+ include(GetClangResourceDir)
+ get_clang_resource_dir(FORTRANRUNTIME_BUILD_LIB_DIR PREFIX "${LLVM_LIBRARY_OUTPUT_INTDIR}/.." SUBDIR "lib${LLVM_LIBDIR_SUFFIX}")
+ get_clang_resource_dir(FORTRANRUNTIME_INSTALL_LIB_DIR SUBDIR "lib${LLVM_LIBDIR_SUFFIX}") # No prefix, CMake's install command find the install prefix itself
+
+ # FIXME: If compiling multiple triples, include dirs overwrite each other
+ get_clang_resource_dir(FORTRANRUNTIME_BUILD_INCLUDE_DIR PREFIX "${LLVM_LIBRARY_OUTPUT_INTDIR}/.." SUBDIR "include")
+ get_clang_resource_dir(FORTRANRUNTIME_INSTALL_INCLUDE_DIR SUBDIR "include")
+else ()
+ set(FORTRANRUNTIME_BUILD_LIB_DIR "${LLVM_LIBRARY_OUTPUT_INTDIR}")
+ set(FORTRANRUNTIME_INSTALL_LIB_DIR "lib${LLVM_LIBDIR_SUFFIX}")
+
+ set(FORTRANRUNTIME_BUILD_INCLUDE_DIR "${LLVM_INCLUDE_DIR}")
+ set(FORTRANRUNTIME_INSTALL_INCLUDE_DIR "include")
+endif ()
+
+
+if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR)
+ set(FORTRANRUNTIME_BUILD_LIB_DIR "${FORTRANRUNTIME_BUILD_LIB_DIR}/${LLVM_TARGET_TRIPLE}")
+ set(FORTRANRUNTIME_INSTALL_LIB_DIR "${FORTRANRUNTIME_INSTALL_LIB_DIR}/${LLVM_TARGET_TRIPLE}")
+endif()
+
+
+
+
+#################
+# Build Options #
+#################
+
+option(FORTRANRUNTIME_INCLUDE_TESTS
+ "Generate build targets for the FortranRuntime unit tests."
+ ${LLVM_INCLUDE_TESTS})
+
+# The out of tree builds of the compiler and the Fortran runtime
+# must use the same setting of FLANG_RUNTIME_F128_MATH_LIB
+# to be composable. Failure to synchronize this setting may result
+# in linking errors or fatal failures in F128 runtime functions.
+set(FORTRARUNTIME_F128_MATH_LIB "" CACHE STRING
+ "Specifies the target library used for implementing IEEE-754 128-bit float \
+ math in F18 runtime, e.g. it might be libquadmath for targets where \
+ REAL(16) is mapped to __float128, or libm for targets where REAL(16) \
+ is mapped to long double, etc."
+ )
+if (FLANG_RUNTIME_F128_MATH_LIB)
+ add_compile_definitions(
+ FLANG_RUNTIME_F128_MATH_LIB="${FLANG_RUNTIME_F128_MATH_LIB}"
+ )
+endif()
+
+option(FLANG_EXPERIMENTAL_CUDA_RUNTIME "Compile Fortran runtime as CUDA sources (experimental)" OFF)
+if (FLANG_EXPERIMENTAL_CUDA_RUNTIME)
+ message(FATAL_ERROOR "FLANG_EXPERIMENTAL_CUDA_RUNTIME currently not supported")
+endif()
+
+
+
+
+########################
+# System Introspection #
+########################
+
+include(TestBigEndian)
+test_big_endian(IS_BIGENDIAN)
+if (IS_BIGENDIAN)
+ add_compile_definitions(FLANG_BIG_ENDIAN=1)
+else ()
+ add_compile_definitions(FLANG_LITTLE_ENDIAN=1)
+endif ()
+
+include(CheckCXXSymbolExists)
+include(CheckCXXSourceCompiles)
+check_cxx_symbol_exists(strerror_r string.h HAVE_STRERROR_R)
+# Can't use symbol exists here as the function is overloaded in C++
+check_cxx_source_compiles(
+ "#include <string.h>
+ int main() {
+ char buf[4096];
+ return strerror_s(buf, 4096, 0);
+ }
+ "
+ HAVE_DECL_STRERROR_S)
+
+# Check if 128-bit float computations can be done via long double
+check_cxx_source_compiles(
+ "#include <cfloat>
+ #if LDBL_MANT_DIG != 113
+ #error LDBL_MANT_DIG != 113
+ #endif
+ int main() { return 0; }
+ "
+ HAVE_LDBL_MANT_DIG_113)
+
+# Check if 128-bit float computations can be done via long double
+check_cxx_source_compiles(
+ "#include <cfloat>
+ #if LDBL_MANT_DIG != 113
+ #error LDBL_MANT_DIG != 113
+ #endif
+ int main() { return 0; }
+ "
+ HAVE_LDBL_MANT_DIG_113)
+
+
+#####################
+# Build Preparation #
+#####################
+
+enable_language(Fortran)
+
+# C++17 required for FortranRuntime, user or other runtimes may override this.
+# GTest included later also requires C++17.
+set(CMAKE_CXX_STANDARD 17 CACHE STRING "C++ standard to conform to")
+set(CMAKE_CXX_STANDARD_REQUIRED YES)
+
+# Disable libstdc++/libc++ assertions, even in an LLVM_ENABLE_ASSERTIONS build,
+# to avoid an unwanted dependency on libstdc++/libc++.so.
+add_definitions(-U_GLIBCXX_ASSERTIONS)
+add_definitions(-U_LIBCPP_ENABLE_ASSERTIONS)
+
+
+configure_file(cmake/config.h.cmake.in config.h)
+
+configure_file(
+ "${FORTRANRUNTIME_SOURCE_DIR}/include/flang/Common/ISO_Fortran_binding.h"
+ "${FORTRANRUNTIME_BUILD_INCLUDE_DIR}/ISO_Fortran_binding.h"
+)
+install(
+ FILES "${FORTRANRUNTIME_BUILD_INCLUDE_DIR}/ISO_Fortran_binding.h"
+ DESTINATION "${FORTRANRUNTIME_BUILD_INCLUDE_DIR}"
+)
+
+
+
+###################
+# Build Artifacts #
+###################
+
+add_subdirectory(lib)
+add_subdirectory(module)
+
+if (FORTRANRUNTIME_INCLUDE_TESTS)
+ add_subdirectory(unittests)
+ add_subdirectory(test)
+endif()
+
diff --git a/FortranRuntime/CODE_OWNERS.TXT b/FortranRuntime/CODE_OWNERS.TXT
new file mode 100644
index 00000000000000..649243aa1e8fec
--- /dev/null
+++ b/FortranRuntime/CODE_OWNERS.TXT
@@ -0,0 +1,14 @@
+This file is a list of the people responsible for ensuring that patches for a
+particular part of Flang are reviewed, either by themself or by someone else.
+They are also the gatekeepers for their part of Flang, with the final word on
+what goes in or not.
+
+The list is sorted by surname and formatted to allow easy grepping and
+beautification by scripts. The fields are: name (N), email (E), web-address
+(W), PGP key ID and fingerprint (P), description (D), snail-mail address
+(S) and (I) IRC handle. Each entry should contain at least the (N), (E) and
+(D) fields.
+
+N: Steve Scalpone
+E: sscalpone at nvidia.com
+D: Anything not covered by others
diff --git a/FortranRuntime/LICENSE.TXT b/FortranRuntime/LICENSE.TXT
new file mode 100644
index 00000000000000..53bb2e7fbc7643
--- /dev/null
+++ b/FortranRuntime/LICENSE.TXT
@@ -0,0 +1,234 @@
+==============================================================================
+The LLVM Project is under the Apache License v2.0 with LLVM Exceptions:
+==============================================================================
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+
+---- LLVM Exceptions to the Apache 2.0 License ----
+
+As an exception, if, as a result of your compiling your source code, portions
+of this Software are embedded into an Object form of such source code, you
+may redistribute such embedded portions in such Object form without complying
+with the conditions of Sections 4(a), 4(b) and 4(d) of the License.
+
+In addition, if you combine or link compiled forms of this Software with
+software that is licensed under the GPLv2 ("Combined Software") and if a
+court of competent jurisdiction determines that the patent provision (Section
+3), the indemnity provision (Section 9) or other Section of the License
+conflicts with the conditions of the GPLv2, you may retroactively and
+prospectively choose to deem waived or otherwise exclude such Section(s) of
+the License, but only in their entirety and only with respect to the Combined
+Software.
+
+==============================================================================
+Software from third parties included in the LLVM Project:
+==============================================================================
+The LLVM Project contains third party software which is under different license
+terms. All such code will be identified clearly using at least one of two
+mechanisms:
+1) It will be in a separate directory tree with its own `LICENSE.txt` or
+ `LICENSE` file at the top containing the specific license and restrictions
+ which apply to that software, or
+2) It will contain specific license and restriction terms at the top of every
+ file.
diff --git a/FortranRuntime/README.md b/FortranRuntime/README.md
new file mode 100644
index 00000000000000..6fd4b3359f7888
--- /dev/null
+++ b/FortranRuntime/README.md
@@ -0,0 +1,20 @@
+# Fortran Runtime
+
+Fortran Runtime is the runtime library for code emitted by the Flang
+compiler (https://flang.llvm.org).
+
+## Getting Started
+
+### Bootstrap Build
+
+```sh
+cmake -S <path-to-llvm-project>/llvm -DLLVM_ENABLE_PROJECTS=flang -DLLVM_ENABLE_RUNTIMES=FortranRuntime
+```
+
+### Runtime-only build
+
+```sh
+cmake -S <path-to-llvm-project>/runtimes -DLLVM_ENABLE_RUNTIMES=FortranRuntime -DCMAKE_Fortran_COMPILER=<path-to-llvm-builddir-or-installprefix>/bin/flang-new
+```
+
+
diff --git a/flang/runtime/config.h.cmake b/FortranRuntime/cmake/config.h.cmake.in
similarity index 100%
rename from flang/runtime/config.h.cmake
rename to FortranRuntime/cmake/config.h.cmake.in
diff --git a/FortranRuntime/cmake/modules/AddFortranRuntime.cmake b/FortranRuntime/cmake/modules/AddFortranRuntime.cmake
new file mode 100644
index 00000000000000..a4fc95495610cc
--- /dev/null
+++ b/FortranRuntime/cmake/modules/AddFortranRuntime.cmake
@@ -0,0 +1,109 @@
+#===-- cmake/modules/AddFortranRuntime.cmake -------------------------------===#
+#
+# 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
+#
+#===------------------------------------------------------------------------===#
+
+# Builds a library with common option for FortranRuntime.
+#
+# Usage:
+#
+# add_fortranruntime_library(name sources ...
+# SHARED
+# Build a dynamic (.so/.dll) library
+# STATIC
+# Build a static (.a/.lib) library
+# OBJECT
+# Create only object- and Fortran module files without static/dynamic library
+# INSTALL_WITH_TOOLCHAIN
+# Install library into Clang's resource directory so it can be found by the Flang driver during compilation, including tests
+# EXCLUDE_FROM_ALL
+# Do not build library by default; typically used for libraries needed for testing only, no install
+# LINK_TO_LLVM
+# Library requires include path and linking to LLVM's Support component
+# ADDITIONAL_HEADERS
+# May specify header files for IDE generators.
+# )
+function (add_fortranruntime_library name)
+ set(options STATIC SHARED OBJECT INSTALL_WITH_TOOLCHAIN EXCLUDE_FROM_ALL LINK_TO_LLVM)
+ set(multiValueArgs ADDITIONAL_HEADERS)
+ cmake_parse_arguments(ARG
+ "${options}"
+ ""
+ "${multiValueArgs}"
+ ${ARGN})
+
+ # Also add header files to IDEs to list as part of the library
+ set_source_files_properties(${ARG_ADDITIONAL_HEADERS} PROPERTIES HEADER_FILE_ONLY ON)
+
+ # Forward libtype to add_library
+ set(extra_args "")
+ if (ARG_SHARED)
+ list(APPEND extra_args SHARED)
+ endif ()
+ if (ARG_STATIC)
+ list(APPEND extra_args STATIC)
+ endif ()
+ if (ARG_OBJECT)
+ list(APPEND extra_args OBJECT)
+ endif ()
+ if (EXCLUDE_FROM_ALL)
+ list(APPEND extra_args EXCLUDE_FROM_ALL)
+ endif ()
+
+ add_library(${name} ${extra_args} ${ARG_ADDITIONAL_HEADERS} ${ARG_UNPARSED_ARGUMENTS} )
+ if (ARG_INSTALL_WITH_TOOLCHAIN)
+ set_target_properties(${name} PROPERTIES FOLDER "Fortran Runtime/Toolchain Libraries")
+ elseif (ARG_OBJECT)
+ set_target_properties(${name} PROPERTIES FOLDER "Fortran Runtime/Object Libraries")
+ else ()
+ set_target_properties(${name} PROPERTIES FOLDER "Fortran Runtime/Libraries")
+ endif ()
+
+ target_compile_features(${name} PRIVATE cxx_std_17)
+ if(LLVM_COMPILER_IS_GCC_COMPATIBLE)
+ target_compile_options (${name} PRIVATE $<$<COMPILE_LANGUAGE:CXX>:-fno-exceptions -fno-rtti -fno-unwind-tables -fno-asynchronous-unwind-tables>)
+ elseif(MSVC)
+ target_compile_options(${name} PRIVATE $<$<COMPILE_LANGUAGE:CXX>:/EHs-c- /GR->)
+ endif()
+
+ target_include_directories(${name} PRIVATE "${FORTRANRUNTIME_BINARY_DIR}") # For configured config.h for be found
+ target_include_directories(${name} PRIVATE "${FORTRANRUNTIME_SOURCE_DIR}/include")
+
+set_target_properties(${name}
+ PROPERTIES
+ Fortran_MODULE_DIRECTORY "${FORTRANRUNTIME_BUILD_INCLUDE_DIR}/flang"
+)
+
+ if (ARG_LINK_TO_LLVM)
+ if (LLVM_LINK_LLVM_DYLIB)
+ set(llvm_libs LLVM)
+ else()
+ llvm_map_components_to_libnames(llvm_libs Support)
+ endif()
+ target_link_libraries(${name} PUBLIC ${llvm_libs})
+ target_include_directories(${name} PRIVATE ${LLVM_INCLUDE_DIRS})
+ endif ()
+
+ # If this is part of the toolchain, put it into the compiler's resource directory.
+ # Otherwise it is part of testing and is not installed at all.
+ # TODO: Consider multi-configuration builds
+ if (INSTALL_WITH_TOOLCHAIN)
+ set_target_properties(${name}
+ PROPERTIES
+ LIBRARY_OUTPUT_DIRECTORY "${FORTRANRUNTIME_BUILD_LIB_DIR}"
+ ARCHIVE_OUTPUT_DIRECTORY "${FORTRANRUNTIME_BUILD_LIB_DIR}"
+ RUNTIME_OUTPUT_DIRECTORY "${FORTRANRUNTIME_BUILD_LIB_DIR}"
+ )
+
+ if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY)
+ install(TARGETS ${name}
+ LIBRARY DESTINATION "${FORTRANRUNTIME_INSTALL_LIB_DIR}"
+ ARCHIVE DESTINATION "${FORTRANRUNTIME_INSTALL_LIB_DIR}"
+ RUNTIME DESTINATION "${FORTRANRUNTIME_INSTALL_LIB_DIR}"
+ )
+ endif ()
+ endif ()
+endfunction (add_fortranruntime_library)
diff --git a/FortranRuntime/include/flang/Common/Fortran-consts.h b/FortranRuntime/include/flang/Common/Fortran-consts.h
new file mode 100644
index 00000000000000..3156c6c50c3b9a
--- /dev/null
+++ b/FortranRuntime/include/flang/Common/Fortran-consts.h
@@ -0,0 +1,50 @@
+//===-- include/flang/Common/Fortran-consts.h -------------------*- C++ -*-===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef FORTRAN_COMMON_FORTRAN_CONSTS_H_
+#define FORTRAN_COMMON_FORTRAN_CONSTS_H_
+
+// Fortran language concepts that are used in many phases are defined
+// once here to avoid redundancy and needless translation.
+
+#include "flang/Common/enum-class.h"
+#include <cstdint>
+
+namespace Fortran::common {
+
+// Fortran has five kinds of intrinsic data types, plus the derived types.
+ENUM_CLASS(TypeCategory, Integer, Real, Complex, Character, Logical, Derived)
+ENUM_CLASS(VectorElementCategory, Integer, Unsigned, Real)
+
+
+ENUM_CLASS(IoStmtKind, None, Backspace, Close, Endfile, Flush, Inquire, Open,
+ Print, Read, Rewind, Wait, Write)
+
+// Defined I/O variants
+ENUM_CLASS(
+ DefinedIo, ReadFormatted, ReadUnformatted, WriteFormatted, WriteUnformatted)
+
+// Fortran arrays may have up to 15 dimensions (See Fortran 2018 section 5.4.6).
+static constexpr int maxRank{15};
+
+
+// Floating-point rounding modes; these are packed into a byte to save
+// room in the runtime's format processing context structure. These
+// enumerators are defined with the corresponding values returned from
+// llvm.get.rounding.
+enum class RoundingMode : std::uint8_t {
+ ToZero, // ROUND=ZERO, RZ - truncation
+ TiesToEven, // ROUND=NEAREST, RN - default IEEE rounding
+ Up, // ROUND=UP, RU
+ Down, // ROUND=DOWN, RD
+ TiesAwayFromZero, // ROUND=COMPATIBLE, RC - ties round away from zero
+};
+
+
+} // namespace Fortran::common
+#endif // FORTRAN_COMMON_FORTRAN_CONSTS_H_
diff --git a/flang/include/flang/ISO_Fortran_binding.h b/FortranRuntime/include/flang/Common/ISO_Fortran_binding.h
similarity index 97%
rename from flang/include/flang/ISO_Fortran_binding.h
rename to FortranRuntime/include/flang/Common/ISO_Fortran_binding.h
index 89a10ce69a2ba2..21247103bcc552 100644
--- a/flang/include/flang/ISO_Fortran_binding.h
+++ b/FortranRuntime/include/flang/Common/ISO_Fortran_binding.h
@@ -1,11 +1,10 @@
-/*===-- include/flang/ISO_Fortran_binding.h -----------------------*- C++ -*-===
+/*===-- include/flang/Common/ISO_Fortran_binding.h ------------------*- C -*-===
*
* 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
*
- * ===-----------------------------------------------------------------------===
- */
+ *===----------------------------------------------------------------------===*/
#ifndef CFI_ISO_FORTRAN_BINDING_H_
#define CFI_ISO_FORTRAN_BINDING_H_
diff --git a/flang/include/flang/ISO_Fortran_binding_wrapper.h b/FortranRuntime/include/flang/Common/ISO_Fortran_binding_wrapper.h
similarity index 85%
rename from flang/include/flang/ISO_Fortran_binding_wrapper.h
rename to FortranRuntime/include/flang/Common/ISO_Fortran_binding_wrapper.h
index 37289bdbabd03c..ee02f6f129732e 100644
--- a/flang/include/flang/ISO_Fortran_binding_wrapper.h
+++ b/FortranRuntime/include/flang/Common/ISO_Fortran_binding_wrapper.h
@@ -1,11 +1,10 @@
-/*===-- include/flang/ISO_Fortran_binding_wrapper.h ---------------*- C++ -*-===
+/*===-- include/flang/Common/ISO_Fortran_binding_wrapper.h ----------*- C -*-===
*
* 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
*
- * ===-----------------------------------------------------------------------===
- */
+ *===----------------------------------------------------------------------===*/
#ifndef FORTRAN_ISO_FORTRAN_BINDING_WRAPPER_H_
#define FORTRAN_ISO_FORTRAN_BINDING_WRAPPER_H_
@@ -23,7 +22,7 @@
/* clang-format off */
#include <stddef.h>
-#include "Common/api-attrs.h"
+#include "flang/Common/api-attrs.h"
#ifdef __cplusplus
namespace Fortran {
namespace ISO {
diff --git a/flang/include/flang/Common/api-attrs.h b/FortranRuntime/include/flang/Common/api-attrs.h
similarity index 99%
rename from flang/include/flang/Common/api-attrs.h
rename to FortranRuntime/include/flang/Common/api-attrs.h
index d73e60996bc81f..b56a3c8a047af6 100644
--- a/flang/include/flang/Common/api-attrs.h
+++ b/FortranRuntime/include/flang/Common/api-attrs.h
@@ -1,11 +1,10 @@
-/*===-- include/flang/Common/api-attrs.h ---------------------------*- C -*-=//
+/*===-- include/flang/Common/api-attrs.h ----------------------------*- C -*-===
*
* 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
*
- *===------------------------------------------------------------------------===
- */
+ *===----------------------------------------------------------------------===*/
/*
* The file defines a set macros that can be used to apply
diff --git a/flang/include/flang/Decimal/binary-floating-point.h b/FortranRuntime/include/flang/Common/binary-floating-point.h
similarity index 99%
rename from flang/include/flang/Decimal/binary-floating-point.h
rename to FortranRuntime/include/flang/Common/binary-floating-point.h
index 1e0cde97d98e61..1409b94192740c 100644
--- a/flang/include/flang/Decimal/binary-floating-point.h
+++ b/FortranRuntime/include/flang/Common/binary-floating-point.h
@@ -1,4 +1,4 @@
-//===-- include/flang/Decimal/binary-floating-point.h -----------*- C++ -*-===//
+//===-- include/flang/Common/binary-floating-point.h ------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/include/flang/Common/bit-population-count.h b/FortranRuntime/include/flang/Common/bit-population-count.h
similarity index 100%
rename from flang/include/flang/Common/bit-population-count.h
rename to FortranRuntime/include/flang/Common/bit-population-count.h
diff --git a/flang/include/flang/Common/constexpr-bitset.h b/FortranRuntime/include/flang/Common/constexpr-bitset.h
similarity index 100%
rename from flang/include/flang/Common/constexpr-bitset.h
rename to FortranRuntime/include/flang/Common/constexpr-bitset.h
diff --git a/flang/include/flang/Decimal/decimal.h b/FortranRuntime/include/flang/Common/decimal.h
similarity index 97%
rename from flang/include/flang/Decimal/decimal.h
rename to FortranRuntime/include/flang/Common/decimal.h
index 443163d058e28b..2a75b98c112225 100644
--- a/flang/include/flang/Decimal/decimal.h
+++ b/FortranRuntime/include/flang/Common/decimal.h
@@ -1,11 +1,10 @@
-/*===-- include/flang/Decimal/decimal.h ---------------------------*- C++ -*-===
+/*===-- include/flang/Common/decimal.h ------------------------------*- C -*-===
*
* 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
*
- * ===-----------------------------------------------------------------------===
- */
+ *===----------------------------------------------------------------------===*/
/* C and C++ API for binary-to/from-decimal conversion package. */
diff --git a/flang/include/flang/Common/enum-class.h b/FortranRuntime/include/flang/Common/enum-class.h
similarity index 100%
rename from flang/include/flang/Common/enum-class.h
rename to FortranRuntime/include/flang/Common/enum-class.h
diff --git a/flang/include/flang/Common/enum-set.h b/FortranRuntime/include/flang/Common/enum-set.h
similarity index 100%
rename from flang/include/flang/Common/enum-set.h
rename to FortranRuntime/include/flang/Common/enum-set.h
diff --git a/flang/include/flang/Common/fast-int-set.h b/FortranRuntime/include/flang/Common/fast-int-set.h
similarity index 99%
rename from flang/include/flang/Common/fast-int-set.h
rename to FortranRuntime/include/flang/Common/fast-int-set.h
index d1c9c756a44a65..48209a773c4cd1 100644
--- a/flang/include/flang/Common/fast-int-set.h
+++ b/FortranRuntime/include/flang/Common/fast-int-set.h
@@ -1,4 +1,4 @@
-//===-- include/flang/Common/fast-int-set.h --------------------*- C++ -*-===//
+//===-- include/flang/Common/fast-int-set.h ---------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/include/flang/Common/float128.h b/FortranRuntime/include/flang/Common/float128.h
similarity index 96%
rename from flang/include/flang/Common/float128.h
rename to FortranRuntime/include/flang/Common/float128.h
index 2e76bc0a162e61..a7036bf679e5ae 100644
--- a/flang/include/flang/Common/float128.h
+++ b/FortranRuntime/include/flang/Common/float128.h
@@ -1,4 +1,4 @@
-/*===-- flang/Common/float128.h ----------------------------------*- C -*-===
+/*===-- include/flang/Common/float128.h -----------------------------*- C -*-===
*
* Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
* See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/include/flang/Common/format.h b/FortranRuntime/include/flang/Common/format.h
similarity index 99%
rename from flang/include/flang/Common/format.h
rename to FortranRuntime/include/flang/Common/format.h
index 2374ff6983cf41..138e84b72b733d 100644
--- a/flang/include/flang/Common/format.h
+++ b/FortranRuntime/include/flang/Common/format.h
@@ -10,7 +10,7 @@
#define FORTRAN_COMMON_FORMAT_H_
#include "enum-set.h"
-#include "flang/Common/Fortran.h"
+#include "flang/Common/Fortran-consts.h"
#include <cstring>
// Define a FormatValidator class template to validate a format expression
diff --git a/flang/include/flang/Common/idioms.h b/FortranRuntime/include/flang/Common/idioms.h
similarity index 100%
rename from flang/include/flang/Common/idioms.h
rename to FortranRuntime/include/flang/Common/idioms.h
diff --git a/flang/include/flang/Common/leading-zero-bit-count.h b/FortranRuntime/include/flang/Common/leading-zero-bit-count.h
similarity index 100%
rename from flang/include/flang/Common/leading-zero-bit-count.h
rename to FortranRuntime/include/flang/Common/leading-zero-bit-count.h
diff --git a/flang/include/flang/Common/optional.h b/FortranRuntime/include/flang/Common/optional.h
similarity index 100%
rename from flang/include/flang/Common/optional.h
rename to FortranRuntime/include/flang/Common/optional.h
diff --git a/flang/include/flang/Common/real.h b/FortranRuntime/include/flang/Common/real.h
similarity index 100%
rename from flang/include/flang/Common/real.h
rename to FortranRuntime/include/flang/Common/real.h
diff --git a/flang/include/flang/Common/reference-wrapper.h b/FortranRuntime/include/flang/Common/reference-wrapper.h
similarity index 100%
rename from flang/include/flang/Common/reference-wrapper.h
rename to FortranRuntime/include/flang/Common/reference-wrapper.h
diff --git a/flang/include/flang/Common/restorer.h b/FortranRuntime/include/flang/Common/restorer.h
similarity index 100%
rename from flang/include/flang/Common/restorer.h
rename to FortranRuntime/include/flang/Common/restorer.h
diff --git a/FortranRuntime/include/flang/Common/target-rounding.h b/FortranRuntime/include/flang/Common/target-rounding.h
new file mode 100644
index 00000000000000..970d8fb61fbd1b
--- /dev/null
+++ b/FortranRuntime/include/flang/Common/target-rounding.h
@@ -0,0 +1,40 @@
+//===-- include/flang/Common/target-rounding.h ------------------*- C++ -*-===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef FORTRAN_COMMON_TARGET_ROUNDING_H_
+#define FORTRAN_COMMON_TARGET_ROUNDING_H_
+
+
+#include "flang/Common/Fortran-consts.h"
+#include "flang/Common/enum-set.h"
+
+
+namespace Fortran::common {
+
+// Floating-point rounding control
+struct Rounding {
+ common::RoundingMode mode{common::RoundingMode::TiesToEven};
+ // When set, emulate status flag behavior peculiar to x86
+ // (viz., fail to set the Underflow flag when an inexact product of a
+ // multiplication is rounded up to a normal number from a subnormal
+ // in some rounding modes)
+#if __x86_64__ || __riscv || __loongarch__
+ bool x86CompatibleBehavior{true};
+#else
+ bool x86CompatibleBehavior{false};
+#endif
+};
+
+
+// These are ordered like the bits in a common fenv.h header file.
+ENUM_CLASS(RealFlag, InvalidArgument, Denorm, DivideByZero, Overflow, Underflow,
+ Inexact)
+using RealFlags = common::EnumSet<RealFlag, RealFlag_enumSize>;
+
+}
+#endif // FORTRAN_COMMON_TARGET_ROUNDING_H_
diff --git a/flang/include/flang/Common/uint128.h b/FortranRuntime/include/flang/Common/uint128.h
similarity index 100%
rename from flang/include/flang/Common/uint128.h
rename to FortranRuntime/include/flang/Common/uint128.h
diff --git a/flang/include/flang/Common/variant.h b/FortranRuntime/include/flang/Common/variant.h
similarity index 100%
rename from flang/include/flang/Common/variant.h
rename to FortranRuntime/include/flang/Common/variant.h
diff --git a/flang/include/flang/Common/visit.h b/FortranRuntime/include/flang/Common/visit.h
similarity index 100%
rename from flang/include/flang/Common/visit.h
rename to FortranRuntime/include/flang/Common/visit.h
diff --git a/flang/include/flang/Common/windows-include.h b/FortranRuntime/include/flang/Common/windows-include.h
similarity index 100%
rename from flang/include/flang/Common/windows-include.h
rename to FortranRuntime/include/flang/Common/windows-include.h
diff --git a/flang/include/flang/Runtime/CUDA/allocator.h b/FortranRuntime/include/flang/Runtime/CUDA/allocator.h
similarity index 100%
rename from flang/include/flang/Runtime/CUDA/allocator.h
rename to FortranRuntime/include/flang/Runtime/CUDA/allocator.h
diff --git a/flang/include/flang/Runtime/CUDA/descriptor.h b/FortranRuntime/include/flang/Runtime/CUDA/descriptor.h
similarity index 100%
rename from flang/include/flang/Runtime/CUDA/descriptor.h
rename to FortranRuntime/include/flang/Runtime/CUDA/descriptor.h
diff --git a/flang/include/flang/Runtime/allocatable.h b/FortranRuntime/include/flang/Runtime/allocatable.h
similarity index 100%
rename from flang/include/flang/Runtime/allocatable.h
rename to FortranRuntime/include/flang/Runtime/allocatable.h
diff --git a/flang/include/flang/Runtime/allocator-registry.h b/FortranRuntime/include/flang/Runtime/allocator-registry.h
similarity index 96%
rename from flang/include/flang/Runtime/allocator-registry.h
rename to FortranRuntime/include/flang/Runtime/allocator-registry.h
index acfada506fafc6..411cc68f58ec33 100644
--- a/flang/include/flang/Runtime/allocator-registry.h
+++ b/FortranRuntime/include/flang/Runtime/allocator-registry.h
@@ -1,4 +1,4 @@
-//===-- runtime/allocator-registry.h ----------------------------*- C++ -*-===//
+//===-- include/flang/Runtime/allocator-registry.h --------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/include/flang/Runtime/array-constructor.h b/FortranRuntime/include/flang/Runtime/array-constructor.h
similarity index 100%
rename from flang/include/flang/Runtime/array-constructor.h
rename to FortranRuntime/include/flang/Runtime/array-constructor.h
diff --git a/flang/include/flang/Runtime/assign.h b/FortranRuntime/include/flang/Runtime/assign.h
similarity index 100%
rename from flang/include/flang/Runtime/assign.h
rename to FortranRuntime/include/flang/Runtime/assign.h
diff --git a/flang/include/flang/Runtime/c-or-cpp.h b/FortranRuntime/include/flang/Runtime/c-or-cpp.h
similarity index 100%
rename from flang/include/flang/Runtime/c-or-cpp.h
rename to FortranRuntime/include/flang/Runtime/c-or-cpp.h
diff --git a/flang/include/flang/Runtime/character.h b/FortranRuntime/include/flang/Runtime/character.h
similarity index 100%
rename from flang/include/flang/Runtime/character.h
rename to FortranRuntime/include/flang/Runtime/character.h
diff --git a/flang/include/flang/Runtime/command.h b/FortranRuntime/include/flang/Runtime/command.h
similarity index 100%
rename from flang/include/flang/Runtime/command.h
rename to FortranRuntime/include/flang/Runtime/command.h
diff --git a/flang/include/flang/Runtime/cpp-type.h b/FortranRuntime/include/flang/Runtime/cpp-type.h
similarity index 98%
rename from flang/include/flang/Runtime/cpp-type.h
rename to FortranRuntime/include/flang/Runtime/cpp-type.h
index fe21dd544cf7d8..27b43de7d0f0f6 100644
--- a/flang/include/flang/Runtime/cpp-type.h
+++ b/FortranRuntime/include/flang/Runtime/cpp-type.h
@@ -11,7 +11,7 @@
#ifndef FORTRAN_RUNTIME_CPP_TYPE_H_
#define FORTRAN_RUNTIME_CPP_TYPE_H_
-#include "flang/Common/Fortran.h"
+#include "flang/Common/Fortran-consts.h"
#include "flang/Common/float128.h"
#include "flang/Common/uint128.h"
#include <complex>
diff --git a/flang/include/flang/Runtime/derived-api.h b/FortranRuntime/include/flang/Runtime/derived-api.h
similarity index 100%
rename from flang/include/flang/Runtime/derived-api.h
rename to FortranRuntime/include/flang/Runtime/derived-api.h
diff --git a/flang/include/flang/Runtime/descriptor.h b/FortranRuntime/include/flang/Runtime/descriptor.h
similarity index 99%
rename from flang/include/flang/Runtime/descriptor.h
rename to FortranRuntime/include/flang/Runtime/descriptor.h
index 030d0c1031fbaa..2fe5b11200cf6d 100644
--- a/flang/include/flang/Runtime/descriptor.h
+++ b/FortranRuntime/include/flang/Runtime/descriptor.h
@@ -18,7 +18,7 @@
// User C code is welcome to depend on that ISO_Fortran_binding.h file,
// but should never reference this internal header.
-#include "flang/ISO_Fortran_binding_wrapper.h"
+#include "flang/Common/ISO_Fortran_binding_wrapper.h"
#include "flang/Runtime/memory.h"
#include "flang/Runtime/type-code.h"
#include <algorithm>
diff --git a/flang/include/flang/Runtime/entry-names.h b/FortranRuntime/include/flang/Runtime/entry-names.h
similarity index 97%
rename from flang/include/flang/Runtime/entry-names.h
rename to FortranRuntime/include/flang/Runtime/entry-names.h
index 68582b92b54941..52de2496d9421d 100644
--- a/flang/include/flang/Runtime/entry-names.h
+++ b/FortranRuntime/include/flang/Runtime/entry-names.h
@@ -1,11 +1,10 @@
-/*===-- include/flang/Runtime/entry-names.h -------------------------*- C -*-=//
+/*===-- include/flang/Runtime/entry-names.h -------------------------*- C -*-===
*
* 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
*
- *===------------------------------------------------------------------------===
- */
+ *===----------------------------------------------------------------------===*/
/* Defines the macro RTNAME(n) which decorates the external name of a runtime
* library function or object with extra characters so that it
diff --git a/flang/include/flang/Runtime/exceptions.h b/FortranRuntime/include/flang/Runtime/exceptions.h
similarity index 91%
rename from flang/include/flang/Runtime/exceptions.h
rename to FortranRuntime/include/flang/Runtime/exceptions.h
index 1ab22da103a50f..1fb74e14e54d30 100644
--- a/flang/include/flang/Runtime/exceptions.h
+++ b/FortranRuntime/include/flang/Runtime/exceptions.h
@@ -1,4 +1,4 @@
-//===-- include/flang/Runtime/exceptions.h ----------------*- C++ -*-===//
+//===-- include/flang/Runtime/exceptions.h ----------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/include/flang/Runtime/execute.h b/FortranRuntime/include/flang/Runtime/execute.h
similarity index 93%
rename from flang/include/flang/Runtime/execute.h
rename to FortranRuntime/include/flang/Runtime/execute.h
index ca137b9d1823c4..ba3e950ca92941 100644
--- a/flang/include/flang/Runtime/execute.h
+++ b/FortranRuntime/include/flang/Runtime/execute.h
@@ -1,4 +1,4 @@
-//===-- include/flang/Runtime/command.h -------------------------*- C++ -*-===//
+//===-- include/flang/Runtime/execute.h -------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/include/flang/Runtime/extensions.h b/FortranRuntime/include/flang/Runtime/extensions.h
similarity index 100%
rename from flang/include/flang/Runtime/extensions.h
rename to FortranRuntime/include/flang/Runtime/extensions.h
diff --git a/flang/include/flang/Runtime/freestanding-tools.h b/FortranRuntime/include/flang/Runtime/freestanding-tools.h
similarity index 100%
rename from flang/include/flang/Runtime/freestanding-tools.h
rename to FortranRuntime/include/flang/Runtime/freestanding-tools.h
diff --git a/flang/include/flang/Runtime/inquiry.h b/FortranRuntime/include/flang/Runtime/inquiry.h
similarity index 94%
rename from flang/include/flang/Runtime/inquiry.h
rename to FortranRuntime/include/flang/Runtime/inquiry.h
index c7a7487f1a1b18..36ef929ed5b2f1 100644
--- a/flang/include/flang/Runtime/inquiry.h
+++ b/FortranRuntime/include/flang/Runtime/inquiry.h
@@ -1,4 +1,4 @@
-//===-- include/flang/Runtime/inquiry.h ----------------*- C++ -*-===//
+//===-- include/flang/Runtime/inquiry.h -------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/include/flang/Runtime/io-api.h b/FortranRuntime/include/flang/Runtime/io-api.h
similarity index 100%
rename from flang/include/flang/Runtime/io-api.h
rename to FortranRuntime/include/flang/Runtime/io-api.h
diff --git a/flang/include/flang/Runtime/iostat.h b/FortranRuntime/include/flang/Runtime/iostat.h
similarity index 100%
rename from flang/include/flang/Runtime/iostat.h
rename to FortranRuntime/include/flang/Runtime/iostat.h
diff --git a/flang/include/flang/Runtime/magic-numbers.h b/FortranRuntime/include/flang/Runtime/magic-numbers.h
similarity index 98%
rename from flang/include/flang/Runtime/magic-numbers.h
rename to FortranRuntime/include/flang/Runtime/magic-numbers.h
index bab0e9ae05299a..931df690766219 100644
--- a/flang/include/flang/Runtime/magic-numbers.h
+++ b/FortranRuntime/include/flang/Runtime/magic-numbers.h
@@ -1,10 +1,10 @@
-#if 0 /*===-- include/flang/Runtime/magic-numbers.h -----------------------===*/
-/*
+#if 0 /*===-- include/flang/Runtime/magic-numbers.h ---------------*- C -*-===*/
+ *
* 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
*
- *===----------------------------------------------------------------------===*/
+/*===----------------------------------------------------------------------===*/
#endif
#if 0
This header can be included into both Fortran and C.
diff --git a/flang/include/flang/Runtime/main.h b/FortranRuntime/include/flang/Runtime/main.h
similarity index 100%
rename from flang/include/flang/Runtime/main.h
rename to FortranRuntime/include/flang/Runtime/main.h
diff --git a/flang/include/flang/Runtime/matmul-instances.inc b/FortranRuntime/include/flang/Runtime/matmul-instances.inc
similarity index 100%
rename from flang/include/flang/Runtime/matmul-instances.inc
rename to FortranRuntime/include/flang/Runtime/matmul-instances.inc
diff --git a/flang/include/flang/Runtime/matmul-transpose.h b/FortranRuntime/include/flang/Runtime/matmul-transpose.h
similarity index 100%
rename from flang/include/flang/Runtime/matmul-transpose.h
rename to FortranRuntime/include/flang/Runtime/matmul-transpose.h
diff --git a/flang/include/flang/Runtime/matmul.h b/FortranRuntime/include/flang/Runtime/matmul.h
similarity index 100%
rename from flang/include/flang/Runtime/matmul.h
rename to FortranRuntime/include/flang/Runtime/matmul.h
diff --git a/flang/include/flang/Runtime/memory.h b/FortranRuntime/include/flang/Runtime/memory.h
similarity index 100%
rename from flang/include/flang/Runtime/memory.h
rename to FortranRuntime/include/flang/Runtime/memory.h
diff --git a/flang/include/flang/Runtime/misc-intrinsic.h b/FortranRuntime/include/flang/Runtime/misc-intrinsic.h
similarity index 100%
rename from flang/include/flang/Runtime/misc-intrinsic.h
rename to FortranRuntime/include/flang/Runtime/misc-intrinsic.h
diff --git a/flang/include/flang/Runtime/numeric.h b/FortranRuntime/include/flang/Runtime/numeric.h
similarity index 100%
rename from flang/include/flang/Runtime/numeric.h
rename to FortranRuntime/include/flang/Runtime/numeric.h
diff --git a/flang/include/flang/Runtime/pointer.h b/FortranRuntime/include/flang/Runtime/pointer.h
similarity index 100%
rename from flang/include/flang/Runtime/pointer.h
rename to FortranRuntime/include/flang/Runtime/pointer.h
diff --git a/flang/include/flang/Runtime/ragged.h b/FortranRuntime/include/flang/Runtime/ragged.h
similarity index 97%
rename from flang/include/flang/Runtime/ragged.h
rename to FortranRuntime/include/flang/Runtime/ragged.h
index f52a619c55b43e..ff157ea16f081e 100644
--- a/flang/include/flang/Runtime/ragged.h
+++ b/FortranRuntime/include/flang/Runtime/ragged.h
@@ -1,4 +1,4 @@
-//===-- Runtime/ragged.h ----------------------------------------*- C++ -*-===//
+//===-- include/flang/Runtime/ragged.h --------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/include/flang/Runtime/random.h b/FortranRuntime/include/flang/Runtime/random.h
similarity index 100%
rename from flang/include/flang/Runtime/random.h
rename to FortranRuntime/include/flang/Runtime/random.h
diff --git a/flang/include/flang/Runtime/reduce.h b/FortranRuntime/include/flang/Runtime/reduce.h
similarity index 100%
rename from flang/include/flang/Runtime/reduce.h
rename to FortranRuntime/include/flang/Runtime/reduce.h
diff --git a/flang/include/flang/Runtime/reduction.h b/FortranRuntime/include/flang/Runtime/reduction.h
similarity index 100%
rename from flang/include/flang/Runtime/reduction.h
rename to FortranRuntime/include/flang/Runtime/reduction.h
diff --git a/flang/include/flang/Runtime/stop.h b/FortranRuntime/include/flang/Runtime/stop.h
similarity index 100%
rename from flang/include/flang/Runtime/stop.h
rename to FortranRuntime/include/flang/Runtime/stop.h
diff --git a/flang/include/flang/Runtime/support.h b/FortranRuntime/include/flang/Runtime/support.h
similarity index 96%
rename from flang/include/flang/Runtime/support.h
rename to FortranRuntime/include/flang/Runtime/support.h
index ba9c2598bb0ddd..4a6d4357e87103 100644
--- a/flang/include/flang/Runtime/support.h
+++ b/FortranRuntime/include/flang/Runtime/support.h
@@ -10,7 +10,7 @@
#ifndef FORTRAN_RUNTIME_SUPPORT_H_
#define FORTRAN_RUNTIME_SUPPORT_H_
-#include "flang/ISO_Fortran_binding_wrapper.h"
+#include "flang/Common/ISO_Fortran_binding_wrapper.h"
#include "flang/Runtime/entry-names.h"
#include <cstddef>
#include <cstdint>
diff --git a/flang/include/flang/Runtime/temporary-stack.h b/FortranRuntime/include/flang/Runtime/temporary-stack.h
similarity index 100%
rename from flang/include/flang/Runtime/temporary-stack.h
rename to FortranRuntime/include/flang/Runtime/temporary-stack.h
diff --git a/flang/include/flang/Runtime/time-intrinsic.h b/FortranRuntime/include/flang/Runtime/time-intrinsic.h
similarity index 100%
rename from flang/include/flang/Runtime/time-intrinsic.h
rename to FortranRuntime/include/flang/Runtime/time-intrinsic.h
diff --git a/flang/include/flang/Runtime/transformational.h b/FortranRuntime/include/flang/Runtime/transformational.h
similarity index 100%
rename from flang/include/flang/Runtime/transformational.h
rename to FortranRuntime/include/flang/Runtime/transformational.h
diff --git a/flang/include/flang/Runtime/type-code.h b/FortranRuntime/include/flang/Runtime/type-code.h
similarity index 96%
rename from flang/include/flang/Runtime/type-code.h
rename to FortranRuntime/include/flang/Runtime/type-code.h
index 8e7314e0af1efc..3c1b03dfaa1140 100644
--- a/flang/include/flang/Runtime/type-code.h
+++ b/FortranRuntime/include/flang/Runtime/type-code.h
@@ -9,9 +9,9 @@
#ifndef FORTRAN_RUNTIME_TYPE_CODE_H_
#define FORTRAN_RUNTIME_TYPE_CODE_H_
-#include "flang/Common/Fortran.h"
+#include "flang/Common/Fortran-consts.h"
#include "flang/Common/optional.h"
-#include "flang/ISO_Fortran_binding_wrapper.h"
+#include "flang/Common/ISO_Fortran_binding_wrapper.h"
#include <utility>
namespace Fortran::runtime {
diff --git a/flang/unittests/Evaluate/fp-testing.h b/FortranRuntime/include/flang/Testing/fp-testing.h
similarity index 56%
rename from flang/unittests/Evaluate/fp-testing.h
rename to FortranRuntime/include/flang/Testing/fp-testing.h
index 22dfa2d7d80c60..16c6017e8529d5 100644
--- a/flang/unittests/Evaluate/fp-testing.h
+++ b/FortranRuntime/include/flang/Testing/fp-testing.h
@@ -1,12 +1,20 @@
+//===-- include/flang/Testing/fp-testing.h ----------------------*- C++ -*-===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
#ifndef FORTRAN_TEST_EVALUATE_FP_TESTING_H_
#define FORTRAN_TEST_EVALUATE_FP_TESTING_H_
-#include "flang/Evaluate/target.h"
+#include "flang/Common/target-rounding.h"
#include <fenv.h>
using Fortran::common::RoundingMode;
-using Fortran::evaluate::RealFlags;
-using Fortran::evaluate::Rounding;
+using Fortran::common::RealFlags;
+using Fortran::common::Rounding;
class ScopedHostFloatingPointEnvironment {
public:
diff --git a/flang/unittests/Evaluate/testing.h b/FortranRuntime/include/flang/Testing/testing.h
similarity index 80%
rename from flang/unittests/Evaluate/testing.h
rename to FortranRuntime/include/flang/Testing/testing.h
index 422e2853c05bc6..d763109d62d373 100644
--- a/flang/unittests/Evaluate/testing.h
+++ b/FortranRuntime/include/flang/Testing/testing.h
@@ -1,3 +1,11 @@
+//===-- include/flang/Testing/testing.h -------------------------*- C++ -*-===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
#ifndef FORTRAN_EVALUATE_TESTING_H_
#define FORTRAN_EVALUATE_TESTING_H_
diff --git a/FortranRuntime/lib/CMakeLists.txt b/FortranRuntime/lib/CMakeLists.txt
new file mode 100644
index 00000000000000..8c4382078a8e70
--- /dev/null
+++ b/FortranRuntime/lib/CMakeLists.txt
@@ -0,0 +1,12 @@
+#===-- lib/CMakeLists.txt --------------------------------------------------===#
+#
+# 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
+#
+#===------------------------------------------------------------------------===#
+
+add_subdirectory(Runtime)
+if (FORTRANRUNTIME_INCLUDE_TESTS)
+ add_subdirectory(Testing)
+endif ()
diff --git a/flang/lib/Decimal/big-radix-floating-point.h b/FortranRuntime/lib/Common/big-radix-floating-point.h
similarity index 98%
rename from flang/lib/Decimal/big-radix-floating-point.h
rename to FortranRuntime/lib/Common/big-radix-floating-point.h
index f9afebf5b3d703..7b8fb03710a3d4 100644
--- a/flang/lib/Decimal/big-radix-floating-point.h
+++ b/FortranRuntime/lib/Common/big-radix-floating-point.h
@@ -1,4 +1,4 @@
-//===-- lib/Decimal/big-radix-floating-point.h ------------------*- C++ -*-===//
+//===-- lib/Common/big-radix-floating-point.h -------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -24,8 +24,8 @@
#include "flang/Common/bit-population-count.h"
#include "flang/Common/leading-zero-bit-count.h"
#include "flang/Common/uint128.h"
-#include "flang/Decimal/binary-floating-point.h"
-#include "flang/Decimal/decimal.h"
+#include "flang/Common/binary-floating-point.h"
+#include "flang/Common/decimal.h"
#include <cinttypes>
#include <limits>
#include <type_traits>
diff --git a/flang/lib/Decimal/binary-to-decimal.cpp b/FortranRuntime/lib/Common/binary-to-decimal.cpp
similarity index 99%
rename from flang/lib/Decimal/binary-to-decimal.cpp
rename to FortranRuntime/lib/Common/binary-to-decimal.cpp
index b64865e95df24d..fb2caefdae8fa1 100644
--- a/flang/lib/Decimal/binary-to-decimal.cpp
+++ b/FortranRuntime/lib/Common/binary-to-decimal.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Decimal/binary-to-decimal.cpp ---------------------------------===//
+//===-- lib/Common/binary-to-decimal.cpp ------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -7,7 +7,7 @@
//===----------------------------------------------------------------------===//
#include "big-radix-floating-point.h"
-#include "flang/Decimal/decimal.h"
+#include "flang/Common/decimal.h"
#include <cassert>
#include <cfloat>
#include <string>
diff --git a/flang/lib/Decimal/decimal-to-binary.cpp b/FortranRuntime/lib/Common/decimal-to-binary.cpp
similarity index 99%
rename from flang/lib/Decimal/decimal-to-binary.cpp
rename to FortranRuntime/lib/Common/decimal-to-binary.cpp
index 94c51774237399..0ef24d3bcfecfc 100644
--- a/flang/lib/Decimal/decimal-to-binary.cpp
+++ b/FortranRuntime/lib/Common/decimal-to-binary.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Decimal/decimal-to-binary.cpp ---------------------------------===//
+//===-- lib/Common/decimal-to-binary.cpp ------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -9,8 +9,8 @@
#include "big-radix-floating-point.h"
#include "flang/Common/bit-population-count.h"
#include "flang/Common/leading-zero-bit-count.h"
-#include "flang/Decimal/binary-floating-point.h"
-#include "flang/Decimal/decimal.h"
+#include "flang/Common/binary-floating-point.h"
+#include "flang/Common/decimal.h"
#include "flang/Runtime/freestanding-tools.h"
#include <cinttypes>
#include <cstring>
diff --git a/FortranRuntime/lib/Runtime/CMakeLists.txt b/FortranRuntime/lib/Runtime/CMakeLists.txt
new file mode 100644
index 00000000000000..3402dd5fe6af8f
--- /dev/null
+++ b/FortranRuntime/lib/Runtime/CMakeLists.txt
@@ -0,0 +1,242 @@
+#===-- lib/Runtime/CMakeLists.txt ------------------------------------------===#
+#
+# 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
+#
+#===------------------------------------------------------------------------===#
+
+add_subdirectory(Float128Math)
+
+set(sources
+ ISO_Fortran_binding.cpp
+ allocator-registry.cpp
+ allocatable.cpp
+ array-constructor.cpp
+ assign.cpp
+ buffer.cpp
+ character.cpp
+ command.cpp
+ complex-powi.cpp
+ complex-reduction.c
+ connection.cpp
+ copy.cpp
+ derived-api.cpp
+ derived.cpp
+ descriptor-io.cpp
+ descriptor.cpp
+ dot-product.cpp
+ edit-input.cpp
+ edit-output.cpp
+ environment.cpp
+ exceptions.cpp
+ execute.cpp
+ extensions.cpp
+ external-unit.cpp
+ extrema.cpp
+ file.cpp
+ findloc.cpp
+ format.cpp
+ inquiry.cpp
+ internal-unit.cpp
+ io-api.cpp
+ io-api-minimal.cpp
+ io-error.cpp
+ io-stmt.cpp
+ iso_fortran_env_impl.f90
+ iostat.cpp
+ main.cpp
+ matmul-transpose.cpp
+ matmul.cpp
+ memory.cpp
+ misc-intrinsic.cpp
+ namelist.cpp
+ non-tbp-dio.cpp
+ numeric.cpp
+ pointer.cpp
+ product.cpp
+ pseudo-unit.cpp
+ ragged.cpp
+ random.cpp
+ reduce.cpp
+ reduction.cpp
+ stat.cpp
+ stop.cpp
+ sum.cpp
+ support.cpp
+ temporary-stack.cpp
+ terminator.cpp
+ time-intrinsic.cpp
+ tools.cpp
+ transformational.cpp
+ type-code.cpp
+ type-info.cpp
+ unit-map.cpp
+ unit.cpp
+ utf.cpp
+ ../Common/binary-to-decimal.cpp
+ ../Common/decimal-to-binary.cpp
+)
+
+# List of files that are buildable for all devices.
+set(supported_files
+ ISO_Fortran_binding.cpp
+ allocatable.cpp
+ allocator-registry.cpp
+ array-constructor.cpp
+ assign.cpp
+ buffer.cpp
+ character.cpp
+ connection.cpp
+ copy.cpp
+ derived-api.cpp
+ derived.cpp
+ descriptor.cpp
+ descriptor-io.cpp
+ dot-product.cpp
+ edit-input.cpp
+ edit-output.cpp
+ environment.cpp
+ extrema.cpp
+ external-unit.cpp
+ file.cpp
+ findloc.cpp
+ format.cpp
+ inquiry.cpp
+ internal-unit.cpp
+ io-api.cpp
+ io-api-minimal.cpp
+ io-error.cpp
+ io-stmt.cpp
+ iostat.cpp
+ matmul-transpose.cpp
+ matmul.cpp
+ memory.cpp
+ misc-intrinsic.cpp
+ namelist.cpp
+ non-tbp-dio.cpp
+ numeric.cpp
+ pointer.cpp
+ product.cpp
+ pseudo-unit.cpp
+ ragged.cpp
+ stat.cpp
+ sum.cpp
+ support.cpp
+ terminator.cpp
+ tools.cpp
+ transformational.cpp
+ type-code.cpp
+ type-info.cpp
+ unit.cpp
+ utf.cpp
+ )
+
+
+ set(public_headers "")
+ file(GLOB_RECURSE public_headers
+ "${FLANGRUNTIME_SOURCE_DIR}/include/flang/Runtime/*.h"
+ "${FLANGRUNTIME_SOURCE_DIR}/include/flang/Common/*.h"
+ )
+
+
+ set(private_headers "")
+ file(GLOB_RECURSE private_headers
+ "${FLANGRUNTIME_SOURCE_DIR}/lib/Runtime/*.h"
+ "${FLANGRUNTIME_SOURCE_DIR}/lib/Common/*.h"
+ )
+
+
+
+
+
+
+
+
+
+get_target_property(f128_sources
+ FortranFloat128MathILib INTERFACE_SOURCES
+ )
+if (f128_sources)
+ # The interface may define special macros for Float128Math files,
+ # so we need to propagate them.
+ get_target_property(f128_defs
+ FortranFloat128MathILib INTERFACE_COMPILE_DEFINITIONS
+ )
+ set_property(SOURCE ${f128_sources}
+ APPEND PROPERTY COMPILE_DEFINITIONS
+ ${f128_defs}
+ )
+ list(APPEND sources ${f128_sources})
+endif()
+
+
+
+
+
+
+
+
+
+
+
+
+if (NOT DEFINED WIN32)
+ add_fortranruntime_library(FortranRuntime STATIC
+ ${sources}
+ INSTALL_WITH_TOOLCHAIN
+ ADDITIONAL_HEADERS ${public_headers} ${private_headers}
+ )
+
+ # For unittests that link to FortranRuntime. Should link to the static version of the library.
+ add_library(FortranRuntime.static ALIAS FortranRuntime)
+else()
+ # ${sources} also contains Fortran files. CMake write the generated Fortran files into the same directory (lib/Runtime/iso_fortran_env_impl.mod), so we need to compile it only once and add the object files to different runtime version.
+ add_fortranruntime_library(FortranRuntime.obj OBJECT
+ ${sources}
+
+ ADDITIONAL_HEADERS ${public_headers} ${private_headers}
+ )
+
+ set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreaded)
+ add_fortranruntime_library(FortranRuntime.static STATIC $<TARGET_OBJECTS:FortranRuntime.obj> INSTALL_WITH_TOOLCHAIN #${sources}
+ )
+
+
+ set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreadedDLL)
+ add_fortranruntime_library(FortranRuntime.dynamic SHARED $<TARGET_OBJECTS:FortranRuntime.obj> INSTALL_WITH_TOOLCHAIN #${sources}
+ )
+
+
+ set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreadedDebug)
+ add_fortranruntime_library(FortranRuntime.static_dbg STATIC $<TARGET_OBJECTS:FortranRuntime.obj> INSTALL_WITH_TOOLCHAIN #${sources}
+ )
+
+ set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreadedDebugDLL)
+ add_fortranruntime_library(FortranRuntime.dynamic_dbg SHARED $<TARGET_OBJECTS:FortranRuntime.obj> INSTALL_WITH_TOOLCHAIN #${sources}
+ )
+ target_link_libraries(FortranRuntime.dynamic_dbg PRIVATE FortranRuntime.obj)
+
+ # Target for building all versions of the runtime
+ add_custom_target(FortranRuntime)
+ set_target_properties(FortranRuntime PROPERTIES FOLDER "Fortran Runtime/Meta")
+ add_dependencies(FortranRuntime FortranRuntime.static FortranRuntime.dynamic
+ FortranRuntime.static_dbg FortranRuntime.dynamic_dbg)
+
+ if (MSVC)
+ # The Fortran files compiled with flang-new assumes libcall functions such as `__udivti3`
+ # Add LLVM_ENABLE_RUNTIMES=compiler-rt for it to be available during the runtimes build
+ # FIXME: Can embed linker command --dependent-lib into object files as already done with FortranRuntime.<mode>.lib
+ if (NOT TARGET clang_rt.builtins-x86_64)
+ message(WARNING
+ "compiler-rt needed when compiling with msvc\n"
+ "Flang/LLVM will emit code that calls into libgcc/compiler-rt, but using the MSVC linker will only link Microsoft's CRT automatically\n"
+ "Add compiler-rt to LLVM_ENABLE_RUNTIMES to fix"
+ )
+ endif ()
+ target_link_libraries(FortranRuntime.static PUBLIC clang_rt.builtins-x86_64)
+ target_link_libraries(FortranRuntime.dynamic PUBLIC clang_rt.builtins-x86_64)
+ target_link_libraries(FortranRuntime.static_dbg PUBLIC clang_rt.builtins-x86_64)
+ target_link_libraries(FortranRuntime.dynamic_dbg PUBLIC clang_rt.builtins-x86_64)
+ endif ()
+endif()
diff --git a/flang/runtime/CUDA/CMakeLists.txt b/FortranRuntime/lib/Runtime/CUDA/CMakeLists.txt
similarity index 93%
rename from flang/runtime/CUDA/CMakeLists.txt
rename to FortranRuntime/lib/Runtime/CUDA/CMakeLists.txt
index 81055b2737c0f1..f75b854d1eb3ba 100644
--- a/flang/runtime/CUDA/CMakeLists.txt
+++ b/FortranRuntime/lib/Runtime/CUDA/CMakeLists.txt
@@ -1,4 +1,4 @@
-#===-- runtime/CUDA/CMakeLists.txt -----------------------------------------===#
+#===-- lib/Runtime/CUDA/CMakeLists.txt -------------------------------------===#
#
# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
# See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/CUDA/allocator.cpp b/FortranRuntime/lib/Runtime/CUDA/allocator.cpp
similarity index 94%
rename from flang/runtime/CUDA/allocator.cpp
rename to FortranRuntime/lib/Runtime/CUDA/allocator.cpp
index d4a473d58e86cd..379f52b45057a0 100644
--- a/flang/runtime/CUDA/allocator.cpp
+++ b/FortranRuntime/lib/Runtime/CUDA/allocator.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/CUDA/allocator.cpp ----------------------------------------===//
+//===-- lib/Runtime/CUDA/allocator.cpp --------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -11,7 +11,7 @@
#include "../stat.h"
#include "../terminator.h"
#include "../type-info.h"
-#include "flang/Common/Fortran.h"
+#include "flang/Support/Fortran.h"
#include "flang/ISO_Fortran_binding_wrapper.h"
#include "flang/Runtime/allocator-registry.h"
diff --git a/flang/runtime/CUDA/descriptor.cpp b/FortranRuntime/lib/Runtime/CUDA/descriptor.cpp
similarity index 91%
rename from flang/runtime/CUDA/descriptor.cpp
rename to FortranRuntime/lib/Runtime/CUDA/descriptor.cpp
index 1031b1e601b646..9664fea4ebc78a 100644
--- a/flang/runtime/CUDA/descriptor.cpp
+++ b/FortranRuntime/lib/Runtime/CUDA/descriptor.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/CUDA/descriptor.cpp ---------------------------------------===//
+//===-- lib/Runtime/CUDA/descriptor.cpp -------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/Float128Math/CMakeLists.txt b/FortranRuntime/lib/Runtime/Float128Math/CMakeLists.txt
similarity index 98%
rename from flang/runtime/Float128Math/CMakeLists.txt
rename to FortranRuntime/lib/Runtime/Float128Math/CMakeLists.txt
index a5f5bec1e7e4b8..1ff158c401855f 100644
--- a/flang/runtime/Float128Math/CMakeLists.txt
+++ b/FortranRuntime/lib/Runtime/Float128Math/CMakeLists.txt
@@ -1,4 +1,4 @@
-#===-- runtime/Float128Math/CMakeLists.txt ---------------------------------===#
+#===-- lib/Runtime/Float128Math/CMakeLists.txt -----------------------------===#
#
# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
# See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/Float128Math/acos.cpp b/FortranRuntime/lib/Runtime/Float128Math/acos.cpp
similarity index 87%
rename from flang/runtime/Float128Math/acos.cpp
rename to FortranRuntime/lib/Runtime/Float128Math/acos.cpp
index 14ff6944856844..7b15e4a0bfd3ae 100644
--- a/flang/runtime/Float128Math/acos.cpp
+++ b/FortranRuntime/lib/Runtime/Float128Math/acos.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/Float128Math/acos.cpp -------------------------------------===//
+//===-- lib/Runtime/Float128Math/acos.cpp -----------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/Float128Math/acosh.cpp b/FortranRuntime/lib/Runtime/Float128Math/acosh.cpp
similarity index 87%
rename from flang/runtime/Float128Math/acosh.cpp
rename to FortranRuntime/lib/Runtime/Float128Math/acosh.cpp
index 9d70804e44a470..c873259b4545b8 100644
--- a/flang/runtime/Float128Math/acosh.cpp
+++ b/FortranRuntime/lib/Runtime/Float128Math/acosh.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/Float128Math/acosh.cpp ------------------------------------===//
+//===-- lib/Runtime/Float128Math/acosh.cpp ----------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/Float128Math/asin.cpp b/FortranRuntime/lib/Runtime/Float128Math/asin.cpp
similarity index 87%
rename from flang/runtime/Float128Math/asin.cpp
rename to FortranRuntime/lib/Runtime/Float128Math/asin.cpp
index 6781b23f0363db..8866d51430197a 100644
--- a/flang/runtime/Float128Math/asin.cpp
+++ b/FortranRuntime/lib/Runtime/Float128Math/asin.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/Float128Math/asin.cpp -------------------------------------===//
+//===-- lib/Runtime/Float128Math/asin.cpp -----------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/Float128Math/asinh.cpp b/FortranRuntime/lib/Runtime/Float128Math/asinh.cpp
similarity index 87%
rename from flang/runtime/Float128Math/asinh.cpp
rename to FortranRuntime/lib/Runtime/Float128Math/asinh.cpp
index 1310bc61c1de0f..288193001ce1da 100644
--- a/flang/runtime/Float128Math/asinh.cpp
+++ b/FortranRuntime/lib/Runtime/Float128Math/asinh.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/Float128Math/asinh.cpp ------------------------------------===//
+//===-- lib/Runtime/Float128Math/asinh.cpp ----------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/Float128Math/atan.cpp b/FortranRuntime/lib/Runtime/Float128Math/atan.cpp
similarity index 87%
rename from flang/runtime/Float128Math/atan.cpp
rename to FortranRuntime/lib/Runtime/Float128Math/atan.cpp
index f01382df90c0ee..390c080b4d501b 100644
--- a/flang/runtime/Float128Math/atan.cpp
+++ b/FortranRuntime/lib/Runtime/Float128Math/atan.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/Float128Math/atan.cpp -------------------------------------===//
+//===-- lib/Runtime/Float128Math/atan.cpp -----------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/Float128Math/atan2.cpp b/FortranRuntime/lib/Runtime/Float128Math/atan2.cpp
similarity index 88%
rename from flang/runtime/Float128Math/atan2.cpp
rename to FortranRuntime/lib/Runtime/Float128Math/atan2.cpp
index dd646b0452b115..3c206b75704431 100644
--- a/flang/runtime/Float128Math/atan2.cpp
+++ b/FortranRuntime/lib/Runtime/Float128Math/atan2.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/Float128Math/atan2.cpp ------------------------------------===//
+//===-- lib/Runtime/Float128Math/atan2.cpp ----------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/Float128Math/atanh.cpp b/FortranRuntime/lib/Runtime/Float128Math/atanh.cpp
similarity index 87%
rename from flang/runtime/Float128Math/atanh.cpp
rename to FortranRuntime/lib/Runtime/Float128Math/atanh.cpp
index 5fc5ba5debc81a..77ceb188f04e42 100644
--- a/flang/runtime/Float128Math/atanh.cpp
+++ b/FortranRuntime/lib/Runtime/Float128Math/atanh.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/Float128Math/atanh.cpp ------------------------------------===//
+//===-- lib/Runtime/Float128Math/atanh.cpp ----------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/Float128Math/ceil.cpp b/FortranRuntime/lib/Runtime/Float128Math/ceil.cpp
similarity index 87%
rename from flang/runtime/Float128Math/ceil.cpp
rename to FortranRuntime/lib/Runtime/Float128Math/ceil.cpp
index ed4d164a62bedc..46bc253bd0922d 100644
--- a/flang/runtime/Float128Math/ceil.cpp
+++ b/FortranRuntime/lib/Runtime/Float128Math/ceil.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/Float128Math/ceil.cpp -------------------------------------===//
+//===-- lib/Runtime/Float128Math/ceil.cpp -----------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/Float128Math/complex-math.c b/FortranRuntime/lib/Runtime/Float128Math/complex-math.c
similarity index 92%
rename from flang/runtime/Float128Math/complex-math.c
rename to FortranRuntime/lib/Runtime/Float128Math/complex-math.c
index d0180c63a0d7bf..f34ef7da76e599 100644
--- a/flang/runtime/Float128Math/complex-math.c
+++ b/FortranRuntime/lib/Runtime/Float128Math/complex-math.c
@@ -1,11 +1,10 @@
-/*===-- runtime/Float128Math/complex-math.c -------------------------*- C -*-===
+/*===-- lib/Runtime/Float128Math/complex-math.c ---------------------*- C -*-===
*
* 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
*
- * ===-----------------------------------------------------------------------===
- */
+ *===----------------------------------------------------------------------===*/
#include "complex-math.h"
diff --git a/flang/runtime/Float128Math/complex-math.h b/FortranRuntime/lib/Runtime/Float128Math/complex-math.h
similarity index 96%
rename from flang/runtime/Float128Math/complex-math.h
rename to FortranRuntime/lib/Runtime/Float128Math/complex-math.h
index 81dd53a175d1aa..6f5c7954bab035 100644
--- a/flang/runtime/Float128Math/complex-math.h
+++ b/FortranRuntime/lib/Runtime/Float128Math/complex-math.h
@@ -1,4 +1,4 @@
-/*===-- runtime/Float128Math/complex-math.h -------------------------*- C -*-===
+/*===-- lib/Runtime/Float128Math/complex-math.h ---------------------*- C -*-===
*
* Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
* See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/Float128Math/cos.cpp b/FortranRuntime/lib/Runtime/Float128Math/cos.cpp
similarity index 87%
rename from flang/runtime/Float128Math/cos.cpp
rename to FortranRuntime/lib/Runtime/Float128Math/cos.cpp
index b93c92f275f791..8ce47151e2914b 100644
--- a/flang/runtime/Float128Math/cos.cpp
+++ b/FortranRuntime/lib/Runtime/Float128Math/cos.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/Float128Math/cos.cpp --------------------------------------===//
+//===-- lib/Runtime/Float128Math/cos.cpp ------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/Float128Math/cosh.cpp b/FortranRuntime/lib/Runtime/Float128Math/cosh.cpp
similarity index 87%
rename from flang/runtime/Float128Math/cosh.cpp
rename to FortranRuntime/lib/Runtime/Float128Math/cosh.cpp
index a3662a826dcb1c..f1ec45bcfb479d 100644
--- a/flang/runtime/Float128Math/cosh.cpp
+++ b/FortranRuntime/lib/Runtime/Float128Math/cosh.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/Float128Math/cosh.cpp -------------------------------------===//
+//===-- lib/Runtime/Float128Math/cosh.cpp -----------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/Float128Math/erf.cpp b/FortranRuntime/lib/Runtime/Float128Math/erf.cpp
similarity index 87%
rename from flang/runtime/Float128Math/erf.cpp
rename to FortranRuntime/lib/Runtime/Float128Math/erf.cpp
index 631f71c76effe7..010088467794d1 100644
--- a/flang/runtime/Float128Math/erf.cpp
+++ b/FortranRuntime/lib/Runtime/Float128Math/erf.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/Float128Math/erf.cpp --------------------------------------===//
+//===-- lib/Runtime/Float128Math/erf.cpp ------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/Float128Math/erfc.cpp b/FortranRuntime/lib/Runtime/Float128Math/erfc.cpp
similarity index 87%
rename from flang/runtime/Float128Math/erfc.cpp
rename to FortranRuntime/lib/Runtime/Float128Math/erfc.cpp
index ea3cd646d8c4ba..b226f8d2dc378b 100644
--- a/flang/runtime/Float128Math/erfc.cpp
+++ b/FortranRuntime/lib/Runtime/Float128Math/erfc.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/Float128Math/erfc.cpp -------------------------------------===//
+//===-- lib/Runtime/Float128Math/erfc.cpp -----------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/Float128Math/exp.cpp b/FortranRuntime/lib/Runtime/Float128Math/exp.cpp
similarity index 87%
rename from flang/runtime/Float128Math/exp.cpp
rename to FortranRuntime/lib/Runtime/Float128Math/exp.cpp
index b1161b0f29294c..e22f9df3579e96 100644
--- a/flang/runtime/Float128Math/exp.cpp
+++ b/FortranRuntime/lib/Runtime/Float128Math/exp.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/Float128Math/exp.cpp --------------------------------------===//
+//===-- lib/Runtime/Float128Math/exp.cpp ------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/Float128Math/exponent.cpp b/FortranRuntime/lib/Runtime/Float128Math/exponent.cpp
similarity index 90%
rename from flang/runtime/Float128Math/exponent.cpp
rename to FortranRuntime/lib/Runtime/Float128Math/exponent.cpp
index 1be1dd0d0ac8b8..f07bf30bd1096f 100644
--- a/flang/runtime/Float128Math/exponent.cpp
+++ b/FortranRuntime/lib/Runtime/Float128Math/exponent.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/Float128Math/exponent.cpp ---------------------------------===//
+//===-- lib/Runtime/Float128Math/exponent.cpp -------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/Float128Math/floor.cpp b/FortranRuntime/lib/Runtime/Float128Math/floor.cpp
similarity index 87%
rename from flang/runtime/Float128Math/floor.cpp
rename to FortranRuntime/lib/Runtime/Float128Math/floor.cpp
index 78a94984cac8a3..8744e6e2fec63c 100644
--- a/flang/runtime/Float128Math/floor.cpp
+++ b/FortranRuntime/lib/Runtime/Float128Math/floor.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/Float128Math/floor.cpp ------------------------------------===//
+//===-- lib/Runtime/Float128Math/floor.cpp ----------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/Float128Math/fma.cpp b/FortranRuntime/lib/Runtime/Float128Math/fma.cpp
similarity index 89%
rename from flang/runtime/Float128Math/fma.cpp
rename to FortranRuntime/lib/Runtime/Float128Math/fma.cpp
index ec67e8e6fba22b..198fec5d4bc356 100644
--- a/flang/runtime/Float128Math/fma.cpp
+++ b/FortranRuntime/lib/Runtime/Float128Math/fma.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/Float128Math/fma.cpp --------------------------------------===//
+//===-- lib/Runtime/Float128Math/fma.cpp ------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/Float128Math/fraction.cpp b/FortranRuntime/lib/Runtime/Float128Math/fraction.cpp
similarity index 87%
rename from flang/runtime/Float128Math/fraction.cpp
rename to FortranRuntime/lib/Runtime/Float128Math/fraction.cpp
index 8c9889b7f6871e..d4749bf3eb7e0e 100644
--- a/flang/runtime/Float128Math/fraction.cpp
+++ b/FortranRuntime/lib/Runtime/Float128Math/fraction.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/Float128Math/fraction.cpp ---------------------------------===//
+//===-- lib/Runtime/Float128Math/fraction.cpp -------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/Float128Math/hypot.cpp b/FortranRuntime/lib/Runtime/Float128Math/hypot.cpp
similarity index 88%
rename from flang/runtime/Float128Math/hypot.cpp
rename to FortranRuntime/lib/Runtime/Float128Math/hypot.cpp
index b4fa1d66bcfa6a..6542bf505060df 100644
--- a/flang/runtime/Float128Math/hypot.cpp
+++ b/FortranRuntime/lib/Runtime/Float128Math/hypot.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/Float128Math/hypot.cpp ------------------------------------===//
+//===-- lib/Runtime/Float128Math/hypot.cpp ----------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/Float128Math/j0.cpp b/FortranRuntime/lib/Runtime/Float128Math/j0.cpp
similarity index 87%
rename from flang/runtime/Float128Math/j0.cpp
rename to FortranRuntime/lib/Runtime/Float128Math/j0.cpp
index 9390a7eeb3c605..27e4338cdfc2b0 100644
--- a/flang/runtime/Float128Math/j0.cpp
+++ b/FortranRuntime/lib/Runtime/Float128Math/j0.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/Float128Math/j0.cpp ---------------------------------------===//
+//===-- lib/Runtime/Float128Math/j0.cpp -------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/Float128Math/j1.cpp b/FortranRuntime/lib/Runtime/Float128Math/j1.cpp
similarity index 87%
rename from flang/runtime/Float128Math/j1.cpp
rename to FortranRuntime/lib/Runtime/Float128Math/j1.cpp
index c54927123388c6..d3f897827f9f67 100644
--- a/flang/runtime/Float128Math/j1.cpp
+++ b/FortranRuntime/lib/Runtime/Float128Math/j1.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/Float128Math/j1.cpp ---------------------------------------===//
+//===-- lib/Runtime/Float128Math/j1.cpp -------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/Float128Math/jn.cpp b/FortranRuntime/lib/Runtime/Float128Math/jn.cpp
similarity index 87%
rename from flang/runtime/Float128Math/jn.cpp
rename to FortranRuntime/lib/Runtime/Float128Math/jn.cpp
index 15afd83400c320..681bb5b1ff3ad5 100644
--- a/flang/runtime/Float128Math/jn.cpp
+++ b/FortranRuntime/lib/Runtime/Float128Math/jn.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/Float128Math/jn.cpp ---------------------------------------===//
+//===-- lib/Runtime/Float128Math/jn.cpp -------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/Float128Math/lgamma.cpp b/FortranRuntime/lib/Runtime/Float128Math/lgamma.cpp
similarity index 87%
rename from flang/runtime/Float128Math/lgamma.cpp
rename to FortranRuntime/lib/Runtime/Float128Math/lgamma.cpp
index ac31c89a912b32..0426db2e3b98d3 100644
--- a/flang/runtime/Float128Math/lgamma.cpp
+++ b/FortranRuntime/lib/Runtime/Float128Math/lgamma.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/Float128Math/lgamma.cpp -----------------------------------===//
+//===-- lib/Runtime/Float128Math/lgamma.cpp ---------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/Float128Math/llround.cpp b/FortranRuntime/lib/Runtime/Float128Math/llround.cpp
similarity index 88%
rename from flang/runtime/Float128Math/llround.cpp
rename to FortranRuntime/lib/Runtime/Float128Math/llround.cpp
index b77281c507fe7c..4c9026cce00283 100644
--- a/flang/runtime/Float128Math/llround.cpp
+++ b/FortranRuntime/lib/Runtime/Float128Math/llround.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/Float128Math/llround.cpp ----------------------------------===//
+//===-- lib/Runtime/Float128Math/llround.cpp --------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/Float128Math/log.cpp b/FortranRuntime/lib/Runtime/Float128Math/log.cpp
similarity index 87%
rename from flang/runtime/Float128Math/log.cpp
rename to FortranRuntime/lib/Runtime/Float128Math/log.cpp
index 38e6b581fd849c..a5a431ae5ffbbb 100644
--- a/flang/runtime/Float128Math/log.cpp
+++ b/FortranRuntime/lib/Runtime/Float128Math/log.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/Float128Math/log.cpp --------------------------------------===//
+//===-- lib/Runtime/Float128Math/log.cpp ------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/Float128Math/log10.cpp b/FortranRuntime/lib/Runtime/Float128Math/log10.cpp
similarity index 87%
rename from flang/runtime/Float128Math/log10.cpp
rename to FortranRuntime/lib/Runtime/Float128Math/log10.cpp
index 3c89c0e707774f..9a83f57b6c736d 100644
--- a/flang/runtime/Float128Math/log10.cpp
+++ b/FortranRuntime/lib/Runtime/Float128Math/log10.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/Float128Math/log10.cpp ------------------------------------===//
+//===-- lib/Runtime/Float128Math/log10.cpp ----------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/Float128Math/lround.cpp b/FortranRuntime/lib/Runtime/Float128Math/lround.cpp
similarity index 87%
rename from flang/runtime/Float128Math/lround.cpp
rename to FortranRuntime/lib/Runtime/Float128Math/lround.cpp
index ce7a228038a1d3..65546881157948 100644
--- a/flang/runtime/Float128Math/lround.cpp
+++ b/FortranRuntime/lib/Runtime/Float128Math/lround.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/Float128Math/lround.cpp -----------------------------------===//
+//===-- lib/Runtime/Float128Math/lround.cpp ---------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/Float128Math/math-entries.h b/FortranRuntime/lib/Runtime/Float128Math/math-entries.h
similarity index 99%
rename from flang/runtime/Float128Math/math-entries.h
rename to FortranRuntime/lib/Runtime/Float128Math/math-entries.h
index 13fdab26470038..798efdfb1e120c 100644
--- a/flang/runtime/Float128Math/math-entries.h
+++ b/FortranRuntime/lib/Runtime/Float128Math/math-entries.h
@@ -1,4 +1,4 @@
-//===-- runtime/Float128Math/math-entries.h ---------------------*- C++ -*-===//
+//===-- lib/Runtime/Float128Math/math-entries.h -----------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/Float128Math/mod-real.cpp b/FortranRuntime/lib/Runtime/Float128Math/mod-real.cpp
similarity index 89%
rename from flang/runtime/Float128Math/mod-real.cpp
rename to FortranRuntime/lib/Runtime/Float128Math/mod-real.cpp
index 42e6ce76e2fa1b..e3b96d39e76ae6 100644
--- a/flang/runtime/Float128Math/mod-real.cpp
+++ b/FortranRuntime/lib/Runtime/Float128Math/mod-real.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/Float128Math/mod-real.cpp ---------------------------------===//
+//===-- lib/Runtime/Float128Math/mod-real.cpp -------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/Float128Math/modulo-real.cpp b/FortranRuntime/lib/Runtime/Float128Math/modulo-real.cpp
similarity index 89%
rename from flang/runtime/Float128Math/modulo-real.cpp
rename to FortranRuntime/lib/Runtime/Float128Math/modulo-real.cpp
index 13000aba8c8323..8edf59e9f59dd4 100644
--- a/flang/runtime/Float128Math/modulo-real.cpp
+++ b/FortranRuntime/lib/Runtime/Float128Math/modulo-real.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/Float128Math/modulo-real.cpp ------------------------------===//
+//===-- lib/Runtime/Float128Math/modulo-real.cpp ----------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/Float128Math/nearest.cpp b/FortranRuntime/lib/Runtime/Float128Math/nearest.cpp
similarity index 89%
rename from flang/runtime/Float128Math/nearest.cpp
rename to FortranRuntime/lib/Runtime/Float128Math/nearest.cpp
index 148ac4ef839160..8b9f142d79ff93 100644
--- a/flang/runtime/Float128Math/nearest.cpp
+++ b/FortranRuntime/lib/Runtime/Float128Math/nearest.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/Float128Math/nearest.cpp ----------------------------------===//
+//===-- lib/Runtime/Float128Math/nearest.cpp --------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/Float128Math/norm2.cpp b/FortranRuntime/lib/Runtime/Float128Math/norm2.cpp
similarity index 93%
rename from flang/runtime/Float128Math/norm2.cpp
rename to FortranRuntime/lib/Runtime/Float128Math/norm2.cpp
index 15c482f7f007ce..a0c26e40de0064 100644
--- a/flang/runtime/Float128Math/norm2.cpp
+++ b/FortranRuntime/lib/Runtime/Float128Math/norm2.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/Float128Math/norm2.cpp ------------------------------------===//
+//===-- lib/Runtime/Float128Math/norm2.cpp ----------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/Float128Math/numeric-template-specs.h b/FortranRuntime/lib/Runtime/Float128Math/numeric-template-specs.h
similarity index 96%
rename from flang/runtime/Float128Math/numeric-template-specs.h
rename to FortranRuntime/lib/Runtime/Float128Math/numeric-template-specs.h
index a0a77230c3e9eb..ca9696e18f6a92 100644
--- a/flang/runtime/Float128Math/numeric-template-specs.h
+++ b/FortranRuntime/lib/Runtime/Float128Math/numeric-template-specs.h
@@ -1,4 +1,4 @@
-//===-- runtime/Float128Math/numeric-template-specs.h -----------*- C++ -*-===//
+//===-- lib/Runtime/Float128Math/numeric-template-specs.h -------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/Float128Math/pow.cpp b/FortranRuntime/lib/Runtime/Float128Math/pow.cpp
similarity index 88%
rename from flang/runtime/Float128Math/pow.cpp
rename to FortranRuntime/lib/Runtime/Float128Math/pow.cpp
index 7a48828ee3e765..c11978ca068f23 100644
--- a/flang/runtime/Float128Math/pow.cpp
+++ b/FortranRuntime/lib/Runtime/Float128Math/pow.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/Float128Math/pow.cpp --------------------------------------===//
+//===-- lib/Runtime/Float128Math/pow.cpp ------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/Float128Math/random.cpp b/FortranRuntime/lib/Runtime/Float128Math/random.cpp
similarity index 89%
rename from flang/runtime/Float128Math/random.cpp
rename to FortranRuntime/lib/Runtime/Float128Math/random.cpp
index cda962b416144e..a9dc3c7a82b673 100644
--- a/flang/runtime/Float128Math/random.cpp
+++ b/FortranRuntime/lib/Runtime/Float128Math/random.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/Float128Math/random.cpp -----------------------------------===//
+//===-- lib/Runtime/Float128Math/random.cpp ---------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/Float128Math/round.cpp b/FortranRuntime/lib/Runtime/Float128Math/round.cpp
similarity index 89%
rename from flang/runtime/Float128Math/round.cpp
rename to FortranRuntime/lib/Runtime/Float128Math/round.cpp
index 6420c1bc9cd25d..5a9366b3af4785 100644
--- a/flang/runtime/Float128Math/round.cpp
+++ b/FortranRuntime/lib/Runtime/Float128Math/round.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/Float128Math/round.cpp ------------------------------------===//
+//===-- lib/Runtime/Float128Math/round.cpp ----------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/Float128Math/rrspacing.cpp b/FortranRuntime/lib/Runtime/Float128Math/rrspacing.cpp
similarity index 87%
rename from flang/runtime/Float128Math/rrspacing.cpp
rename to FortranRuntime/lib/Runtime/Float128Math/rrspacing.cpp
index feddac418eec39..2c501b3512c215 100644
--- a/flang/runtime/Float128Math/rrspacing.cpp
+++ b/FortranRuntime/lib/Runtime/Float128Math/rrspacing.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/Float128Math/rrspacing.cpp --------------------------------===//
+//===-- lib/Runtime/Float128Math/rrspacing.cpp ------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/Float128Math/scale.cpp b/FortranRuntime/lib/Runtime/Float128Math/scale.cpp
similarity index 90%
rename from flang/runtime/Float128Math/scale.cpp
rename to FortranRuntime/lib/Runtime/Float128Math/scale.cpp
index 0be958bd9f2a72..859c955b8114e0 100644
--- a/flang/runtime/Float128Math/scale.cpp
+++ b/FortranRuntime/lib/Runtime/Float128Math/scale.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/Float128Math/scale.cpp ------------------------------------===//
+//===-- lib/Runtime/Float128Math/scale.cpp ----------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/Float128Math/set-exponent.cpp b/FortranRuntime/lib/Runtime/Float128Math/set-exponent.cpp
similarity index 88%
rename from flang/runtime/Float128Math/set-exponent.cpp
rename to FortranRuntime/lib/Runtime/Float128Math/set-exponent.cpp
index 99c34af7962b9a..52258182871a14 100644
--- a/flang/runtime/Float128Math/set-exponent.cpp
+++ b/FortranRuntime/lib/Runtime/Float128Math/set-exponent.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/Float128Math/set-exponent.cpp -----------------------------===//
+//===-- lib/Runtime/Float128Math/set-exponent.cpp ---------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/Float128Math/sin.cpp b/FortranRuntime/lib/Runtime/Float128Math/sin.cpp
similarity index 87%
rename from flang/runtime/Float128Math/sin.cpp
rename to FortranRuntime/lib/Runtime/Float128Math/sin.cpp
index 8ebc3f9881586e..99aa4095c8cf1a 100644
--- a/flang/runtime/Float128Math/sin.cpp
+++ b/FortranRuntime/lib/Runtime/Float128Math/sin.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/Float128Math/sin.cpp --------------------------------------===//
+//===-- lib/Runtime/Float128Math/sin.cpp ------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/Float128Math/sinh.cpp b/FortranRuntime/lib/Runtime/Float128Math/sinh.cpp
similarity index 87%
rename from flang/runtime/Float128Math/sinh.cpp
rename to FortranRuntime/lib/Runtime/Float128Math/sinh.cpp
index aa716a3e51ef5a..a7dfe36737de43 100644
--- a/flang/runtime/Float128Math/sinh.cpp
+++ b/FortranRuntime/lib/Runtime/Float128Math/sinh.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/Float128Math/sinh.cpp -------------------------------------===//
+//===-- lib/Runtime/Float128Math/sinh.cpp -----------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/Float128Math/spacing.cpp b/FortranRuntime/lib/Runtime/Float128Math/spacing.cpp
similarity index 87%
rename from flang/runtime/Float128Math/spacing.cpp
rename to FortranRuntime/lib/Runtime/Float128Math/spacing.cpp
index a86c0b30e567ab..66a01851965840 100644
--- a/flang/runtime/Float128Math/spacing.cpp
+++ b/FortranRuntime/lib/Runtime/Float128Math/spacing.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/Float128Math/spacing.cpp ----------------------------------===//
+//===-- lib/Runtime/Float128Math/spacing.cpp --------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/Float128Math/sqrt.cpp b/FortranRuntime/lib/Runtime/Float128Math/sqrt.cpp
similarity index 87%
rename from flang/runtime/Float128Math/sqrt.cpp
rename to FortranRuntime/lib/Runtime/Float128Math/sqrt.cpp
index 83165a4c623191..cbc1e503d50fd9 100644
--- a/flang/runtime/Float128Math/sqrt.cpp
+++ b/FortranRuntime/lib/Runtime/Float128Math/sqrt.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/Float128Math/sqrt.cpp -------------------------------------===//
+//===-- lib/Runtime/Float128Math/sqrt.cpp -----------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/Float128Math/tan.cpp b/FortranRuntime/lib/Runtime/Float128Math/tan.cpp
similarity index 87%
rename from flang/runtime/Float128Math/tan.cpp
rename to FortranRuntime/lib/Runtime/Float128Math/tan.cpp
index 8f4b723ca977bd..dbe4627f585f14 100644
--- a/flang/runtime/Float128Math/tan.cpp
+++ b/FortranRuntime/lib/Runtime/Float128Math/tan.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/Float128Math/tan.cpp --------------------------------------===//
+//===-- lib/Runtime/Float128Math/tan.cpp ------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/Float128Math/tanh.cpp b/FortranRuntime/lib/Runtime/Float128Math/tanh.cpp
similarity index 87%
rename from flang/runtime/Float128Math/tanh.cpp
rename to FortranRuntime/lib/Runtime/Float128Math/tanh.cpp
index b43a89520b6797..37e40966ced722 100644
--- a/flang/runtime/Float128Math/tanh.cpp
+++ b/FortranRuntime/lib/Runtime/Float128Math/tanh.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/Float128Math/tanh.cpp -------------------------------------===//
+//===-- lib/Runtime/Float128Math/tanh.cpp -----------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/Float128Math/tgamma.cpp b/FortranRuntime/lib/Runtime/Float128Math/tgamma.cpp
similarity index 87%
rename from flang/runtime/Float128Math/tgamma.cpp
rename to FortranRuntime/lib/Runtime/Float128Math/tgamma.cpp
index 93f97800bdc966..07a019c6d9971f 100644
--- a/flang/runtime/Float128Math/tgamma.cpp
+++ b/FortranRuntime/lib/Runtime/Float128Math/tgamma.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/Float128Math/tgamma.cpp -----------------------------------===//
+//===-- lib/Runtime/Float128Math/tgamma.cpp ---------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/Float128Math/trunc.cpp b/FortranRuntime/lib/Runtime/Float128Math/trunc.cpp
similarity index 89%
rename from flang/runtime/Float128Math/trunc.cpp
rename to FortranRuntime/lib/Runtime/Float128Math/trunc.cpp
index ca15a739c030e8..9f38bdc18e73c4 100644
--- a/flang/runtime/Float128Math/trunc.cpp
+++ b/FortranRuntime/lib/Runtime/Float128Math/trunc.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/Float128Math/trunc.cpp ------------------------------------===//
+//===-- lib/Runtime/Float128Math/trunc.cpp ----------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/Float128Math/y0.cpp b/FortranRuntime/lib/Runtime/Float128Math/y0.cpp
similarity index 87%
rename from flang/runtime/Float128Math/y0.cpp
rename to FortranRuntime/lib/Runtime/Float128Math/y0.cpp
index d6f39aac1053a8..6eaa3396e7ea07 100644
--- a/flang/runtime/Float128Math/y0.cpp
+++ b/FortranRuntime/lib/Runtime/Float128Math/y0.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/Float128Math/y0.cpp ---------------------------------------===//
+//===-- lib/Runtime/Float128Math/y0.cpp -------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/Float128Math/y1.cpp b/FortranRuntime/lib/Runtime/Float128Math/y1.cpp
similarity index 87%
rename from flang/runtime/Float128Math/y1.cpp
rename to FortranRuntime/lib/Runtime/Float128Math/y1.cpp
index 477d36a9ea3c66..c9f48ea0e26546 100644
--- a/flang/runtime/Float128Math/y1.cpp
+++ b/FortranRuntime/lib/Runtime/Float128Math/y1.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/Float128Math/y1.cpp ---------------------------------------===//
+//===-- lib/Runtime/Float128Math/y1.cpp -------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/Float128Math/yn.cpp b/FortranRuntime/lib/Runtime/Float128Math/yn.cpp
similarity index 87%
rename from flang/runtime/Float128Math/yn.cpp
rename to FortranRuntime/lib/Runtime/Float128Math/yn.cpp
index 3a040cc8858970..6bc5f4996a88d5 100644
--- a/flang/runtime/Float128Math/yn.cpp
+++ b/FortranRuntime/lib/Runtime/Float128Math/yn.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/Float128Math/yn.cpp ---------------------------------------===//
+//===-- lib/Runtime/Float128Math/yn.cpp -------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/ISO_Fortran_binding.cpp b/FortranRuntime/lib/Runtime/ISO_Fortran_binding.cpp
similarity index 98%
rename from flang/runtime/ISO_Fortran_binding.cpp
rename to FortranRuntime/lib/Runtime/ISO_Fortran_binding.cpp
index fe22026f31f55f..d2fab4bbc30b4d 100644
--- a/flang/runtime/ISO_Fortran_binding.cpp
+++ b/FortranRuntime/lib/Runtime/ISO_Fortran_binding.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/ISO_Fortran_binding.cpp -----------------------------------===//
+//===-- lib/Runtime/ISO_Fortran_binding.cpp ---------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -11,7 +11,7 @@
#include "ISO_Fortran_util.h"
#include "terminator.h"
-#include "flang/ISO_Fortran_binding_wrapper.h"
+#include "flang/Common/ISO_Fortran_binding_wrapper.h"
#include "flang/Runtime/descriptor.h"
#include "flang/Runtime/pointer.h"
#include "flang/Runtime/type-code.h"
diff --git a/flang/runtime/ISO_Fortran_util.h b/FortranRuntime/lib/Runtime/ISO_Fortran_util.h
similarity index 96%
rename from flang/runtime/ISO_Fortran_util.h
rename to FortranRuntime/lib/Runtime/ISO_Fortran_util.h
index dd0eeef80bb896..c45e8fc7a8d253 100644
--- a/flang/runtime/ISO_Fortran_util.h
+++ b/FortranRuntime/lib/Runtime/ISO_Fortran_util.h
@@ -1,4 +1,4 @@
-//===-- runtime/ISO_Fortran_util.h ------------------------------*- C++ -*-===//
+//===-- lib/Runtime/ISO_Fortran_util.h --------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -12,7 +12,7 @@
// Internal utils for establishing CFI_cdesc_t descriptors.
#include "terminator.h"
-#include "flang/ISO_Fortran_binding_wrapper.h"
+#include "flang/Common/ISO_Fortran_binding_wrapper.h"
#include "flang/Runtime/descriptor.h"
#include "flang/Runtime/type-code.h"
#include <cstdlib>
diff --git a/flang/runtime/allocatable.cpp b/FortranRuntime/lib/Runtime/allocatable.cpp
similarity index 98%
rename from flang/runtime/allocatable.cpp
rename to FortranRuntime/lib/Runtime/allocatable.cpp
index 5e065f47636a89..e3b43a5f813935 100644
--- a/flang/runtime/allocatable.cpp
+++ b/FortranRuntime/lib/Runtime/allocatable.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/allocatable.cpp -------------------------------------------===//
+//===-- lib/Runtime/allocatable.cpp -----------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -12,7 +12,7 @@
#include "stat.h"
#include "terminator.h"
#include "type-info.h"
-#include "flang/ISO_Fortran_binding_wrapper.h"
+#include "flang/Common/ISO_Fortran_binding_wrapper.h"
#include "flang/Runtime/assign.h"
#include "flang/Runtime/descriptor.h"
diff --git a/flang/runtime/allocator-registry.cpp b/FortranRuntime/lib/Runtime/allocator-registry.cpp
similarity index 94%
rename from flang/runtime/allocator-registry.cpp
rename to FortranRuntime/lib/Runtime/allocator-registry.cpp
index f5670331d6dbe2..68fb8b80680558 100644
--- a/flang/runtime/allocator-registry.cpp
+++ b/FortranRuntime/lib/Runtime/allocator-registry.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/allocator-registry.cpp ------------------------------------===//
+//===-- lib/Runtime/allocator-registry.cpp ----------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/array-constructor.cpp b/FortranRuntime/lib/Runtime/array-constructor.cpp
similarity index 99%
rename from flang/runtime/array-constructor.cpp
rename to FortranRuntime/lib/Runtime/array-constructor.cpp
index 72e08feff7fd10..287d054887abf0 100644
--- a/flang/runtime/array-constructor.cpp
+++ b/FortranRuntime/lib/Runtime/array-constructor.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/array-constructor.cpp -------------------------------------===//
+//===-- lib/Runtime/array-constructor.cpp -----------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/assign-impl.h b/FortranRuntime/lib/Runtime/assign-impl.h
similarity index 93%
rename from flang/runtime/assign-impl.h
rename to FortranRuntime/lib/Runtime/assign-impl.h
index f07a501d1d1263..6bc8ef78c38a90 100644
--- a/flang/runtime/assign-impl.h
+++ b/FortranRuntime/lib/Runtime/assign-impl.h
@@ -1,4 +1,4 @@
-//===-- runtime/assign-impl.h -----------------------------------*- C++ -*-===//
+//===-- lib/Runtime/assign-impl.h -------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/assign.cpp b/FortranRuntime/lib/Runtime/assign.cpp
similarity index 99%
rename from flang/runtime/assign.cpp
rename to FortranRuntime/lib/Runtime/assign.cpp
index d558ada51cd21a..7c5eb135d4cfdf 100644
--- a/flang/runtime/assign.cpp
+++ b/FortranRuntime/lib/Runtime/assign.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/assign.cpp ------------------------------------------------===//
+//===-- lib/Runtime/assign.cpp ----------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/buffer.cpp b/FortranRuntime/lib/Runtime/buffer.cpp
similarity index 92%
rename from flang/runtime/buffer.cpp
rename to FortranRuntime/lib/Runtime/buffer.cpp
index 7b4869d69c2e51..ce78fe34503c46 100644
--- a/flang/runtime/buffer.cpp
+++ b/FortranRuntime/lib/Runtime/buffer.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/buffer.cpp ------------------------------------------------===//
+//===-- lib/Runtime/buffer.cpp ----------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/buffer.h b/FortranRuntime/lib/Runtime/buffer.h
similarity index 99%
rename from flang/runtime/buffer.h
rename to FortranRuntime/lib/Runtime/buffer.h
index 41a1abb1b2d907..24e43734552e99 100644
--- a/flang/runtime/buffer.h
+++ b/FortranRuntime/lib/Runtime/buffer.h
@@ -1,4 +1,4 @@
-//===-- runtime/buffer.h ----------------------------------------*- C++ -*-===//
+//===-- lib/Runtime/buffer.h ------------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/character.cpp b/FortranRuntime/lib/Runtime/character.cpp
similarity index 99%
rename from flang/runtime/character.cpp
rename to FortranRuntime/lib/Runtime/character.cpp
index 5049247397eb3c..73d3d93c5015f6 100644
--- a/flang/runtime/character.cpp
+++ b/FortranRuntime/lib/Runtime/character.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/character.cpp ---------------------------------------------===//
+//===-- lib/Runtime/character.cpp -------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/command.cpp b/FortranRuntime/lib/Runtime/command.cpp
similarity index 98%
rename from flang/runtime/command.cpp
rename to FortranRuntime/lib/Runtime/command.cpp
index a555e26f96a66c..50a084714e69a4 100644
--- a/flang/runtime/command.cpp
+++ b/FortranRuntime/lib/Runtime/command.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/command.cpp -----------------------------------------------===//
+//===-- lib/Runtime/command.cpp ---------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/complex-powi.cpp b/FortranRuntime/lib/Runtime/complex-powi.cpp
similarity index 91%
rename from flang/runtime/complex-powi.cpp
rename to FortranRuntime/lib/Runtime/complex-powi.cpp
index 77031e40242791..2eacf56386b193 100644
--- a/flang/runtime/complex-powi.cpp
+++ b/FortranRuntime/lib/Runtime/complex-powi.cpp
@@ -1,11 +1,10 @@
-/*===-- flang/runtime/complex-powi.cpp ----------------------------*- C++ -*-===
- *
- * 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
- *
- * ===-----------------------------------------------------------------------===
- */
+//===-- lib/Runtime/complex-powi.cpp ----------------------------*- C++ -*-===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
#include "flang/Common/float128.h"
#include "flang/Runtime/entry-names.h"
#include <cstdint>
diff --git a/flang/runtime/complex-reduction.c b/FortranRuntime/lib/Runtime/complex-reduction.c
similarity index 97%
rename from flang/runtime/complex-reduction.c
rename to FortranRuntime/lib/Runtime/complex-reduction.c
index 37ce3fa410016b..138174e9122b1c 100644
--- a/flang/runtime/complex-reduction.c
+++ b/FortranRuntime/lib/Runtime/complex-reduction.c
@@ -1,11 +1,10 @@
-/*===-- flang/runtime/complex-reduction.c ---------------------------*- C -*-===
+/*===-- lib/Runtime/complex-reduction.c -----------------------------*- C -*-===
*
* 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
*
- * ===-----------------------------------------------------------------------===
- */
+ *===----------------------------------------------------------------------===*/
#include "complex-reduction.h"
#include <float.h>
diff --git a/flang/runtime/complex-reduction.h b/FortranRuntime/lib/Runtime/complex-reduction.h
similarity index 97%
rename from flang/runtime/complex-reduction.h
rename to FortranRuntime/lib/Runtime/complex-reduction.h
index b0f19622fdb1a5..1ca5b9a33c4640 100644
--- a/flang/runtime/complex-reduction.h
+++ b/FortranRuntime/lib/Runtime/complex-reduction.h
@@ -1,11 +1,10 @@
-/*===-- flang/runtime/complex-reduction.h ---------------------------*- C -*-===
+/*===-- lib/Runtime/complex-reduction.h -----------------------------*- C -*-===
*
* 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
*
- * ===-----------------------------------------------------------------------===
- */
+ *===----------------------------------------------------------------------===*/
/* Wraps the C++-coded complex-valued SUM and PRODUCT reductions with
* C-coded wrapper functions returning _Complex values, to avoid problems
diff --git a/flang/runtime/connection.cpp b/FortranRuntime/lib/Runtime/connection.cpp
similarity index 96%
rename from flang/runtime/connection.cpp
rename to FortranRuntime/lib/Runtime/connection.cpp
index f24f0e832eb484..f9e91f1f193ba0 100644
--- a/flang/runtime/connection.cpp
+++ b/FortranRuntime/lib/Runtime/connection.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/connection.cpp --------------------------------------------===//
+//===-- lib/Runtime/connection.cpp ------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/connection.h b/FortranRuntime/lib/Runtime/connection.h
similarity index 98%
rename from flang/runtime/connection.h
rename to FortranRuntime/lib/Runtime/connection.h
index 6f1ea90a160e5e..f74e94ff6fb4a3 100644
--- a/flang/runtime/connection.h
+++ b/FortranRuntime/lib/Runtime/connection.h
@@ -1,4 +1,4 @@
-//===-- runtime/connection.h ------------------------------------*- C++ -*-===//
+//===-- lib/Runtime/connection.h --------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/copy.cpp b/FortranRuntime/lib/Runtime/copy.cpp
similarity index 99%
rename from flang/runtime/copy.cpp
rename to FortranRuntime/lib/Runtime/copy.cpp
index b20f68f019498b..72a86e3b80a7d5 100644
--- a/flang/runtime/copy.cpp
+++ b/FortranRuntime/lib/Runtime/copy.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/copy.cpp -------------------------------------------------===//
+//===-- lib/Runtime/copy.cpp ------------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/copy.h b/FortranRuntime/lib/Runtime/copy.h
similarity index 93%
rename from flang/runtime/copy.h
rename to FortranRuntime/lib/Runtime/copy.h
index 542660530bfb65..6d37b075e74504 100644
--- a/flang/runtime/copy.h
+++ b/FortranRuntime/lib/Runtime/copy.h
@@ -1,4 +1,4 @@
-//===-- runtime/copy.h ------------------------------------------*- C++ -*-===//
+//===-- lib/Runtime/copy.h --------------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/derived-api.cpp b/FortranRuntime/lib/Runtime/derived-api.cpp
similarity index 98%
rename from flang/runtime/derived-api.cpp
rename to FortranRuntime/lib/Runtime/derived-api.cpp
index eca784be208d10..0bcdd45ddbbaec 100644
--- a/flang/runtime/derived-api.cpp
+++ b/FortranRuntime/lib/Runtime/derived-api.cpp
@@ -1,5 +1,4 @@
-//===-- runtime/derived-api.cpp
-//-----------------------------------------------===//
+//===-- lib/Runtime/derived-api.cpp -----------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/derived.cpp b/FortranRuntime/lib/Runtime/derived.cpp
similarity index 99%
rename from flang/runtime/derived.cpp
rename to FortranRuntime/lib/Runtime/derived.cpp
index 659f54fa344bb0..04d765211db63b 100644
--- a/flang/runtime/derived.cpp
+++ b/FortranRuntime/lib/Runtime/derived.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/derived.cpp -----------------------------------------------===//
+//===-- lib/Runtime/derived.cpp ---------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/derived.h b/FortranRuntime/lib/Runtime/derived.h
similarity index 94%
rename from flang/runtime/derived.h
rename to FortranRuntime/lib/Runtime/derived.h
index b4863df8db417c..27c04c7cc56969 100644
--- a/flang/runtime/derived.h
+++ b/FortranRuntime/lib/Runtime/derived.h
@@ -1,4 +1,4 @@
-//===-- runtime/derived.h -------------------------------------------------===//
+//===-- lib/Runtime/derived.h -----------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/descriptor-io.cpp b/FortranRuntime/lib/Runtime/descriptor-io.cpp
similarity index 98%
rename from flang/runtime/descriptor-io.cpp
rename to FortranRuntime/lib/Runtime/descriptor-io.cpp
index 380ad425d925f0..896fad16a67e8a 100644
--- a/flang/runtime/descriptor-io.cpp
+++ b/FortranRuntime/lib/Runtime/descriptor-io.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/descriptor-io.cpp -----------------------------------------===//
+//===-- lib/Runtime/descriptor-io.cpp ---------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/descriptor-io.h b/FortranRuntime/lib/Runtime/descriptor-io.h
similarity index 99%
rename from flang/runtime/descriptor-io.h
rename to FortranRuntime/lib/Runtime/descriptor-io.h
index ff5f683c6da52f..58cb091f852596 100644
--- a/flang/runtime/descriptor-io.h
+++ b/FortranRuntime/lib/Runtime/descriptor-io.h
@@ -1,4 +1,4 @@
-//===-- runtime/descriptor-io.h ---------------------------------*- C++ -*-===//
+//===-- lib/Runtime/descriptor-io.h -----------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/descriptor.cpp b/FortranRuntime/lib/Runtime/descriptor.cpp
similarity index 99%
rename from flang/runtime/descriptor.cpp
rename to FortranRuntime/lib/Runtime/descriptor.cpp
index 32f43e89dc7a36..f064fe3dcc32e9 100644
--- a/flang/runtime/descriptor.cpp
+++ b/FortranRuntime/lib/Runtime/descriptor.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/descriptor.cpp --------------------------------------------===//
+//===-- lib/Runtime/descriptor.cpp ------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/dot-product.cpp b/FortranRuntime/lib/Runtime/dot-product.cpp
similarity index 99%
rename from flang/runtime/dot-product.cpp
rename to FortranRuntime/lib/Runtime/dot-product.cpp
index 977698269bcb46..9eb22790e38a69 100644
--- a/flang/runtime/dot-product.cpp
+++ b/FortranRuntime/lib/Runtime/dot-product.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/dot-product.cpp -------------------------------------------===//
+//===-- lib/Runtime/dot-product.cpp -----------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/edit-input.cpp b/FortranRuntime/lib/Runtime/edit-input.cpp
similarity index 99%
rename from flang/runtime/edit-input.cpp
rename to FortranRuntime/lib/Runtime/edit-input.cpp
index 2cee35e23f31a3..6ebb0e7aca4ade 100644
--- a/flang/runtime/edit-input.cpp
+++ b/FortranRuntime/lib/Runtime/edit-input.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/edit-input.cpp --------------------------------------------===//
+//===-- lib/Runtime/edit-input.cpp ------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/edit-input.h b/FortranRuntime/lib/Runtime/edit-input.h
similarity index 95%
rename from flang/runtime/edit-input.h
rename to FortranRuntime/lib/Runtime/edit-input.h
index a90180b8ee2ebd..96dc3f561c22a7 100644
--- a/flang/runtime/edit-input.h
+++ b/FortranRuntime/lib/Runtime/edit-input.h
@@ -1,4 +1,4 @@
-//===-- runtime/edit-input.h ------------------------------------*- C++ -*-===//
+//===-- lib/Runtime/edit-input.h --------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -11,7 +11,7 @@
#include "format.h"
#include "io-stmt.h"
-#include "flang/Decimal/decimal.h"
+#include "flang/Common/decimal.h"
namespace Fortran::runtime::io {
diff --git a/flang/runtime/edit-output.cpp b/FortranRuntime/lib/Runtime/edit-output.cpp
similarity index 99%
rename from flang/runtime/edit-output.cpp
rename to FortranRuntime/lib/Runtime/edit-output.cpp
index 9d60732258bfbc..ccaf8085f016fd 100644
--- a/flang/runtime/edit-output.cpp
+++ b/FortranRuntime/lib/Runtime/edit-output.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/edit-output.cpp -------------------------------------------===//
+//===-- lib/Runtime/edit-output.cpp -----------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/edit-output.h b/FortranRuntime/lib/Runtime/edit-output.h
similarity index 98%
rename from flang/runtime/edit-output.h
rename to FortranRuntime/lib/Runtime/edit-output.h
index 365bc2e2a4d10b..7f303020a83a84 100644
--- a/flang/runtime/edit-output.h
+++ b/FortranRuntime/lib/Runtime/edit-output.h
@@ -1,4 +1,4 @@
-//===-- runtime/edit-output.h -----------------------------------*- C++ -*-===//
+//===-- lib/Runtime/edit-output.h -------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -21,7 +21,7 @@
#include "format.h"
#include "io-stmt.h"
#include "flang/Common/uint128.h"
-#include "flang/Decimal/decimal.h"
+#include "flang/Common/decimal.h"
namespace Fortran::runtime::io {
diff --git a/flang/runtime/emit-encoded.h b/FortranRuntime/lib/Runtime/emit-encoded.h
similarity index 98%
rename from flang/runtime/emit-encoded.h
rename to FortranRuntime/lib/Runtime/emit-encoded.h
index 4b5e3900788357..f07fcced488435 100644
--- a/flang/runtime/emit-encoded.h
+++ b/FortranRuntime/lib/Runtime/emit-encoded.h
@@ -1,4 +1,4 @@
-//===-- runtime/emit-encoded.h ----------------------------------*- C++ -*-===//
+//===-- lib/Runtime/emit-encoded.h ------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/environment-default-list.h b/FortranRuntime/lib/Runtime/environment-default-list.h
old mode 100755
new mode 100644
similarity index 85%
rename from flang/runtime/environment-default-list.h
rename to FortranRuntime/lib/Runtime/environment-default-list.h
index 4da261b10b9a84..6b7542516e7134
--- a/flang/runtime/environment-default-list.h
+++ b/FortranRuntime/lib/Runtime/environment-default-list.h
@@ -1,11 +1,10 @@
-/*===-- runtime/environment-default-list.h --------------------------*- C -*-===
+/*===-- lib/Runtime/environment-default-list.h ----------------------*- C -*-===
*
* 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
*
- * ===-----------------------------------------------------------------------===
- */
+ *===----------------------------------------------------------------------===*/
#ifndef FORTRAN_RUNTIME_ENVIRONMENT_DEFAULT_LIST_H_
#define FORTRAN_RUNTIME_ENVIRONMENT_DEFAULT_LIST_H_
diff --git a/flang/runtime/environment.cpp b/FortranRuntime/lib/Runtime/environment.cpp
similarity index 98%
rename from flang/runtime/environment.cpp
rename to FortranRuntime/lib/Runtime/environment.cpp
index 52b1d99ba536ed..272914877988a5 100644
--- a/flang/runtime/environment.cpp
+++ b/FortranRuntime/lib/Runtime/environment.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/environment.cpp -------------------------------------------===//
+//===-- lib/Runtime/environment.cpp -----------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/environment.h b/FortranRuntime/lib/Runtime/environment.h
similarity index 95%
rename from flang/runtime/environment.h
rename to FortranRuntime/lib/Runtime/environment.h
index b8b9f10e4e57f5..71526d2b85d74c 100644
--- a/flang/runtime/environment.h
+++ b/FortranRuntime/lib/Runtime/environment.h
@@ -1,4 +1,4 @@
-//===-- runtime/environment.h -----------------------------------*- C++ -*-===//
+//===-- lib/Runtime/environment.h -------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -10,7 +10,7 @@
#define FORTRAN_RUNTIME_ENVIRONMENT_H_
#include "flang/Common/optional.h"
-#include "flang/Decimal/decimal.h"
+#include "flang/Common/decimal.h"
struct EnvironmentDefaultList;
diff --git a/flang/runtime/exceptions.cpp b/FortranRuntime/lib/Runtime/exceptions.cpp
similarity index 96%
rename from flang/runtime/exceptions.cpp
rename to FortranRuntime/lib/Runtime/exceptions.cpp
index 8239c556bcea97..7739130ae2346a 100644
--- a/flang/runtime/exceptions.cpp
+++ b/FortranRuntime/lib/Runtime/exceptions.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/exceptions.cpp --------------------------------------===//
+//===-- lib/Runtime/exceptions.cpp ------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/execute.cpp b/FortranRuntime/lib/Runtime/execute.cpp
similarity index 99%
rename from flang/runtime/execute.cpp
rename to FortranRuntime/lib/Runtime/execute.cpp
index c7f8f386d81f4f..77aac164242612 100644
--- a/flang/runtime/execute.cpp
+++ b/FortranRuntime/lib/Runtime/execute.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/execute.cpp -----------------------------------------------===//
+//===-- lib/Runtime/execute.cpp ---------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/extensions.cpp b/FortranRuntime/lib/Runtime/extensions.cpp
similarity index 98%
rename from flang/runtime/extensions.cpp
rename to FortranRuntime/lib/Runtime/extensions.cpp
index be3833db88b07a..e75fa75893a82b 100644
--- a/flang/runtime/extensions.cpp
+++ b/FortranRuntime/lib/Runtime/extensions.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/extensions.cpp --------------------------------------------===//
+//===-- lib/Runtime/extensions.cpp ------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/external-unit.cpp b/FortranRuntime/lib/Runtime/external-unit.cpp
similarity index 99%
rename from flang/runtime/external-unit.cpp
rename to FortranRuntime/lib/Runtime/external-unit.cpp
index d17a92622f8448..f5fa2c31dafc4e 100644
--- a/flang/runtime/external-unit.cpp
+++ b/FortranRuntime/lib/Runtime/external-unit.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/external-unit.cpp -----------------------------------------===//
+//===-- lib/Runtime/external-unit.cpp ---------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/extrema.cpp b/FortranRuntime/lib/Runtime/extrema.cpp
similarity index 99%
rename from flang/runtime/extrema.cpp
rename to FortranRuntime/lib/Runtime/extrema.cpp
index d6e9633372f524..be9da63d7bd6b8 100644
--- a/flang/runtime/extrema.cpp
+++ b/FortranRuntime/lib/Runtime/extrema.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/extrema.cpp -----------------------------------------------===//
+//===-- lib/Runtime/extrema.cpp ---------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/file.cpp b/FortranRuntime/lib/Runtime/file.cpp
similarity index 99%
rename from flang/runtime/file.cpp
rename to FortranRuntime/lib/Runtime/file.cpp
index ec772903242b80..44e3850cdfcb13 100644
--- a/flang/runtime/file.cpp
+++ b/FortranRuntime/lib/Runtime/file.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/file.cpp --------------------------------------------------===//
+//===-- lib/Runtime/file.cpp ------------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/file.h b/FortranRuntime/lib/Runtime/file.h
similarity index 98%
rename from flang/runtime/file.h
rename to FortranRuntime/lib/Runtime/file.h
index c06acbb9904cc1..6890cb62d66652 100644
--- a/flang/runtime/file.h
+++ b/FortranRuntime/lib/Runtime/file.h
@@ -1,4 +1,4 @@
-//===-- runtime/file.h ------------------------------------------*- C++ -*-===//
+//===-- lib/Runtime/file.h --------------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/findloc.cpp b/FortranRuntime/lib/Runtime/findloc.cpp
similarity index 99%
rename from flang/runtime/findloc.cpp
rename to FortranRuntime/lib/Runtime/findloc.cpp
index 674a21ae50b853..da5fe0c0a0a467 100644
--- a/flang/runtime/findloc.cpp
+++ b/FortranRuntime/lib/Runtime/findloc.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/findloc.cpp -----------------------------------------------===//
+//===-- lib/Runtime/findloc.cpp ---------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/format-implementation.h b/FortranRuntime/lib/Runtime/format-implementation.h
similarity index 99%
rename from flang/runtime/format-implementation.h
rename to FortranRuntime/lib/Runtime/format-implementation.h
index 46204ca927c135..2ed6006c3b2fa0 100644
--- a/flang/runtime/format-implementation.h
+++ b/FortranRuntime/lib/Runtime/format-implementation.h
@@ -1,4 +1,4 @@
-//===-- runtime/format-implementation.h -------------------------*- C++ -*-===//
+//===-- lib/Runtime/format-implementation.h ---------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -16,7 +16,7 @@
#include "io-stmt.h"
#include "memory.h"
#include "flang/Common/format.h"
-#include "flang/Decimal/decimal.h"
+#include "flang/Common/decimal.h"
#include "flang/Runtime/main.h"
#include <algorithm>
#include <cstring>
diff --git a/flang/runtime/format.cpp b/FortranRuntime/lib/Runtime/format.cpp
similarity index 92%
rename from flang/runtime/format.cpp
rename to FortranRuntime/lib/Runtime/format.cpp
index 433acce4b73739..73a61f785c23b8 100644
--- a/flang/runtime/format.cpp
+++ b/FortranRuntime/lib/Runtime/format.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/format.cpp ------------------------------------------------===//
+//===-- lib/Runtime/format.cpp ----------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/format.h b/FortranRuntime/lib/Runtime/format.h
similarity index 98%
rename from flang/runtime/format.h
rename to FortranRuntime/lib/Runtime/format.h
index 5329f2482d3e46..b9c6979d1c2c98 100644
--- a/flang/runtime/format.h
+++ b/FortranRuntime/lib/Runtime/format.h
@@ -1,4 +1,4 @@
-//===-- runtime/format.h ----------------------------------------*- C++ -*-===//
+//===-- lib/Runtime/format.h ------------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -13,9 +13,9 @@
#include "environment.h"
#include "io-error.h"
-#include "flang/Common/Fortran.h"
+#include "flang/Common/Fortran-consts.h"
#include "flang/Common/optional.h"
-#include "flang/Decimal/decimal.h"
+#include "flang/Common/decimal.h"
#include "flang/Runtime/freestanding-tools.h"
#include <cinttypes>
diff --git a/flang/runtime/inquiry.cpp b/FortranRuntime/lib/Runtime/inquiry.cpp
similarity index 97%
rename from flang/runtime/inquiry.cpp
rename to FortranRuntime/lib/Runtime/inquiry.cpp
index 9fbcaa96fa3c43..9a5ef0cea210db 100644
--- a/flang/runtime/inquiry.cpp
+++ b/FortranRuntime/lib/Runtime/inquiry.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/inquiry.cpp --------------------------------------===//
+//===-- lib/Runtime/inquiry.cpp ---------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/internal-unit.cpp b/FortranRuntime/lib/Runtime/internal-unit.cpp
similarity index 98%
rename from flang/runtime/internal-unit.cpp
rename to FortranRuntime/lib/Runtime/internal-unit.cpp
index f28700ee015815..95d371a49ac187 100644
--- a/flang/runtime/internal-unit.cpp
+++ b/FortranRuntime/lib/Runtime/internal-unit.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/internal-unit.cpp -----------------------------------------===//
+//===-- lib/Runtime/internal-unit.cpp ---------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/internal-unit.h b/FortranRuntime/lib/Runtime/internal-unit.h
similarity index 97%
rename from flang/runtime/internal-unit.h
rename to FortranRuntime/lib/Runtime/internal-unit.h
index a0ee6353eeda3b..444bc9ab515994 100644
--- a/flang/runtime/internal-unit.h
+++ b/FortranRuntime/lib/Runtime/internal-unit.h
@@ -1,4 +1,4 @@
-//===-- runtime/internal-unit.h ---------------------------------*- C++ -*-===//
+//===-- lib/Runtime/internal-unit.h -----------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/io-api-common.h b/FortranRuntime/lib/Runtime/io-api-common.h
similarity index 98%
rename from flang/runtime/io-api-common.h
rename to FortranRuntime/lib/Runtime/io-api-common.h
index c7b86cab73a525..9b4c3405b0991e 100644
--- a/flang/runtime/io-api-common.h
+++ b/FortranRuntime/lib/Runtime/io-api-common.h
@@ -1,4 +1,4 @@
-//===-- runtime/io-api-common.h ---------------------------------*- C++ -*-===//
+//===-- lib/Runtime/io-api-common.h -----------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/io-api-minimal.cpp b/FortranRuntime/lib/Runtime/io-api-minimal.cpp
similarity index 98%
rename from flang/runtime/io-api-minimal.cpp
rename to FortranRuntime/lib/Runtime/io-api-minimal.cpp
index ad76fe3de0324c..6bc262cae78458 100644
--- a/flang/runtime/io-api-minimal.cpp
+++ b/FortranRuntime/lib/Runtime/io-api-minimal.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/io-api-minimal.cpp ----------------------------------------===//
+//===-- lib/Runtime/io-api-minimal.cpp --------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/io-api.cpp b/FortranRuntime/lib/Runtime/io-api.cpp
similarity index 99%
rename from flang/runtime/io-api.cpp
rename to FortranRuntime/lib/Runtime/io-api.cpp
index e3c6b9e5ca8959..f4a396d4c49a45 100644
--- a/flang/runtime/io-api.cpp
+++ b/FortranRuntime/lib/Runtime/io-api.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/io-api.cpp ------------------------------------------------===//
+//===-- lib/Runtime/io-api.cpp ----------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/io-error.cpp b/FortranRuntime/lib/Runtime/io-error.cpp
similarity index 98%
rename from flang/runtime/io-error.cpp
rename to FortranRuntime/lib/Runtime/io-error.cpp
index 7a90966f81047f..053667462058de 100644
--- a/flang/runtime/io-error.cpp
+++ b/FortranRuntime/lib/Runtime/io-error.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/io-error.cpp ----------------------------------------------===//
+//===-- lib/Runtime/io-error.cpp --------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/io-error.h b/FortranRuntime/lib/Runtime/io-error.h
similarity index 97%
rename from flang/runtime/io-error.h
rename to FortranRuntime/lib/Runtime/io-error.h
index 426573e2faf00c..b03e07567a0607 100644
--- a/flang/runtime/io-error.h
+++ b/FortranRuntime/lib/Runtime/io-error.h
@@ -1,4 +1,4 @@
-//===-- runtime/io-error.h --------------------------------------*- C++ -*-===//
+//===-- lib/Runtime/io-error.h ----------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/io-stmt.cpp b/FortranRuntime/lib/Runtime/io-stmt.cpp
similarity index 99%
rename from flang/runtime/io-stmt.cpp
rename to FortranRuntime/lib/Runtime/io-stmt.cpp
index 265bd0dc9d9499..80c96710eb49ca 100644
--- a/flang/runtime/io-stmt.cpp
+++ b/FortranRuntime/lib/Runtime/io-stmt.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/io-stmt.cpp -----------------------------------------------===//
+//===-- lib/Runtime/io-stmt.cpp ---------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/io-stmt.h b/FortranRuntime/lib/Runtime/io-stmt.h
similarity index 99%
rename from flang/runtime/io-stmt.h
rename to FortranRuntime/lib/Runtime/io-stmt.h
index 2e0ca46078ecdc..e90e64c8fd1ff3 100644
--- a/flang/runtime/io-stmt.h
+++ b/FortranRuntime/lib/Runtime/io-stmt.h
@@ -1,4 +1,4 @@
-//===-- runtime/io-stmt.h ---------------------------------------*- C++ -*-===//
+//===-- lib/Runtime/io-stmt.h -----------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/iostat.cpp b/FortranRuntime/lib/Runtime/iostat.cpp
similarity index 98%
rename from flang/runtime/iostat.cpp
rename to FortranRuntime/lib/Runtime/iostat.cpp
index 39e224cb01286b..f23567be4910da 100644
--- a/flang/runtime/iostat.cpp
+++ b/FortranRuntime/lib/Runtime/iostat.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/iostat.cpp ------------------------------------------------===//
+//===-- lib/Runtime/iostat.cpp ----------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/module/iso_fortran_env_impl.f90 b/FortranRuntime/lib/Runtime/iso_fortran_env_impl.f90
similarity index 98%
rename from flang/module/iso_fortran_env_impl.f90
rename to FortranRuntime/lib/Runtime/iso_fortran_env_impl.f90
index 4de54dda7bab1c..1a4da69266c55b 100644
--- a/flang/module/iso_fortran_env_impl.f90
+++ b/FortranRuntime/lib/Runtime/iso_fortran_env_impl.f90
@@ -1,4 +1,4 @@
-!===-- module/iso_fortran_env_impl.f90 --=--------------------------------===!
+!===-- lib/Runtime/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.
diff --git a/flang/runtime/lock.h b/FortranRuntime/lib/Runtime/lock.h
similarity index 97%
rename from flang/runtime/lock.h
rename to FortranRuntime/lib/Runtime/lock.h
index 46ca28703a45b4..75c1adb12a8c62 100644
--- a/flang/runtime/lock.h
+++ b/FortranRuntime/lib/Runtime/lock.h
@@ -1,4 +1,4 @@
-//===-- runtime/lock.h ------------------------------------------*- C++ -*-===//
+//===-- lib/Runtime/lock.h --------------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/main.cpp b/FortranRuntime/lib/Runtime/main.cpp
similarity index 94%
rename from flang/runtime/main.cpp
rename to FortranRuntime/lib/Runtime/main.cpp
index 96454989581b71..3fe985e524548d 100644
--- a/flang/runtime/main.cpp
+++ b/FortranRuntime/lib/Runtime/main.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/main.cpp --------------------------------------------------===//
+//===-- lib/Runtime/main.cpp ------------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/matmul-transpose.cpp b/FortranRuntime/lib/Runtime/matmul-transpose.cpp
similarity index 99%
rename from flang/runtime/matmul-transpose.cpp
rename to FortranRuntime/lib/Runtime/matmul-transpose.cpp
index 283472650a1c69..d493333dfa9877 100644
--- a/flang/runtime/matmul-transpose.cpp
+++ b/FortranRuntime/lib/Runtime/matmul-transpose.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/matmul-transpose.cpp --------------------------------------===//
+//===-- lib/Runtime/matmul-transpose.cpp ------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/matmul.cpp b/FortranRuntime/lib/Runtime/matmul.cpp
similarity index 99%
rename from flang/runtime/matmul.cpp
rename to FortranRuntime/lib/Runtime/matmul.cpp
index 252557e2f9e7ad..124369e72886c5 100644
--- a/flang/runtime/matmul.cpp
+++ b/FortranRuntime/lib/Runtime/matmul.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/matmul.cpp ------------------------------------------------===//
+//===-- lib/Runtime/matmul.cpp ----------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/memory.cpp b/FortranRuntime/lib/Runtime/memory.cpp
similarity index 93%
rename from flang/runtime/memory.cpp
rename to FortranRuntime/lib/Runtime/memory.cpp
index c7068ad6479a12..4a811107ca220a 100644
--- a/flang/runtime/memory.cpp
+++ b/FortranRuntime/lib/Runtime/memory.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/memory.cpp ------------------------------------------------===//
+//===-- lib/Runtime/memory.cpp ----------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/misc-intrinsic.cpp b/FortranRuntime/lib/Runtime/misc-intrinsic.cpp
similarity index 98%
rename from flang/runtime/misc-intrinsic.cpp
rename to FortranRuntime/lib/Runtime/misc-intrinsic.cpp
index f7d893829fc0d3..b942d762e76ab3 100644
--- a/flang/runtime/misc-intrinsic.cpp
+++ b/FortranRuntime/lib/Runtime/misc-intrinsic.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/misc-intrinsic.cpp ----------------------------------------===//
+//===-- lib/Runtime/misc-intrinsic.cpp --------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/namelist.cpp b/FortranRuntime/lib/Runtime/namelist.cpp
similarity index 99%
rename from flang/runtime/namelist.cpp
rename to FortranRuntime/lib/Runtime/namelist.cpp
index af092de70f7819..e6229d56577568 100644
--- a/flang/runtime/namelist.cpp
+++ b/FortranRuntime/lib/Runtime/namelist.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/namelist.cpp ----------------------------------------------===//
+//===-- lib/Runtime/namelist.cpp --------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/namelist.h b/FortranRuntime/lib/Runtime/namelist.h
similarity index 96%
rename from flang/runtime/namelist.h
rename to FortranRuntime/lib/Runtime/namelist.h
index 25216a75e9367d..4694b3104a9c75 100644
--- a/flang/runtime/namelist.h
+++ b/FortranRuntime/lib/Runtime/namelist.h
@@ -1,4 +1,4 @@
-//===-- runtime/namelist.h --------------------------------------*- C++ -*-===//
+//===-- lib/Runtime/namelist.h ----------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/non-tbp-dio.cpp b/FortranRuntime/lib/Runtime/non-tbp-dio.cpp
similarity index 93%
rename from flang/runtime/non-tbp-dio.cpp
rename to FortranRuntime/lib/Runtime/non-tbp-dio.cpp
index 9419adb7631cc9..9fa04397bc9610 100644
--- a/flang/runtime/non-tbp-dio.cpp
+++ b/FortranRuntime/lib/Runtime/non-tbp-dio.cpp
@@ -1,4 +1,4 @@
-//===-- flang/runtime/non-tbp-dio.cpp ---------------------------*- C++ -*-===//
+//===-- lib/Runtime/non-tbp-dio.cpp -----------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/non-tbp-dio.h b/FortranRuntime/lib/Runtime/non-tbp-dio.h
similarity index 93%
rename from flang/runtime/non-tbp-dio.h
rename to FortranRuntime/lib/Runtime/non-tbp-dio.h
index 05038a264ed992..0a45c96a3f2e25 100644
--- a/flang/runtime/non-tbp-dio.h
+++ b/FortranRuntime/lib/Runtime/non-tbp-dio.h
@@ -1,4 +1,4 @@
-//===-- flang/runtime/non-tbp-dio.h -----------------------------*- C++ -*-===//
+//===-- lib/Runtime/non-tbp-dio.h -------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -22,7 +22,8 @@
#ifndef FORTRAN_RUNTIME_NON_TBP_DIO_H_
#define FORTRAN_RUNTIME_NON_TBP_DIO_H_
-#include "flang/Common/Fortran.h"
+#include "flang/Common/Fortran-consts.h"
+#include "flang/Common/api-attrs.h"
#include <cstddef>
namespace Fortran::runtime::typeInfo {
diff --git a/flang/runtime/numeric-templates.h b/FortranRuntime/lib/Runtime/numeric-templates.h
similarity index 99%
rename from flang/runtime/numeric-templates.h
rename to FortranRuntime/lib/Runtime/numeric-templates.h
index 1b43498a6bfd12..640c6d17c4b580 100644
--- a/flang/runtime/numeric-templates.h
+++ b/FortranRuntime/lib/Runtime/numeric-templates.h
@@ -1,4 +1,4 @@
-//===-- runtime/numeric-templates.h -----------------------------*- C++ -*-===//
+//===-- lib/Runtime/numeric-templates.h -------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/numeric.cpp b/FortranRuntime/lib/Runtime/numeric.cpp
similarity index 99%
rename from flang/runtime/numeric.cpp
rename to FortranRuntime/lib/Runtime/numeric.cpp
index 9a8ddc6615564d..b0f68a7fc81d29 100644
--- a/flang/runtime/numeric.cpp
+++ b/FortranRuntime/lib/Runtime/numeric.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/numeric.cpp -----------------------------------------------===//
+//===-- lib/Runtime/numeric.cpp ---------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/pointer.cpp b/FortranRuntime/lib/Runtime/pointer.cpp
similarity index 99%
rename from flang/runtime/pointer.cpp
rename to FortranRuntime/lib/Runtime/pointer.cpp
index 2979181ddd61bd..fba9e639fa37a8 100644
--- a/flang/runtime/pointer.cpp
+++ b/FortranRuntime/lib/Runtime/pointer.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/pointer.cpp -----------------------------------------------===//
+//===-- lib/Runtime/pointer.cpp ---------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/product.cpp b/FortranRuntime/lib/Runtime/product.cpp
similarity index 98%
rename from flang/runtime/product.cpp
rename to FortranRuntime/lib/Runtime/product.cpp
index 7fc0fcd3b107de..e4a6e81bd0c508 100644
--- a/flang/runtime/product.cpp
+++ b/FortranRuntime/lib/Runtime/product.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/product.cpp -----------------------------------------------===//
+//===-- lib/Runtime/product.cpp ---------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/pseudo-unit.cpp b/FortranRuntime/lib/Runtime/pseudo-unit.cpp
similarity index 98%
rename from flang/runtime/pseudo-unit.cpp
rename to FortranRuntime/lib/Runtime/pseudo-unit.cpp
index 526afd11d916e9..62c6b1df5071c7 100644
--- a/flang/runtime/pseudo-unit.cpp
+++ b/FortranRuntime/lib/Runtime/pseudo-unit.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/pseudo-unit.cpp -------------------------------------------===//
+//===-- lib/Runtime/pseudo-unit.cpp -----------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/ragged.cpp b/FortranRuntime/lib/Runtime/ragged.cpp
similarity index 97%
rename from flang/runtime/ragged.cpp
rename to FortranRuntime/lib/Runtime/ragged.cpp
index a4d9e541ba5311..681a800e29dca7 100644
--- a/flang/runtime/ragged.cpp
+++ b/FortranRuntime/lib/Runtime/ragged.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/ragged.cpp ------------------------------------------------===//
+//===-- lib/Runtime/ragged.cpp ----------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/random-templates.h b/FortranRuntime/lib/Runtime/random-templates.h
similarity index 97%
rename from flang/runtime/random-templates.h
rename to FortranRuntime/lib/Runtime/random-templates.h
index f34422f6f5d9ac..4faca63ba34b9d 100644
--- a/flang/runtime/random-templates.h
+++ b/FortranRuntime/lib/Runtime/random-templates.h
@@ -1,4 +1,4 @@
-//===-- runtime/random-templates.h ------------------------------*- C++ -*-===//
+//===-- lib/Runtime/random-templates.h --------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/random.cpp b/FortranRuntime/lib/Runtime/random.cpp
similarity index 98%
rename from flang/runtime/random.cpp
rename to FortranRuntime/lib/Runtime/random.cpp
index 69de9b8c96fb5d..343b0a389fcaf6 100644
--- a/flang/runtime/random.cpp
+++ b/FortranRuntime/lib/Runtime/random.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/random.cpp ------------------------------------------------===//
+//===-- lib/Runtime/random.cpp ----------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/reduce.cpp b/FortranRuntime/lib/Runtime/reduce.cpp
similarity index 99%
rename from flang/runtime/reduce.cpp
rename to FortranRuntime/lib/Runtime/reduce.cpp
index 2f4bb6ea159cf4..c3e7ef74363431 100644
--- a/flang/runtime/reduce.cpp
+++ b/FortranRuntime/lib/Runtime/reduce.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/reduce.cpp ------------------------------------------------===//
+//===-- lib/Runtime/reduce.cpp ----------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/reduction-templates.h b/FortranRuntime/lib/Runtime/reduction-templates.h
similarity index 99%
rename from flang/runtime/reduction-templates.h
rename to FortranRuntime/lib/Runtime/reduction-templates.h
index a51404c9637620..ba193a9f0e3b9d 100644
--- a/flang/runtime/reduction-templates.h
+++ b/FortranRuntime/lib/Runtime/reduction-templates.h
@@ -1,4 +1,4 @@
-//===-- runtime/reduction-templates.h ---------------------------*- C++ -*-===//
+//===-- lib/Runtime/reduction-templates.h -----------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/reduction.cpp b/FortranRuntime/lib/Runtime/reduction.cpp
similarity index 99%
rename from flang/runtime/reduction.cpp
rename to FortranRuntime/lib/Runtime/reduction.cpp
index 074a270cb50838..0de7dd07b17a5b 100644
--- a/flang/runtime/reduction.cpp
+++ b/FortranRuntime/lib/Runtime/reduction.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/reduction.cpp ---------------------------------------------===//
+//===-- lib/Runtime/reduction.cpp -------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/stack.h b/FortranRuntime/lib/Runtime/stack.h
similarity index 98%
rename from flang/runtime/stack.h
rename to FortranRuntime/lib/Runtime/stack.h
index b6e6edb595e9ad..974ccb9d30b0eb 100644
--- a/flang/runtime/stack.h
+++ b/FortranRuntime/lib/Runtime/stack.h
@@ -1,4 +1,4 @@
-//===-- runtime/stack.h -----------------------------------------*- C++ -*-===//
+//===-- lib/Runtime/stack.h -------------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/stat.cpp b/FortranRuntime/lib/Runtime/stat.cpp
similarity index 97%
rename from flang/runtime/stat.cpp
rename to FortranRuntime/lib/Runtime/stat.cpp
index 525a4e36cdc773..d483f75998a746 100644
--- a/flang/runtime/stat.cpp
+++ b/FortranRuntime/lib/Runtime/stat.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/stat.cpp --------------------------------------------------===//
+//===-- lib/Runtime/stat.cpp ------------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/stat.h b/FortranRuntime/lib/Runtime/stat.h
similarity index 95%
rename from flang/runtime/stat.h
rename to FortranRuntime/lib/Runtime/stat.h
index 71faeb027d9085..9f56d88f588a1e 100644
--- a/flang/runtime/stat.h
+++ b/FortranRuntime/lib/Runtime/stat.h
@@ -1,4 +1,4 @@
-//===-- runtime/stat.h ------------------------------------------*- C++ -*-===//
+//===-- lib/Runtime/stat.h --------------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -12,7 +12,7 @@
#ifndef FORTRAN_RUNTIME_STAT_H_
#define FORTRAN_RUNTIME_STAT_H_
#include "flang/Common/api-attrs.h"
-#include "flang/ISO_Fortran_binding_wrapper.h"
+#include "flang/Common/ISO_Fortran_binding_wrapper.h"
#include "flang/Runtime/magic-numbers.h"
namespace Fortran::runtime {
diff --git a/flang/runtime/stop.cpp b/FortranRuntime/lib/Runtime/stop.cpp
similarity index 98%
rename from flang/runtime/stop.cpp
rename to FortranRuntime/lib/Runtime/stop.cpp
index cfb36b40840200..8465a53168e551 100644
--- a/flang/runtime/stop.cpp
+++ b/FortranRuntime/lib/Runtime/stop.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/stop.cpp --------------------------------------------------===//
+//===-- lib/Runtime/stop.cpp ------------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/sum.cpp b/FortranRuntime/lib/Runtime/sum.cpp
similarity index 98%
rename from flang/runtime/sum.cpp
rename to FortranRuntime/lib/Runtime/sum.cpp
index 63d8c9029a0ef5..64982b9fd53690 100644
--- a/flang/runtime/sum.cpp
+++ b/FortranRuntime/lib/Runtime/sum.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/sum.cpp ---------------------------------------------------===//
+//===-- lib/Runtime/sum.cpp -------------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/support.cpp b/FortranRuntime/lib/Runtime/support.cpp
similarity index 94%
rename from flang/runtime/support.cpp
rename to FortranRuntime/lib/Runtime/support.cpp
index a607120256d9d9..1dffa99191bae1 100644
--- a/flang/runtime/support.cpp
+++ b/FortranRuntime/lib/Runtime/support.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/support.cpp -----------------------------------------------===//
+//===-- lib/Runtime/support.cpp ---------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/temporary-stack.cpp b/FortranRuntime/lib/Runtime/temporary-stack.cpp
similarity index 98%
rename from flang/runtime/temporary-stack.cpp
rename to FortranRuntime/lib/Runtime/temporary-stack.cpp
index 667b10e04dbd29..12fa18586b7421 100644
--- a/flang/runtime/temporary-stack.cpp
+++ b/FortranRuntime/lib/Runtime/temporary-stack.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/temporary-stack.cpp ---------------------------------------===//
+//===-- lib/Runtime/temporary-stack.cpp -------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -11,7 +11,7 @@
#include "flang/Runtime/temporary-stack.h"
#include "terminator.h"
-#include "flang/ISO_Fortran_binding_wrapper.h"
+#include "flang/Common/ISO_Fortran_binding_wrapper.h"
#include "flang/Runtime/assign.h"
#include "flang/Runtime/descriptor.h"
#include "flang/Runtime/memory.h"
diff --git a/flang/runtime/terminator.cpp b/FortranRuntime/lib/Runtime/terminator.cpp
similarity index 97%
rename from flang/runtime/terminator.cpp
rename to FortranRuntime/lib/Runtime/terminator.cpp
index bab9edc64fa35b..4146e28235511f 100644
--- a/flang/runtime/terminator.cpp
+++ b/FortranRuntime/lib/Runtime/terminator.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/terminate.cpp ---------------------------------------------===//
+//===-- lib/Runtime/terminator.cpp ------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/terminator.h b/FortranRuntime/lib/Runtime/terminator.h
similarity index 98%
rename from flang/runtime/terminator.h
rename to FortranRuntime/lib/Runtime/terminator.h
index 609f059d6e0921..02b3a4c4f066f8 100644
--- a/flang/runtime/terminator.h
+++ b/FortranRuntime/lib/Runtime/terminator.h
@@ -1,4 +1,4 @@
-//===-- runtime/terminator.h ------------------------------------*- C++ -*-===//
+//===-- lib/Runtime/terminator.h --------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/time-intrinsic.cpp b/FortranRuntime/lib/Runtime/time-intrinsic.cpp
similarity index 99%
rename from flang/runtime/time-intrinsic.cpp
rename to FortranRuntime/lib/Runtime/time-intrinsic.cpp
index e6f6e81c7b50cc..05f7e4f80f18b6 100644
--- a/flang/runtime/time-intrinsic.cpp
+++ b/FortranRuntime/lib/Runtime/time-intrinsic.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/time-intrinsic.cpp ----------------------------------------===//
+//===-- lib/Runtime/time-intrinsic.cpp --------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/tools.cpp b/FortranRuntime/lib/Runtime/tools.cpp
similarity index 99%
rename from flang/runtime/tools.cpp
rename to FortranRuntime/lib/Runtime/tools.cpp
index 73d6c2cf7e1d2b..d5c113a31fc501 100644
--- a/flang/runtime/tools.cpp
+++ b/FortranRuntime/lib/Runtime/tools.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/tools.cpp -------------------------------------------------===//
+//===-- lib/Runtime/tools.cpp -----------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/tools.h b/FortranRuntime/lib/Runtime/tools.h
similarity index 99%
rename from flang/runtime/tools.h
rename to FortranRuntime/lib/Runtime/tools.h
index dc12e5c4533e2e..b57c7996135913 100644
--- a/flang/runtime/tools.h
+++ b/FortranRuntime/lib/Runtime/tools.h
@@ -1,4 +1,4 @@
-//===-- runtime/tools.h -----------------------------------------*- C++ -*-===//
+//===-- lib/Runtime/tools.h -------------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/transformational.cpp b/FortranRuntime/lib/Runtime/transformational.cpp
similarity index 99%
rename from flang/runtime/transformational.cpp
rename to FortranRuntime/lib/Runtime/transformational.cpp
index b6b204be4418c9..8c244fc296f3b9 100644
--- a/flang/runtime/transformational.cpp
+++ b/FortranRuntime/lib/Runtime/transformational.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/transformational.cpp --------------------------------------===//
+//===-- lib/Runtime/transformational.cpp ------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/type-code.cpp b/FortranRuntime/lib/Runtime/type-code.cpp
similarity index 98%
rename from flang/runtime/type-code.cpp
rename to FortranRuntime/lib/Runtime/type-code.cpp
index cb1b944433aae5..2709ca1be75a53 100644
--- a/flang/runtime/type-code.cpp
+++ b/FortranRuntime/lib/Runtime/type-code.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/type-code.cpp ---------------------------------------------===//
+//===-- lib/Runtime/type-code.cpp -------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -7,6 +7,7 @@
//===----------------------------------------------------------------------===//
#include "flang/Runtime/type-code.h"
+#include <cstdint>
namespace Fortran::runtime {
diff --git a/flang/runtime/type-info.cpp b/FortranRuntime/lib/Runtime/type-info.cpp
similarity index 99%
rename from flang/runtime/type-info.cpp
rename to FortranRuntime/lib/Runtime/type-info.cpp
index cb18c5669b5ffc..24fc9c33d92819 100644
--- a/flang/runtime/type-info.cpp
+++ b/FortranRuntime/lib/Runtime/type-info.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/type-info.cpp ---------------------------------------------===//
+//===-- lib/Runtime/type-info.cpp -------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/type-info.h b/FortranRuntime/lib/Runtime/type-info.h
similarity index 99%
rename from flang/runtime/type-info.h
rename to FortranRuntime/lib/Runtime/type-info.h
index c3f3595e32ef28..28e7c4696613b3 100644
--- a/flang/runtime/type-info.h
+++ b/FortranRuntime/lib/Runtime/type-info.h
@@ -1,4 +1,4 @@
-//===-- runtime/type-info.h -------------------------------------*- C++ -*-===//
+//===-- lib/Runtime/type-info.h ---------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -13,7 +13,7 @@
// flang/module/__fortran_type_info.f90.
#include "terminator.h"
-#include "flang/Common/Fortran.h"
+#include "flang/Common/Fortran-consts.h"
#include "flang/Common/bit-population-count.h"
#include "flang/Common/optional.h"
#include "flang/Runtime/descriptor.h"
diff --git a/flang/runtime/unit-map.cpp b/FortranRuntime/lib/Runtime/unit-map.cpp
similarity index 97%
rename from flang/runtime/unit-map.cpp
rename to FortranRuntime/lib/Runtime/unit-map.cpp
index 684a9b9e20b97a..93958be8df7ea5 100644
--- a/flang/runtime/unit-map.cpp
+++ b/FortranRuntime/lib/Runtime/unit-map.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/unit-map.cpp ----------------------------------------------===//
+//===-- lib/Runtime/unit-map.cpp --------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/unit-map.h b/FortranRuntime/lib/Runtime/unit-map.h
similarity index 97%
rename from flang/runtime/unit-map.h
rename to FortranRuntime/lib/Runtime/unit-map.h
index 6f1e01bb1e64ac..f9f0d34d4f0193 100644
--- a/flang/runtime/unit-map.h
+++ b/FortranRuntime/lib/Runtime/unit-map.h
@@ -1,4 +1,4 @@
-//===-- runtime/unit-map.h --------------------------------------*- C++ -*-===//
+//===-- lib/Runtime/unit-map.h ----------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/unit.cpp b/FortranRuntime/lib/Runtime/unit.cpp
similarity index 99%
rename from flang/runtime/unit.cpp
rename to FortranRuntime/lib/Runtime/unit.cpp
index 4aee8397d477e7..496679ee8ce5f4 100644
--- a/flang/runtime/unit.cpp
+++ b/FortranRuntime/lib/Runtime/unit.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/unit.cpp --------------------------------------------------===//
+//===-- lib/Runtime/unit.cpp ------------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/unit.h b/FortranRuntime/lib/Runtime/unit.h
similarity index 99%
rename from flang/runtime/unit.h
rename to FortranRuntime/lib/Runtime/unit.h
index a3ea2686816803..608f3a28ef687d 100644
--- a/flang/runtime/unit.h
+++ b/FortranRuntime/lib/Runtime/unit.h
@@ -1,4 +1,4 @@
-//===-- runtime/unit.h ------------------------------------------*- C++ -*-===//
+//===-- lib/Runtime/unit.h --------------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/utf.cpp b/FortranRuntime/lib/Runtime/utf.cpp
similarity index 98%
rename from flang/runtime/utf.cpp
rename to FortranRuntime/lib/Runtime/utf.cpp
index b09819cb2f736b..635451153d39a6 100644
--- a/flang/runtime/utf.cpp
+++ b/FortranRuntime/lib/Runtime/utf.cpp
@@ -1,4 +1,4 @@
-//===-- runtime/utf.cpp ---------------------------------------------------===//
+//===-- lib/Runtime/utf.cpp -------------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/utf.h b/FortranRuntime/lib/Runtime/utf.h
similarity index 97%
rename from flang/runtime/utf.h
rename to FortranRuntime/lib/Runtime/utf.h
index 10c2d61484217a..5ba40437ea0c95 100644
--- a/flang/runtime/utf.h
+++ b/FortranRuntime/lib/Runtime/utf.h
@@ -1,4 +1,4 @@
-//===-- runtime/utf.h -----------------------------------------------------===//
+//===-- lib/Runtime/utf.h ---------------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Testing/CMakeLists.txt b/FortranRuntime/lib/Testing/CMakeLists.txt
new file mode 100644
index 00000000000000..75b38662c2a0fa
--- /dev/null
+++ b/FortranRuntime/lib/Testing/CMakeLists.txt
@@ -0,0 +1,19 @@
+#===-- lib/Testing/CMakeLists.txt ------------------------------------------===#
+#
+# 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
+#
+#===------------------------------------------------------------------------===#
+
+set(public_headers "")
+file(GLOB_RECURSE public_headers
+ "${FLANGRUNTIME_SOURCE_DIR}/lib/Testing/*.h"
+)
+
+add_fortranruntime_library(NonGTestTesting EXCLUDE_FROM_ALL LINK_TO_LLVM
+ testing.cpp
+ fp-testing.cpp
+ ADDITIONAL_HEADERS
+ ${public_headers}
+)
diff --git a/flang/unittests/Evaluate/fp-testing.cpp b/FortranRuntime/lib/Testing/fp-testing.cpp
similarity index 86%
rename from flang/unittests/Evaluate/fp-testing.cpp
rename to FortranRuntime/lib/Testing/fp-testing.cpp
index 94d8d5086d000b..8541b1406334d3 100644
--- a/flang/unittests/Evaluate/fp-testing.cpp
+++ b/FortranRuntime/lib/Testing/fp-testing.cpp
@@ -1,4 +1,12 @@
-#include "fp-testing.h"
+//===-- lib/Testing/fp-testing.cpp ------------------------------*- C++ -*-===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+#include "flang/Testing/fp-testing.h"
#include "llvm/Support/Errno.h"
#include <cstdio>
#include <cstdlib>
@@ -8,7 +16,7 @@
#endif
using Fortran::common::RoundingMode;
-using Fortran::evaluate::RealFlag;
+using Fortran::common::RealFlag;
ScopedHostFloatingPointEnvironment::ScopedHostFloatingPointEnvironment(
#if __x86_64__
diff --git a/flang/unittests/Evaluate/testing.cpp b/FortranRuntime/lib/Testing/testing.cpp
similarity index 88%
rename from flang/unittests/Evaluate/testing.cpp
rename to FortranRuntime/lib/Testing/testing.cpp
index b2f73bf1b265a7..37f9d88f4886b4 100644
--- a/flang/unittests/Evaluate/testing.cpp
+++ b/FortranRuntime/lib/Testing/testing.cpp
@@ -1,4 +1,12 @@
-#include "testing.h"
+//===-- lib/Testing/testing.cpp ---------------------------------*- C++ -*-===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+#include "flang/Testing/testing.h"
#include "llvm/Support/raw_ostream.h"
#include <cstdarg>
#include <cstdio>
diff --git a/flang/module/.clang-format b/FortranRuntime/module/.clang-format
similarity index 100%
rename from flang/module/.clang-format
rename to FortranRuntime/module/.clang-format
diff --git a/FortranRuntime/module/CMakeLists.txt b/FortranRuntime/module/CMakeLists.txt
new file mode 100644
index 00000000000000..9841cbd586b2df
--- /dev/null
+++ b/FortranRuntime/module/CMakeLists.txt
@@ -0,0 +1,63 @@
+#===-- module/CMakeLists.txt -----------------------------------------------===#
+#
+# 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
+#
+#===------------------------------------------------------------------------===#
+
+set(module_sources
+ "__cuda_builtins.f90"
+ "__fortran_builtins.f90"
+ "__fortran_ieee_exceptions.f90"
+ "__fortran_type_info.f90"
+ # "cudadevice.f90" # TODO: -fc1 -xcuda
+ "ieee_arithmetic.f90"
+ "ieee_exceptions.f90"
+ "ieee_features.f90"
+ "iso_c_binding.f90"
+ "iso_fortran_env.f90"
+)
+
+set_source_files_properties(
+ "iso_fortran_env.f90"
+ PROPERTIES
+ COMPILE_FLAGS "-mmlir -ignore-module-only-builtins"
+)
+
+set_source_files_properties(
+ "__fortran_builtins.f90"
+ PROPERTIES
+ COMPILE_FLAGS "-mmlir -ignore-missing-type-desc"
+)
+
+# Requires PowerPC vector instructions
+if (LLVM_TARGET_TRIPLE MATCHES "(ppc|powerpc)(32|64)?(le|be)?\-.*")
+ list(APPEND module_sources
+ "__ppc_types.f90"
+ "__ppc_intrinsics.f90"
+ "mma.f90"
+ )
+endif ()
+
+add_fortranruntime_library(module_files OBJECT
+ ${module_sources}
+)
+
+# Usually, CMake will ignore dependencies from Fortran intrinsic modules. Since this is building those intrinsic modules themselves, tell CMake to not prune such dependencies.
+set_target_properties(module_files
+ PROPERTIES
+ Fortran_BUILDING_INSTRINSIC_MODULES ON
+)
+
+# The usual technique to install files in CMake is
+#
+# install(TARGET <targetname> <artifacttype> ...)
+#
+# However, there is no <artifacttype> for Fortran modules. We have to derive the module file path individually.
+set(module_files "")
+foreach (f90file IN LISTS module_sources)
+ get_filename_component(base "${f90file}" NAME_WE )
+ list(APPEND module_files "${FORTRANRUNTIME_BUILD_INCLUDE_DIR}/flang/${base}.mod")
+endforeach ()
+install(FILES ${module_files} DESTINATION "${FORTRANRUNTIME_INSTALL_INCLUDE_DIR}/flang")
diff --git a/flang/module/__cuda_builtins.f90 b/FortranRuntime/module/__cuda_builtins.f90
similarity index 100%
rename from flang/module/__cuda_builtins.f90
rename to FortranRuntime/module/__cuda_builtins.f90
diff --git a/flang/module/__fortran_builtins.f90 b/FortranRuntime/module/__fortran_builtins.f90
similarity index 100%
rename from flang/module/__fortran_builtins.f90
rename to FortranRuntime/module/__fortran_builtins.f90
diff --git a/flang/module/__fortran_ieee_exceptions.f90 b/FortranRuntime/module/__fortran_ieee_exceptions.f90
similarity index 100%
rename from flang/module/__fortran_ieee_exceptions.f90
rename to FortranRuntime/module/__fortran_ieee_exceptions.f90
diff --git a/flang/module/__fortran_type_info.f90 b/FortranRuntime/module/__fortran_type_info.f90
similarity index 100%
rename from flang/module/__fortran_type_info.f90
rename to FortranRuntime/module/__fortran_type_info.f90
diff --git a/flang/module/__ppc_intrinsics.f90 b/FortranRuntime/module/__ppc_intrinsics.f90
similarity index 100%
rename from flang/module/__ppc_intrinsics.f90
rename to FortranRuntime/module/__ppc_intrinsics.f90
diff --git a/flang/module/__ppc_types.f90 b/FortranRuntime/module/__ppc_types.f90
similarity index 100%
rename from flang/module/__ppc_types.f90
rename to FortranRuntime/module/__ppc_types.f90
diff --git a/flang/module/cudadevice.f90 b/FortranRuntime/module/cudadevice.f90
similarity index 96%
rename from flang/module/cudadevice.f90
rename to FortranRuntime/module/cudadevice.f90
index 0224ecfdde7c60..dd487f6ed1ffee 100644
--- a/flang/module/cudadevice.f90
+++ b/FortranRuntime/module/cudadevice.f90
@@ -1,4 +1,4 @@
-!===-- module/cudedevice.f90 -----------------------------------------------===!
+!===-- module/cudadevice.f90 -----------------------------------------------===!
!
! Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
! See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/module/ieee_arithmetic.f90 b/FortranRuntime/module/ieee_arithmetic.f90
similarity index 100%
rename from flang/module/ieee_arithmetic.f90
rename to FortranRuntime/module/ieee_arithmetic.f90
diff --git a/flang/module/ieee_exceptions.f90 b/FortranRuntime/module/ieee_exceptions.f90
similarity index 100%
rename from flang/module/ieee_exceptions.f90
rename to FortranRuntime/module/ieee_exceptions.f90
diff --git a/flang/module/ieee_features.f90 b/FortranRuntime/module/ieee_features.f90
similarity index 100%
rename from flang/module/ieee_features.f90
rename to FortranRuntime/module/ieee_features.f90
diff --git a/flang/module/iso_c_binding.f90 b/FortranRuntime/module/iso_c_binding.f90
similarity index 100%
rename from flang/module/iso_c_binding.f90
rename to FortranRuntime/module/iso_c_binding.f90
diff --git a/flang/module/iso_fortran_env.f90 b/FortranRuntime/module/iso_fortran_env.f90
similarity index 100%
rename from flang/module/iso_fortran_env.f90
rename to FortranRuntime/module/iso_fortran_env.f90
diff --git a/flang/module/mma.f90 b/FortranRuntime/module/mma.f90
similarity index 98%
rename from flang/module/mma.f90
rename to FortranRuntime/module/mma.f90
index 4c41822e000a3d..14aab69035a334 100644
--- a/flang/module/mma.f90
+++ b/FortranRuntime/module/mma.f90
@@ -55,9 +55,18 @@ pure __vector_pair function func_vpi0vp(arg1, arg2); \
!dir$ ignore_tkr(r) arg2; \
end function;
- FUNC_VPI0VI(1) FUNC_VPI0VI(2) FUNC_VPI0VI(4) FUNC_VPI0VI(8)
- FUNC_VPI0VU(1) FUNC_VPI0VU(2) FUNC_VPI0VU(4) FUNC_VPI0VU(8)
- FUNC_VPI0VR(4) FUNC_VPI0VR(8)
+! FIXME: Potential Flang bug: combining multiple of those on a single line breaks after preprocessing as an explicit step as done by CMake
+! Line counting is also wrong
+ FUNC_VPI0VI(1)
+ FUNC_VPI0VI(2)
+ FUNC_VPI0VI(4)
+ FUNC_VPI0VI(8)
+ FUNC_VPI0VU(1)
+ FUNC_VPI0VU(2)
+ FUNC_VPI0VU(4)
+ FUNC_VPI0VU(8)
+ FUNC_VPI0VR(4)
+ FUNC_VPI0VR(8)
FUNC_VPI0VP
#undef FUNC_VPI0VP
@@ -144,14 +153,26 @@ elemental subroutine sub_vpvr##VKIND##vr##VKIND(pair, arg1, arg2); \
vector(real(VKIND)), intent(in) :: arg1, arg2; \
end subroutine ;
- ELEM_SUB_VPVIVI(1) ELEM_SUB_VPVIVI(2)
- ELEM_SUB_VPVIVI(4) ELEM_SUB_VPVIVI(8)
- ELEM_SUB_VPVUVU(1) ELEM_SUB_VPVUVU(2)
- ELEM_SUB_VPVUVU(4) ELEM_SUB_VPVUVU(8)
- ELEM_SUB_VPVRVR(4) ELEM_SUB_VPVRVR(8)
- SUB_VPI0VI(1) SUB_VPI0VI(2) SUB_VPI0VI(4) SUB_VPI0VI(8)
- SUB_VPI0VU(1) SUB_VPI0VU(2) SUB_VPI0VU(4) SUB_VPI0VU(8)
- SUB_VPI0VR(4) SUB_VPI0VR(8)
+ ELEM_SUB_VPVIVI(1)
+ ELEM_SUB_VPVIVI(2)
+ ELEM_SUB_VPVIVI(4)
+ ELEM_SUB_VPVIVI(8)
+ ELEM_SUB_VPVUVU(1)
+ ELEM_SUB_VPVUVU(2)
+ ELEM_SUB_VPVUVU(4)
+ ELEM_SUB_VPVUVU(8)
+ ELEM_SUB_VPVRVR(4)
+ ELEM_SUB_VPVRVR(8)
+ SUB_VPI0VI(1)
+ SUB_VPI0VI(2)
+ SUB_VPI0VI(4)
+ SUB_VPI0VI(8)
+ SUB_VPI0VU(1)
+ SUB_VPI0VU(2)
+ SUB_VPI0VU(4)
+ SUB_VPI0VU(8)
+ SUB_VPI0VR(4)
+ SUB_VPI0VR(8)
#undef ELEM_SUB_VPVIVI
#undef ELEM_SUB_VPVUVU
diff --git a/FortranRuntime/test/CMakeLists.txt b/FortranRuntime/test/CMakeLists.txt
new file mode 100644
index 00000000000000..1f822859089f3d
--- /dev/null
+++ b/FortranRuntime/test/CMakeLists.txt
@@ -0,0 +1,70 @@
+#===-- test/CMakeLists.txt -------------------------------------------------===#
+#
+# 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
+#
+#===------------------------------------------------------------------------===#
+
+# Test runner infrastructure for Flang. This configures the Flang test trees
+# for use by Lit, and delegates to LLVM's lit test handlers.
+
+llvm_canonicalize_cmake_booleans(
+ FLANG_STANDALONE_BUILD
+ LLVM_BUILD_EXAMPLES
+ LLVM_BYE_LINK_INTO_TOOLS
+ LLVM_ENABLE_PLUGINS
+)
+
+set(FLANG_TOOLS_DIR ${FLANG_BINARY_DIR}/bin)
+
+configure_lit_site_cfg(
+ ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.py.in
+ ${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg.py
+ MAIN_CONFIG
+ ${CMAKE_CURRENT_SOURCE_DIR}/lit.cfg.py
+)
+
+if (TARGET FortranRuntimeUnitTests)
+ configure_lit_site_cfg(
+ ${CMAKE_CURRENT_SOURCE_DIR}/Unit/lit.site.cfg.py.in
+ ${CMAKE_CURRENT_BINARY_DIR}/Unit/lit.site.cfg.py
+ MAIN_CONFIG
+ ${CMAKE_CURRENT_SOURCE_DIR}/Unit/lit.cfg.py
+ )
+
+ configure_lit_site_cfg(
+ ${CMAKE_CURRENT_SOURCE_DIR}/NonGtestUnit/lit.site.cfg.py.in
+ ${CMAKE_CURRENT_BINARY_DIR}/NonGtestUnit/lit.site.cfg.py
+ MAIN_CONFIG
+ ${CMAKE_CURRENT_SOURCE_DIR}/NonGtestUnit/lit.cfg.py
+ )
+endif ()
+
+set(FORTRANRUNTIME_TEST_DEPENDS "")
+if (FORTRANRUNTIME_INCLUDE_TESTS)
+ if (TARGET FortranRuntimeUnitTests)
+ list(APPEND FORTRANRUNTIME_TEST_DEPENDS FortranRuntimeUnitTests)
+ endif()
+endif()
+
+add_custom_target(FortranRuntime-test-depends)
+set_target_properties(FortranRuntime-test-depends PROPERTIES FOLDER "Fortran Runtime/Meta")
+
+add_lit_testsuite(check-FortranRuntime "Running the Flang regression tests"
+ ${CMAKE_CURRENT_BINARY_DIR}
+ DEPENDS ${FORTRANRUNTIME_TEST_DEPENDS}
+)
+set_target_properties(check-FortranRuntime PROPERTIES FOLDER "Fortran Runtime/Meta")
+
+
+add_lit_testsuites(FORTRANRUNTIME ${CMAKE_CURRENT_SOURCE_DIR}
+ DEPENDS ${FORTRANRUNTIME_TEST_DEPENDS})
+
+# To modify the default target triple for flang tests.
+if (DEFINED FLANG_TEST_TARGET_TRIPLE)
+ if (NOT DEFINED LLVM_TARGET_TRIPLE_ENV OR LLVM_TARGET_TRIPLE_ENV STREQUAL "")
+ message(FATAL_ERROR "LLVM_TARGET_TRIPLE_ENV must also be defined in order "
+ "to use FLANG_TEST_TARGET_TRIPLE.")
+ endif()
+endif()
diff --git a/FortranRuntime/test/NonGtestUnit/lit.cfg.py b/FortranRuntime/test/NonGtestUnit/lit.cfg.py
new file mode 100644
index 00000000000000..cd78ca76de503f
--- /dev/null
+++ b/FortranRuntime/test/NonGtestUnit/lit.cfg.py
@@ -0,0 +1,21 @@
+# -*- Python -*-
+
+import os
+
+import lit.formats
+
+# name: The name of this test suite.
+config.name = "FortranRuntime-OldUnit"
+
+# suffixes: A list of file extensions to treat as test files.
+config.suffixes = [".test"]
+
+# test_source_root: The root path where unit test binaries are located.
+config.test_source_root = os.path.join(config.fortranruntime_binary_dir, "unittests")
+
+# test_exec_root: The root path where tests should be run.
+# lit writes a '.lit_test_times.txt' file into this directory.
+config.test_exec_root = config.fortranruntime_binary_test_dir
+
+# testFormat: The test format to use to interpret tests.
+config.test_format = lit.formats.ExecutableTest()
diff --git a/FortranRuntime/test/NonGtestUnit/lit.site.cfg.py.in b/FortranRuntime/test/NonGtestUnit/lit.site.cfg.py.in
new file mode 100644
index 00000000000000..3d1780a5d600a9
--- /dev/null
+++ b/FortranRuntime/test/NonGtestUnit/lit.site.cfg.py.in
@@ -0,0 +1,13 @@
+ at LIT_SITE_CFG_IN_HEADER@
+
+import os
+
+config.llvm_tools_dir = "@LLVM_TOOLS_DIR@"
+config.fortranruntime_binary_dir = "@FORTRANRUNTIME_BINARY_DIR@"
+config.fortranruntime_binary_test_dir = os.path.dirname(__file__)
+
+import lit.llvm
+lit.llvm.initialize(lit_config, config)
+
+# Let the main config do the real work.
+lit_config.load_config(config, "@FORTRANRUNTIME_SOURCE_DIR@/test/NonGtestUnit/lit.cfg.py")
diff --git a/flang/test/Runtime/no-cpp-dep.c b/FortranRuntime/test/Runtime/no-cpp-dep.c
similarity index 75%
rename from flang/test/Runtime/no-cpp-dep.c
rename to FortranRuntime/test/Runtime/no-cpp-dep.c
index 606a5d189f7199..f6760b75a148ff 100644
--- a/flang/test/Runtime/no-cpp-dep.c
+++ b/FortranRuntime/test/Runtime/no-cpp-dep.c
@@ -3,16 +3,18 @@ This test makes sure that flang's runtime does not depend on the C++ runtime
library. It tries to link this simple file against libFortranRuntime.a with
a C compiler.
-REQUIRES: c-compiler
+UNSUPPORTED: system-windows
RUN: %if system-aix %{ export OBJECT_MODE=64 %}
-RUN: %cc -std=c99 %s -I%include %libruntime %libdecimal -lm \
+RUN: %cc -std=c99 %s -I%include %libruntime -lm \
RUN: %if system-aix %{-lpthread %}
RUN: rm a.out
*/
#include "flang/Runtime/entry-names.h"
#include <stdint.h>
+#include <stdbool.h>
+#include <stddef.h>
/*
Manually add declarations for the runtime functions that we want to make sure
@@ -29,7 +31,9 @@ void RTNAME(ProgramStart)(
int32_t RTNAME(ArgumentCount)();
int32_t RTNAME(GetCommandArgument)(int32_t, const struct Descriptor *,
const struct Descriptor *, const struct Descriptor *);
-int32_t RTNAME(GetEnvVariable)();
+int32_t RTNAME(GetEnvVariable)(const struct Descriptor *,
+ const struct Descriptor *, const struct Descriptor *, bool ,
+ const struct Descriptor *, const char *, int );
int64_t RTNAME(SystemClockCount)(int kind);
int main() {
@@ -37,7 +41,7 @@ int main() {
RTNAME(ProgramStart)(0, 0, 0, 0);
int32_t c = RTNAME(ArgumentCount)();
int32_t v = RTNAME(GetCommandArgument)(0, 0, 0, 0);
- int32_t e = RTNAME(GetEnvVariable)("FOO", 0, 0);
+ int32_t e = RTNAME(GetEnvVariable)(NULL, NULL, NULL, false, NULL, "FOO", 0);
int64_t t = RTNAME(SystemClockCount)(8);
return x + c + v + e;
}
diff --git a/FortranRuntime/test/Unit/lit.cfg.py b/FortranRuntime/test/Unit/lit.cfg.py
new file mode 100644
index 00000000000000..888fb3981916c8
--- /dev/null
+++ b/FortranRuntime/test/Unit/lit.cfg.py
@@ -0,0 +1,21 @@
+# -*- Python -*-
+
+import os
+
+import lit.formats
+
+# name: The name of this test suite.
+config.name = "FortranRuntime-Unit"
+
+# suffixes: A list of file extensions to treat as test files.
+config.suffixes = []
+
+# test_source_root: The root path where unit test binaries are located.
+config.test_source_root = os.path.join(config.fortranruntime_binary_dir, "unittests")
+
+# test_exec_root: The root path where tests should be run.
+# lit writes a '.lit_test_times.txt' file into this directory.
+config.test_exec_root = config.fortranruntime_binary_test_dir
+
+# testFormat: The test format to use to interpret tests.
+config.test_format = lit.formats.GoogleTest(config.llvm_build_mode, "Tests")
diff --git a/FortranRuntime/test/Unit/lit.site.cfg.py.in b/FortranRuntime/test/Unit/lit.site.cfg.py.in
new file mode 100644
index 00000000000000..fa993aa897faca
--- /dev/null
+++ b/FortranRuntime/test/Unit/lit.site.cfg.py.in
@@ -0,0 +1,14 @@
+ at LIT_SITE_CFG_IN_HEADER@
+
+import os
+
+config.llvm_tools_dir = "@LLVM_TOOLS_DIR@"
+config.llvm_build_mode = "@LLVM_BUILD_MODE@"
+config.fortranruntime_binary_dir = "@FORTRANRUNTIME_BINARY_DIR@"
+config.fortranruntime_binary_test_dir = os.path.dirname(__file__)
+
+import lit.llvm
+lit.llvm.initialize(lit_config, config)
+
+# Let the main config do the real work.
+lit_config.load_config(config, "@FORTRANRUNTIME_SOURCE_DIR@/test/Unit/lit.cfg.py")
diff --git a/FortranRuntime/test/lit.cfg.py b/FortranRuntime/test/lit.cfg.py
new file mode 100644
index 00000000000000..dd5124b8de4095
--- /dev/null
+++ b/FortranRuntime/test/lit.cfg.py
@@ -0,0 +1,78 @@
+# -*- Python -*-
+
+import lit.util
+
+from lit.llvm import llvm_config
+from lit.llvm.subst import ToolSubst
+
+# Configuration file for the 'lit' test runner.
+
+# name: The name of this test suite.
+config.name = "FortranRuntime"
+
+# testFormat: The test format to use to interpret tests.
+#
+# For now we require '&&' between commands, until they get globally killed and
+# the test runner updated.
+config.test_format = lit.formats.ShTest(not llvm_config.use_lit_shell)
+
+# suffixes: A list of file extensions to treat as test files.
+config.suffixes = [
+ ".c",
+ ".cpp",
+ ".f",
+ ".F",
+ ".ff",
+ ".FOR",
+ ".for",
+ ".f77",
+ ".f90",
+ ".F90",
+ ".ff90",
+ ".f95",
+ ".F95",
+ ".ff95",
+ ".fpp",
+ ".FPP",
+ ".cuf",
+ ".CUF",
+ ".f18",
+ ".F18",
+ ".f03",
+ ".F03",
+ ".f08",
+ ".F08",
+ ".ll",
+ ".fir",
+ ".mlir",
+]
+
+llvm_config.use_default_substitutions()
+
+# test_source_root: The root path where tests are located.
+config.test_source_root = os.path.dirname(__file__)
+
+# test_exec_root: The root path where tests should be run.
+# lit writes a '.lit_test_times.txt' file into this directory.
+config.test_exec_root = config.fortranruntime_binary_test_dir
+
+# On MacOS, -isysroot is needed to build binaries.
+isysroot_flag = []
+if config.osx_sysroot:
+ isysroot_flag = ["-isysroot", config.osx_sysroot]
+
+# Define some variables to help us test that the flang runtime doesn't depend on
+# the C++ runtime libraries. For this we need a C compiler.
+libruntime = os.path.join(config.fortranruntime_build_lib_dir, "libFortranRuntime.a")
+include = os.path.join(config.fortranruntime_source_dir, "include")
+tools = []
+tools.append(
+ ToolSubst(
+ "%cc", command=config.cc, extra_args=isysroot_flag, unresolved="fatal"
+ )
+ )
+tools.append(ToolSubst("%libruntime", command=libruntime, unresolved="fatal"))
+tools.append(ToolSubst("%include", command=include, unresolved="fatal"))
+
+llvm_config.add_tool_substitutions(tools)
+
diff --git a/FortranRuntime/test/lit.site.cfg.py.in b/FortranRuntime/test/lit.site.cfg.py.in
new file mode 100644
index 00000000000000..d860d297ebd7c3
--- /dev/null
+++ b/FortranRuntime/test/lit.site.cfg.py.in
@@ -0,0 +1,17 @@
+ at LIT_SITE_CFG_IN_HEADER@
+
+import sys
+
+config.llvm_tools_dir = "@LLVM_TOOLS_DIR@"
+config.build_lib_dir = "@FORTRANRUNTIME_BUILD_LIB_DIR@"
+config.fortranruntime_source_dir = "@FORTRANRUNTIME_SOURCE_DIR@"
+config.fortranruntime_binary_test_dir = os.path.dirname(__file__)
+config.fortranruntime_build_lib_dir = "@FORTRANRUNTIME_BUILD_LIB_DIR@"
+config.cc = "@CMAKE_C_COMPILER@"
+config.osx_sysroot = path(r"@CMAKE_OSX_SYSROOT@")
+
+import lit.llvm
+lit.llvm.initialize(lit_config, config)
+
+# Let the main config do the real work.
+lit_config.load_config(config, "@FORTRANRUNTIME_SOURCE_DIR@/test/lit.cfg.py")
diff --git a/FortranRuntime/unittests/CMakeLists.txt b/FortranRuntime/unittests/CMakeLists.txt
new file mode 100644
index 00000000000000..d1aed058aad142
--- /dev/null
+++ b/FortranRuntime/unittests/CMakeLists.txt
@@ -0,0 +1,62 @@
+#===-- unittests/CMakeLists.txt --------------------------------------------===#
+#
+# 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
+#
+#===------------------------------------------------------------------------===#
+
+function (build_gtest)
+ include_directories("${LLVM_INCLUDE_DIR}" "${LLVM_MAIN_INCLUDE_DIR}")
+ set(LLVM_SUBPROJECT_TITLE "Third-Party/Google Test")
+ add_subdirectory(${LLVM_THIRD_PARTY_DIR}/unittest ${CMAKE_CURRENT_BINARY_DIR}/third-party/unittest)
+endfunction ()
+
+# Add GTest if not already present
+if (NOT TARGET llvm_gtest)
+ build_gtest()
+endif ()
+
+# Target that depends on all unittests
+add_custom_target(FortranRuntimeUnitTests)
+set_target_properties(FortranRuntimeUnitTests PROPERTIES FOLDER "Fortran Runtime/Tests")
+
+function(add_fortranruntime_unittest test_dirname)
+ cmake_parse_arguments(ARG
+ ""
+ ""
+ "LINK_LIBS"
+ ${ARGN})
+
+ add_unittest(FortranRuntimeUnitTests ${test_dirname} ${ARG_UNPARSED_ARGUMENTS})
+ target_include_directories(${test_dirname} PRIVATE "${FORTRANRUNTIME_SOURCE_DIR}/include")
+ target_link_libraries(${test_dirname} PRIVATE ${ARG_LINK_LIBS})
+endfunction()
+
+function(add_fortranruntime_nongtest_unittest test_name)
+ cmake_parse_arguments(ARG
+ "SLOW_TEST"
+ ""
+ "LINK_LIBS"
+ ${ARGN})
+
+ if(ARG_SLOW_TEST)
+ set(suffix .slow)
+ else()
+ set(suffix .test)
+ endif()
+
+ add_executable(${test_name}${suffix} ${ARG_UNPARSED_ARGUMENTS})
+ target_link_libraries(${test_name}${suffix} PRIVATE NonGTestTesting ${ARG_LINK_LIBS})
+ target_include_directories(${test_name}${suffix} PRIVATE "${FORTRANRUNTIME_SOURCE_DIR}/include")
+ set_target_properties(${test_name}${suffix} PROPERTIES FOLDER "Fortran Runtime/Tests/Unit")
+
+ if(NOT ARG_SLOW_TEST)
+ add_dependencies(FortranRuntimeUnitTests ${test_name}${suffix})
+ endif()
+endfunction()
+
+add_subdirectory(Common)
+add_subdirectory(Decimal)
+add_subdirectory(Evaluate)
+add_subdirectory(Runtime)
diff --git a/FortranRuntime/unittests/Common/CMakeLists.txt b/FortranRuntime/unittests/Common/CMakeLists.txt
new file mode 100644
index 00000000000000..f107036f19ed8d
--- /dev/null
+++ b/FortranRuntime/unittests/Common/CMakeLists.txt
@@ -0,0 +1,13 @@
+#===-- unittests/Common/CMakeLists.txt -------------------------------------===#
+#
+# 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
+#
+#===------------------------------------------------------------------------===#
+
+add_fortranruntime_unittest(FlangCommonTests
+ FastIntSetTest.cpp
+ LINK_LIBS
+ FortranRuntime.static
+)
diff --git a/flang/unittests/Common/FastIntSetTest.cpp b/FortranRuntime/unittests/Common/FastIntSetTest.cpp
similarity index 97%
rename from flang/unittests/Common/FastIntSetTest.cpp
rename to FortranRuntime/unittests/Common/FastIntSetTest.cpp
index bd1b953fa16631..f19359f4097ab8 100644
--- a/flang/unittests/Common/FastIntSetTest.cpp
+++ b/FortranRuntime/unittests/Common/FastIntSetTest.cpp
@@ -1,4 +1,4 @@
-//===-- flang/unittests/Common/FastIntSetTest.cpp ---------------*- C++ -*-===//
+//===-- unittests/Common/FastIntSetTest.cpp ---------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/unittests/Decimal/CMakeLists.txt b/FortranRuntime/unittests/Decimal/CMakeLists.txt
new file mode 100644
index 00000000000000..3d96da45c94148
--- /dev/null
+++ b/FortranRuntime/unittests/Decimal/CMakeLists.txt
@@ -0,0 +1,20 @@
+#===-- unittests/Decimal/CMakeLists.txt ------------------------------------===#
+#
+# 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
+#
+#===------------------------------------------------------------------------===#
+
+add_fortranruntime_nongtest_unittest(quick-sanity-test
+quick-sanity-test.cpp
+LINK_LIBS
+ FortranRuntime.static
+)
+
+# This test is not run by default as it takes a long time to execute.
+add_fortranruntime_nongtest_unittest(thorough-test SLOW_TEST
+thorough-test.cpp
+LINK_LIBS
+ FortranRuntime.static
+)
diff --git a/flang/unittests/Decimal/quick-sanity-test.cpp b/FortranRuntime/unittests/Decimal/quick-sanity-test.cpp
similarity index 91%
rename from flang/unittests/Decimal/quick-sanity-test.cpp
rename to FortranRuntime/unittests/Decimal/quick-sanity-test.cpp
index dafb075307ab6a..0e8ff0ce48b3c6 100644
--- a/flang/unittests/Decimal/quick-sanity-test.cpp
+++ b/FortranRuntime/unittests/Decimal/quick-sanity-test.cpp
@@ -1,4 +1,12 @@
-#include "flang/Decimal/decimal.h"
+//===-- unittests/Decimal/quick-sanity-test.cpp -----------------*- C++ -*-===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+#include "flang/Common/decimal.h"
#include "llvm/Support/raw_ostream.h"
#include <cinttypes>
#include <cstdio>
diff --git a/flang/unittests/Decimal/thorough-test.cpp b/FortranRuntime/unittests/Decimal/thorough-test.cpp
similarity index 85%
rename from flang/unittests/Decimal/thorough-test.cpp
rename to FortranRuntime/unittests/Decimal/thorough-test.cpp
index 46951f33eb8fee..0648b61d7c1cda 100644
--- a/flang/unittests/Decimal/thorough-test.cpp
+++ b/FortranRuntime/unittests/Decimal/thorough-test.cpp
@@ -1,4 +1,12 @@
-#include "flang/Decimal/decimal.h"
+//===-- unittests/Decimal/thorough-test.cpp ---------------------*- C++ -*-===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+#include "flang/Common/decimal.h"
#include "llvm/Support/raw_ostream.h"
#include <cinttypes>
#include <cstdio>
diff --git a/FortranRuntime/unittests/Evaluate/CMakeLists.txt b/FortranRuntime/unittests/Evaluate/CMakeLists.txt
new file mode 100644
index 00000000000000..e6501f13a74e6b
--- /dev/null
+++ b/FortranRuntime/unittests/Evaluate/CMakeLists.txt
@@ -0,0 +1,19 @@
+#===-- unittests/Evaluate/CMakeLists.txt -----------------------------------===#
+#
+# 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
+#
+#===------------------------------------------------------------------------===#
+
+add_fortranruntime_nongtest_unittest(reshape
+reshape.cpp
+LINK_LIBS
+ FortranRuntime.static
+)
+
+add_fortranruntime_nongtest_unittest(ISO-Fortran-binding
+ISO-Fortran-binding.cpp
+LINK_LIBS
+ FortranRuntime.static
+)
diff --git a/flang/unittests/Evaluate/ISO-Fortran-binding.cpp b/FortranRuntime/unittests/Evaluate/ISO-Fortran-binding.cpp
similarity index 98%
rename from flang/unittests/Evaluate/ISO-Fortran-binding.cpp
rename to FortranRuntime/unittests/Evaluate/ISO-Fortran-binding.cpp
index 3c98363f900466..97d23ca90e5022 100644
--- a/flang/unittests/Evaluate/ISO-Fortran-binding.cpp
+++ b/FortranRuntime/unittests/Evaluate/ISO-Fortran-binding.cpp
@@ -1,5 +1,13 @@
-#include "testing.h"
-#include "flang/ISO_Fortran_binding_wrapper.h"
+//===-- unittests/Evaluate/ISO-Fortran-binding.cpp --------------*- C++ -*-===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+#include "flang/Testing/testing.h"
+#include "flang/Common/ISO_Fortran_binding_wrapper.h"
#include "flang/Runtime/descriptor.h"
#include "llvm/Support/raw_ostream.h"
#include <type_traits>
diff --git a/flang/unittests/Evaluate/reshape.cpp b/FortranRuntime/unittests/Evaluate/reshape.cpp
similarity index 88%
rename from flang/unittests/Evaluate/reshape.cpp
rename to FortranRuntime/unittests/Evaluate/reshape.cpp
index 5d138cd3d88d98..82caebe081fcd2 100644
--- a/flang/unittests/Evaluate/reshape.cpp
+++ b/FortranRuntime/unittests/Evaluate/reshape.cpp
@@ -1,4 +1,12 @@
-#include "testing.h"
+//===-- unittests/Evaluate/reshape.cpp --------------------------*- C++ -*-===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+#include "flang/Testing/testing.h"
#include "flang/Runtime/descriptor.h"
#include "flang/Runtime/transformational.h"
#include <cinttypes>
diff --git a/flang/unittests/Runtime/AccessTest.cpp b/FortranRuntime/unittests/Runtime/AccessTest.cpp
similarity index 99%
rename from flang/unittests/Runtime/AccessTest.cpp
rename to FortranRuntime/unittests/Runtime/AccessTest.cpp
index 66f19f78c7cfb6..e72386cc9ac247 100644
--- a/flang/unittests/Runtime/AccessTest.cpp
+++ b/FortranRuntime/unittests/Runtime/AccessTest.cpp
@@ -1,4 +1,4 @@
-//===-- flang/unittests/Runtime/AccessTest.cpp ----------------------------===//
+//===-- unittests/Runtime/AccessTest.cpp ------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/unittests/Runtime/Allocatable.cpp b/FortranRuntime/unittests/Runtime/Allocatable.cpp
similarity index 98%
rename from flang/unittests/Runtime/Allocatable.cpp
rename to FortranRuntime/unittests/Runtime/Allocatable.cpp
index f15f26bfd9c575..8e10dc408ceae8 100644
--- a/flang/unittests/Runtime/Allocatable.cpp
+++ b/FortranRuntime/unittests/Runtime/Allocatable.cpp
@@ -1,4 +1,4 @@
-//===-- flang/unittests/Runtime/Allocatable.cpp--------- ---------*- C++-*-===//
+//===-- unittests/Runtime/Allocatable.cpp -----------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/unittests/Runtime/ArrayConstructor.cpp b/FortranRuntime/unittests/Runtime/ArrayConstructor.cpp
similarity index 99%
rename from flang/unittests/Runtime/ArrayConstructor.cpp
rename to FortranRuntime/unittests/Runtime/ArrayConstructor.cpp
index 9d78da79623613..8c7fce3e4fb5f7 100644
--- a/flang/unittests/Runtime/ArrayConstructor.cpp
+++ b/FortranRuntime/unittests/Runtime/ArrayConstructor.cpp
@@ -1,4 +1,4 @@
-//===-- flang/unittests/Runtime/ArrayConstructor.cpp-------------*- C++ -*-===//
+//===-- unittests/Runtime/ArrayConstructor.cpp ------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/unittests/Runtime/BufferTest.cpp b/FortranRuntime/unittests/Runtime/BufferTest.cpp
similarity index 97%
rename from flang/unittests/Runtime/BufferTest.cpp
rename to FortranRuntime/unittests/Runtime/BufferTest.cpp
index 0632324b25d22e..9a7dd86d0c1dc6 100644
--- a/flang/unittests/Runtime/BufferTest.cpp
+++ b/FortranRuntime/unittests/Runtime/BufferTest.cpp
@@ -1,4 +1,4 @@
-//===-- flang/unittests/Runtime/BufferTest.cpp ------------------*- C++ -*-===//
+//===-- unittests/Runtime/BufferTest.cpp ------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -6,7 +6,7 @@
//
//===----------------------------------------------------------------------===//
-#include "../../runtime/buffer.h"
+#include "../../lib/Runtime/buffer.h"
#include "CrashHandlerFixture.h"
#include "gtest/gtest.h"
#include <algorithm>
diff --git a/flang/unittests/Runtime/CMakeLists.txt b/FortranRuntime/unittests/Runtime/CMakeLists.txt
similarity index 54%
rename from flang/unittests/Runtime/CMakeLists.txt
rename to FortranRuntime/unittests/Runtime/CMakeLists.txt
index 2c3f8c1a9e9ac8..1e966987c272a0 100644
--- a/flang/unittests/Runtime/CMakeLists.txt
+++ b/FortranRuntime/unittests/Runtime/CMakeLists.txt
@@ -1,4 +1,12 @@
-add_flang_unittest(FlangRuntimeTests
+#===-- unittests/Runtime/CMakeLists.txt ------------------------------------===#
+#
+# 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
+#
+#===------------------------------------------------------------------------===#
+
+add_fortranruntime_unittest(FlangRuntimeTests
AccessTest.cpp
Allocatable.cpp
ArrayConstructor.cpp
@@ -29,11 +37,6 @@ add_flang_unittest(FlangRuntimeTests
Time.cpp
TemporaryStack.cpp
Transformational.cpp
+LINK_LIBS
+ FortranRuntime.static
)
-
-target_link_libraries(FlangRuntimeTests
- PRIVATE
- FortranRuntime
-)
-
-add_subdirectory(CUDA)
diff --git a/flang/unittests/Runtime/CUDA/AllocatorCUF.cpp b/FortranRuntime/unittests/Runtime/CUDA/AllocatorCUF.cpp
similarity index 95%
rename from flang/unittests/Runtime/CUDA/AllocatorCUF.cpp
rename to FortranRuntime/unittests/Runtime/CUDA/AllocatorCUF.cpp
index b51ff0ac006cc6..5bafb484236340 100644
--- a/flang/unittests/Runtime/CUDA/AllocatorCUF.cpp
+++ b/FortranRuntime/unittests/Runtime/CUDA/AllocatorCUF.cpp
@@ -1,4 +1,4 @@
-//===-- flang/unittests/Runtime/AllocatableCUF.cpp ---------------*- C++-*-===//
+//===-- unittests/Runtime/CUDA/AllocatorCUF.cpp -----------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -8,7 +8,7 @@
#include "gtest/gtest.h"
#include "../../../runtime/terminator.h"
-#include "flang/Common/Fortran.h"
+#include "flang/Support/Fortran.h"
#include "flang/Runtime/CUDA/allocator.h"
#include "flang/Runtime/CUDA/descriptor.h"
#include "flang/Runtime/allocatable.h"
diff --git a/flang/unittests/Runtime/CharacterTest.cpp b/FortranRuntime/unittests/Runtime/CharacterTest.cpp
similarity index 99%
rename from flang/unittests/Runtime/CharacterTest.cpp
rename to FortranRuntime/unittests/Runtime/CharacterTest.cpp
index e54fd8a5075f64..710c1ca0eee817 100644
--- a/flang/unittests/Runtime/CharacterTest.cpp
+++ b/FortranRuntime/unittests/Runtime/CharacterTest.cpp
@@ -1,4 +1,4 @@
-//===-- flang/unittests/Runtime/CharacterTest.cpp ---------------*- C++ -*-===//
+//===-- unittests/Runtime/CharacterTest.cpp ---------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/unittests/Runtime/CommandTest.cpp b/FortranRuntime/unittests/Runtime/CommandTest.cpp
similarity index 99%
rename from flang/unittests/Runtime/CommandTest.cpp
rename to FortranRuntime/unittests/Runtime/CommandTest.cpp
index b0c43ba01d8f33..03a31ceab8030b 100644
--- a/flang/unittests/Runtime/CommandTest.cpp
+++ b/FortranRuntime/unittests/Runtime/CommandTest.cpp
@@ -1,4 +1,4 @@
-//===-- flang/unittests/Runtime/CommandTest.cpp ---------------------------===//
+//===-- unittests/Runtime/CommandTest.cpp -----------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/unittests/Runtime/Complex.cpp b/FortranRuntime/unittests/Runtime/Complex.cpp
similarity index 98%
rename from flang/unittests/Runtime/Complex.cpp
rename to FortranRuntime/unittests/Runtime/Complex.cpp
index 46f3ad2f2712b2..daa4b5c7960842 100644
--- a/flang/unittests/Runtime/Complex.cpp
+++ b/FortranRuntime/unittests/Runtime/Complex.cpp
@@ -1,4 +1,4 @@
-//===-- flang/unittests/Runtime/Complex.cpp ---------------------*- C++ -*-===//
+//===-- unittests/Runtime/Complex.cpp ---------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -13,7 +13,7 @@
#pragma clang diagnostic ignored "-Wc99-extensions"
#endif
-#include "flang/Common/Fortran.h"
+#include "flang/Common/Fortran-consts.h"
#include "flang/Runtime/cpp-type.h"
#include "flang/Runtime/entry-names.h"
diff --git a/flang/unittests/Runtime/CrashHandlerFixture.cpp b/FortranRuntime/unittests/Runtime/CrashHandlerFixture.cpp
similarity index 92%
rename from flang/unittests/Runtime/CrashHandlerFixture.cpp
rename to FortranRuntime/unittests/Runtime/CrashHandlerFixture.cpp
index 811603337e6608..5e0b746c7e974a 100644
--- a/flang/unittests/Runtime/CrashHandlerFixture.cpp
+++ b/FortranRuntime/unittests/Runtime/CrashHandlerFixture.cpp
@@ -1,4 +1,4 @@
-//===-- flang/unittests/Runtime/CrashHandlerFixture.cpp ---------*- C++ -*-===//
+//===-- unittests/Runtime/CrashHandlerFixture.cpp ---------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -6,7 +6,7 @@
//
//===----------------------------------------------------------------------===//
#include "CrashHandlerFixture.h"
-#include "../../runtime/terminator.h"
+#include "../../lib/Runtime/terminator.h"
#include <cstdarg>
#include <cstdlib>
diff --git a/flang/unittests/Runtime/CrashHandlerFixture.h b/FortranRuntime/unittests/Runtime/CrashHandlerFixture.h
similarity index 91%
rename from flang/unittests/Runtime/CrashHandlerFixture.h
rename to FortranRuntime/unittests/Runtime/CrashHandlerFixture.h
index fe0ee0da5204e4..af6d8e4cc7d525 100644
--- a/flang/unittests/Runtime/CrashHandlerFixture.h
+++ b/FortranRuntime/unittests/Runtime/CrashHandlerFixture.h
@@ -1,4 +1,4 @@
-//===-- flang/unittests/Runtime/CrashHandlerFixture.h -----------*- C++ -*-===//
+//===-- unittests/Runtime/CrashHandlerFixture.h -----------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/unittests/Runtime/Derived.cpp b/FortranRuntime/unittests/Runtime/Derived.cpp
similarity index 96%
rename from flang/unittests/Runtime/Derived.cpp
rename to FortranRuntime/unittests/Runtime/Derived.cpp
index 019d5e8309e4a0..8d5471e3e0bcf3 100644
--- a/flang/unittests/Runtime/Derived.cpp
+++ b/FortranRuntime/unittests/Runtime/Derived.cpp
@@ -1,4 +1,4 @@
-//===-- flang/unittests/Runtime/Pointer.cpp--------- -------------*- C++-*-===//
+//===-- unittests/Runtime/Derived.cpp ---------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/unittests/Runtime/ExternalIOTest.cpp b/FortranRuntime/unittests/Runtime/ExternalIOTest.cpp
similarity index 99%
rename from flang/unittests/Runtime/ExternalIOTest.cpp
rename to FortranRuntime/unittests/Runtime/ExternalIOTest.cpp
index 13327964e12a48..23c1e9992c101e 100644
--- a/flang/unittests/Runtime/ExternalIOTest.cpp
+++ b/FortranRuntime/unittests/Runtime/ExternalIOTest.cpp
@@ -1,4 +1,4 @@
-//===-- flang/unittests/RuntimeGTest/ExternalIOTest.cpp ---------*- C++ -*-===//
+//===-- unittests/Runtime/ExternalIOTest.cpp --------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/unittests/Runtime/Format.cpp b/FortranRuntime/unittests/Runtime/Format.cpp
similarity index 96%
rename from flang/unittests/Runtime/Format.cpp
rename to FortranRuntime/unittests/Runtime/Format.cpp
index 01803c628de26a..f1447608917f2d 100644
--- a/flang/unittests/Runtime/Format.cpp
+++ b/FortranRuntime/unittests/Runtime/Format.cpp
@@ -1,4 +1,4 @@
-//===-- flang/unittests/Runtime/Format.cpp ----------------------*- C++ -*-===//
+//===-- unittests/Runtime/Format.cpp ----------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -7,9 +7,9 @@
//===----------------------------------------------------------------------===//
#include "CrashHandlerFixture.h"
-#include "../runtime/connection.h"
-#include "../runtime/format-implementation.h"
-#include "../runtime/io-error.h"
+#include "../../lib/Runtime/connection.h"
+#include "../../lib/Runtime/format-implementation.h"
+#include "../../lib/Runtime/io-error.h"
#include <optional>
#include <string>
#include <tuple>
diff --git a/flang/unittests/Runtime/Inquiry.cpp b/FortranRuntime/unittests/Runtime/Inquiry.cpp
similarity index 98%
rename from flang/unittests/Runtime/Inquiry.cpp
rename to FortranRuntime/unittests/Runtime/Inquiry.cpp
index 3b523e992a3179..39303b7c809002 100644
--- a/flang/unittests/Runtime/Inquiry.cpp
+++ b/FortranRuntime/unittests/Runtime/Inquiry.cpp
@@ -1,4 +1,4 @@
-//===-- flang/unittests/Runtime/Inquiry.cpp -------------------------------===//
+//===-- unittests/Runtime/Inquiry.cpp ---------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/unittests/Runtime/ListInputTest.cpp b/FortranRuntime/unittests/Runtime/ListInputTest.cpp
similarity index 98%
rename from flang/unittests/Runtime/ListInputTest.cpp
rename to FortranRuntime/unittests/Runtime/ListInputTest.cpp
index a4eba5283add68..472838c25841c9 100644
--- a/flang/unittests/Runtime/ListInputTest.cpp
+++ b/FortranRuntime/unittests/Runtime/ListInputTest.cpp
@@ -1,4 +1,4 @@
-//===-- flang/unittests/Runtime/ListInputTest.cpp ---------------*- C++ -*-===//
+//===-- unittests/Runtime/ListInputTest.cpp ---------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -7,7 +7,7 @@
//===----------------------------------------------------------------------===//
#include "CrashHandlerFixture.h"
-#include "../../runtime/io-error.h"
+#include "../../lib/Runtime/io-error.h"
#include "flang/Runtime/descriptor.h"
#include "flang/Runtime/io-api.h"
diff --git a/flang/unittests/Runtime/LogicalFormatTest.cpp b/FortranRuntime/unittests/Runtime/LogicalFormatTest.cpp
similarity index 96%
rename from flang/unittests/Runtime/LogicalFormatTest.cpp
rename to FortranRuntime/unittests/Runtime/LogicalFormatTest.cpp
index a2c19d1e1ca948..928fddec50c874 100644
--- a/flang/unittests/Runtime/LogicalFormatTest.cpp
+++ b/FortranRuntime/unittests/Runtime/LogicalFormatTest.cpp
@@ -1,4 +1,4 @@
-//===-- flang/unittests/Runtime/LogicalFormatTest.cpp -----------*- C++ -*-===//
+//===-- unittests/Runtime/LogicalFormatTest.cpp -----------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/unittests/Runtime/Matmul.cpp b/FortranRuntime/unittests/Runtime/Matmul.cpp
similarity index 99%
rename from flang/unittests/Runtime/Matmul.cpp
rename to FortranRuntime/unittests/Runtime/Matmul.cpp
index c3fed9b972df2a..a37b618d3ab11a 100644
--- a/flang/unittests/Runtime/Matmul.cpp
+++ b/FortranRuntime/unittests/Runtime/Matmul.cpp
@@ -1,4 +1,4 @@
-//===-- flang/unittests/Runtime/Matmul.cpp--------- -------------*- C++ -*-===//
+//===-- unittests/Runtime/Matmul.cpp ----------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/unittests/Runtime/MatmulTranspose.cpp b/FortranRuntime/unittests/Runtime/MatmulTranspose.cpp
similarity index 99%
rename from flang/unittests/Runtime/MatmulTranspose.cpp
rename to FortranRuntime/unittests/Runtime/MatmulTranspose.cpp
index c582e945dc7c93..3483d1896e8bf6 100644
--- a/flang/unittests/Runtime/MatmulTranspose.cpp
+++ b/FortranRuntime/unittests/Runtime/MatmulTranspose.cpp
@@ -1,4 +1,4 @@
-//===-- flang/unittests/Runtime/MatmulTranspose.cpp -------------*- C++ -*-===//
+//===-- unittests/Runtime/MatmulTranspose.cpp -------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/unittests/Runtime/MiscIntrinsic.cpp b/FortranRuntime/unittests/Runtime/MiscIntrinsic.cpp
similarity index 98%
rename from flang/unittests/Runtime/MiscIntrinsic.cpp
rename to FortranRuntime/unittests/Runtime/MiscIntrinsic.cpp
index 7e19ed250bdc05..5672440c0e1b95 100644
--- a/flang/unittests/Runtime/MiscIntrinsic.cpp
+++ b/FortranRuntime/unittests/Runtime/MiscIntrinsic.cpp
@@ -1,4 +1,4 @@
-//===-- flang/unittests/Runtime/MiscIntrinsic.cpp ---------------*- C++ -*-===//
+//===-- unittests/Runtime/MiscIntrinsic.cpp ---------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/unittests/Runtime/Namelist.cpp b/FortranRuntime/unittests/Runtime/Namelist.cpp
similarity index 99%
rename from flang/unittests/Runtime/Namelist.cpp
rename to FortranRuntime/unittests/Runtime/Namelist.cpp
index 9037fa15a97cb3..729f9ffa5c7c10 100644
--- a/flang/unittests/Runtime/Namelist.cpp
+++ b/FortranRuntime/unittests/Runtime/Namelist.cpp
@@ -1,4 +1,4 @@
-//===-- flang/unittests/Runtime/Namelist.cpp --------------------*- C++ -*-===//
+//===-- unittests/Runtime/Namelist.cpp --------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -6,7 +6,7 @@
//
//===----------------------------------------------------------------------===//
-#include "../../runtime/namelist.h"
+#include "../../lib/Runtime/namelist.h"
#include "CrashHandlerFixture.h"
#include "tools.h"
#include "flang/Runtime/descriptor.h"
diff --git a/flang/unittests/Runtime/Numeric.cpp b/FortranRuntime/unittests/Runtime/Numeric.cpp
similarity index 99%
rename from flang/unittests/Runtime/Numeric.cpp
rename to FortranRuntime/unittests/Runtime/Numeric.cpp
index 799756aab3839a..d15919b972bca7 100644
--- a/flang/unittests/Runtime/Numeric.cpp
+++ b/FortranRuntime/unittests/Runtime/Numeric.cpp
@@ -1,4 +1,4 @@
-//===-- flang/unittests/Runtime/Numeric.cpp ---------------------*- C++ -*-===//
+//===-- unittests/Runtime/Numeric.cpp ---------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/unittests/Runtime/NumericalFormatTest.cpp b/FortranRuntime/unittests/Runtime/NumericalFormatTest.cpp
similarity index 99%
rename from flang/unittests/Runtime/NumericalFormatTest.cpp
rename to FortranRuntime/unittests/Runtime/NumericalFormatTest.cpp
index f0055153203508..8a1dd6de1449b9 100644
--- a/flang/unittests/Runtime/NumericalFormatTest.cpp
+++ b/FortranRuntime/unittests/Runtime/NumericalFormatTest.cpp
@@ -1,4 +1,4 @@
-//===-- flang/unittests/Runtime/NumericalFormatTest.cpp ---------*- C++ -*-===//
+//===-- unittests/Runtime/NumericalFormatTest.cpp ---------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/unittests/Runtime/Pointer.cpp b/FortranRuntime/unittests/Runtime/Pointer.cpp
similarity index 98%
rename from flang/unittests/Runtime/Pointer.cpp
rename to FortranRuntime/unittests/Runtime/Pointer.cpp
index 4ce13ebc50a565..aa8545cdf951d1 100644
--- a/flang/unittests/Runtime/Pointer.cpp
+++ b/FortranRuntime/unittests/Runtime/Pointer.cpp
@@ -1,4 +1,4 @@
-//===-- flang/unittests/Runtime/Pointer.cpp--------- -------------*- C++-*-===//
+//===-- unittests/Runtime/Pointer.cpp ---------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/unittests/Runtime/Ragged.cpp b/FortranRuntime/unittests/Runtime/Ragged.cpp
similarity index 94%
rename from flang/unittests/Runtime/Ragged.cpp
rename to FortranRuntime/unittests/Runtime/Ragged.cpp
index 5049bc83405f17..feadd032f59bd4 100644
--- a/flang/unittests/Runtime/Ragged.cpp
+++ b/FortranRuntime/unittests/Runtime/Ragged.cpp
@@ -1,4 +1,4 @@
-//===-- flang/unittests/Runtime/Ragged.cpp ----------------------*- C++ -*-===//
+//===-- unittests/Runtime/Ragged.cpp ----------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/unittests/Runtime/Random.cpp b/FortranRuntime/unittests/Runtime/Random.cpp
similarity index 97%
rename from flang/unittests/Runtime/Random.cpp
rename to FortranRuntime/unittests/Runtime/Random.cpp
index cb739b94514290..c2300a478832ab 100644
--- a/flang/unittests/Runtime/Random.cpp
+++ b/FortranRuntime/unittests/Runtime/Random.cpp
@@ -1,4 +1,4 @@
-//===-- flang/unittests/Runtime/Random.cpp ----------------------*- C++ -*-===//
+//===-- unittests/Runtime/Random.cpp ----------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/unittests/Runtime/Reduction.cpp b/FortranRuntime/unittests/Runtime/Reduction.cpp
similarity index 99%
rename from flang/unittests/Runtime/Reduction.cpp
rename to FortranRuntime/unittests/Runtime/Reduction.cpp
index 25eb5fd760eadb..e8b5ac878871fd 100644
--- a/flang/unittests/Runtime/Reduction.cpp
+++ b/FortranRuntime/unittests/Runtime/Reduction.cpp
@@ -1,4 +1,4 @@
-//===-- flang/unittests/Runtime/Reductions.cpp ----------------------------===//
+//===-- unittests/Runtime/Reduction.cpp -------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/unittests/Runtime/RuntimeCrashTest.cpp b/FortranRuntime/unittests/Runtime/RuntimeCrashTest.cpp
similarity index 98%
rename from flang/unittests/Runtime/RuntimeCrashTest.cpp
rename to FortranRuntime/unittests/Runtime/RuntimeCrashTest.cpp
index a649051fdca0c5..7ce1ee796d739b 100644
--- a/flang/unittests/Runtime/RuntimeCrashTest.cpp
+++ b/FortranRuntime/unittests/Runtime/RuntimeCrashTest.cpp
@@ -1,4 +1,4 @@
-//===-- flang/unittests/Runtime/CrashHandlerFixture.cpp ---------*- C++ -*-===//
+//===-- unittests/Runtime/RuntimeCrashTest.cpp ------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -12,7 +12,7 @@
//===----------------------------------------------------------------------===//
#include "CrashHandlerFixture.h"
#include "tools.h"
-#include "../../runtime/terminator.h"
+#include "../../lib/Runtime/terminator.h"
#include "flang/Runtime/io-api.h"
#include "flang/Runtime/transformational.h"
#include <gtest/gtest.h>
diff --git a/flang/unittests/Runtime/Stop.cpp b/FortranRuntime/unittests/Runtime/Stop.cpp
similarity index 96%
rename from flang/unittests/Runtime/Stop.cpp
rename to FortranRuntime/unittests/Runtime/Stop.cpp
index b13602eaee5ea6..c12ec097068438 100644
--- a/flang/unittests/Runtime/Stop.cpp
+++ b/FortranRuntime/unittests/Runtime/Stop.cpp
@@ -1,4 +1,4 @@
-//===-- flang/unittests/Runtime/Stop.cpp ----------------------------------===//
+//===-- unittests/Runtime/Stop.cpp ------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -11,7 +11,7 @@
//===----------------------------------------------------------------------===//
#include "flang/Runtime/stop.h"
#include "CrashHandlerFixture.h"
-#include "../../runtime/environment.h"
+#include "../../lib/Runtime/environment.h"
#include <cstdlib>
#include <gtest/gtest.h>
diff --git a/flang/unittests/Runtime/Support.cpp b/FortranRuntime/unittests/Runtime/Support.cpp
similarity index 97%
rename from flang/unittests/Runtime/Support.cpp
rename to FortranRuntime/unittests/Runtime/Support.cpp
index 9d1a417fdbf426..b7aa39ef5523ba 100644
--- a/flang/unittests/Runtime/Support.cpp
+++ b/FortranRuntime/unittests/Runtime/Support.cpp
@@ -1,4 +1,4 @@
-//===-- flang/unittests/Runtime/Support.cpp ----------------------*- C++-*-===//
+//===-- unittests/Runtime/Support.cpp ---------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/unittests/Runtime/TemporaryStack.cpp b/FortranRuntime/unittests/Runtime/TemporaryStack.cpp
similarity index 98%
rename from flang/unittests/Runtime/TemporaryStack.cpp
rename to FortranRuntime/unittests/Runtime/TemporaryStack.cpp
index 0a9344969ca6ba..495c693b0493ef 100644
--- a/flang/unittests/Runtime/TemporaryStack.cpp
+++ b/FortranRuntime/unittests/Runtime/TemporaryStack.cpp
@@ -1,4 +1,4 @@
-//===--- flang/unittests/Runtime/TemporaryStack.cpp -------------*- C++ -*-===//
+//===-- unittests/Runtime/TemporaryStack.cpp --------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -8,7 +8,7 @@
#include "gtest/gtest.h"
#include "tools.h"
-#include "flang/ISO_Fortran_binding_wrapper.h"
+#include "flang/Common/ISO_Fortran_binding_wrapper.h"
#include "flang/Runtime/allocatable.h"
#include "flang/Runtime/cpp-type.h"
#include "flang/Runtime/descriptor.h"
diff --git a/flang/unittests/Runtime/Time.cpp b/FortranRuntime/unittests/Runtime/Time.cpp
similarity index 98%
rename from flang/unittests/Runtime/Time.cpp
rename to FortranRuntime/unittests/Runtime/Time.cpp
index 9309d7b1ceffa0..548c0834e34a36 100644
--- a/flang/unittests/Runtime/Time.cpp
+++ b/FortranRuntime/unittests/Runtime/Time.cpp
@@ -1,4 +1,4 @@
-//===-- flang/unittests/Runtime/Time.cpp ----------------------------===//
+//===-- unittests/Runtime/Time.cpp ------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/unittests/Runtime/Transformational.cpp b/FortranRuntime/unittests/Runtime/Transformational.cpp
similarity index 99%
rename from flang/unittests/Runtime/Transformational.cpp
rename to FortranRuntime/unittests/Runtime/Transformational.cpp
index 5836e70c740f9a..2dcab5a2aa8974 100644
--- a/flang/unittests/Runtime/Transformational.cpp
+++ b/FortranRuntime/unittests/Runtime/Transformational.cpp
@@ -1,4 +1,4 @@
-//===-- flang/unittests/Runtime/Transformational.cpp ----------------------===//
+//===-- unittests/Runtime/Transformational.cpp ------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/unittests/Runtime/tools.h b/FortranRuntime/unittests/Runtime/tools.h
similarity index 96%
rename from flang/unittests/Runtime/tools.h
rename to FortranRuntime/unittests/Runtime/tools.h
index 0347edace5c05c..a8e2096a90572e 100644
--- a/flang/unittests/Runtime/tools.h
+++ b/FortranRuntime/unittests/Runtime/tools.h
@@ -1,4 +1,4 @@
-//===-- flang/unittests/Runtime/tools.h -------------------------*- C++ -*-===//
+//===-- unittests/Runtime/tools.h -------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp b/clang/lib/Driver/ToolChains/CommonArgs.cpp
index f58b816a9709dd..5e4057116a97cb 100644
--- a/clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -1291,7 +1291,7 @@ void tools::addOpenMPHostOffloadingArgs(const Compilation &C,
/// Add Fortran runtime libs
void tools::addFortranRuntimeLibs(const ToolChain &TC, const ArgList &Args,
llvm::opt::ArgStringList &CmdArgs) {
- // Link FortranRuntime and FortranDecimal
+ // Link FortranRuntime
// These are handled earlier on Windows by telling the frontend driver to
// add the correct libraries to link against as dependents in the object
// file.
@@ -1308,7 +1308,6 @@ void tools::addFortranRuntimeLibs(const ToolChain &TC, const ArgList &Args,
addAsNeededOption(TC, Args, CmdArgs, /*as_needed=*/false);
}
CmdArgs.push_back("-lFortranRuntime");
- CmdArgs.push_back("-lFortranDecimal");
}
}
diff --git a/clang/lib/Driver/ToolChains/Flang.cpp b/clang/lib/Driver/ToolChains/Flang.cpp
index 6ce79d27e98c48..3619a8f4b81f08 100644
--- a/clang/lib/Driver/ToolChains/Flang.cpp
+++ b/clang/lib/Driver/ToolChains/Flang.cpp
@@ -309,21 +309,18 @@ static void processVSRuntimeLibrary(const ToolChain &TC, const ArgList &Args,
CmdArgs.push_back("-D_MT");
CmdArgs.push_back("--dependent-lib=libcmt");
CmdArgs.push_back("--dependent-lib=FortranRuntime.static.lib");
- CmdArgs.push_back("--dependent-lib=FortranDecimal.static.lib");
break;
case options::OPT__SLASH_MTd:
CmdArgs.push_back("-D_MT");
CmdArgs.push_back("-D_DEBUG");
CmdArgs.push_back("--dependent-lib=libcmtd");
CmdArgs.push_back("--dependent-lib=FortranRuntime.static_dbg.lib");
- CmdArgs.push_back("--dependent-lib=FortranDecimal.static_dbg.lib");
break;
case options::OPT__SLASH_MD:
CmdArgs.push_back("-D_MT");
CmdArgs.push_back("-D_DLL");
CmdArgs.push_back("--dependent-lib=msvcrt");
CmdArgs.push_back("--dependent-lib=FortranRuntime.dynamic.lib");
- CmdArgs.push_back("--dependent-lib=FortranDecimal.dynamic.lib");
break;
case options::OPT__SLASH_MDd:
CmdArgs.push_back("-D_MT");
@@ -331,7 +328,6 @@ static void processVSRuntimeLibrary(const ToolChain &TC, const ArgList &Args,
CmdArgs.push_back("-D_DLL");
CmdArgs.push_back("--dependent-lib=msvcrtd");
CmdArgs.push_back("--dependent-lib=FortranRuntime.dynamic_dbg.lib");
- CmdArgs.push_back("--dependent-lib=FortranDecimal.dynamic_dbg.lib");
break;
}
}
diff --git a/flang/CMakeLists.txt b/flang/CMakeLists.txt
index 971e5d5c93f231..00e570798bb412 100644
--- a/flang/CMakeLists.txt
+++ b/flang/CMakeLists.txt
@@ -23,6 +23,7 @@ if (LLVM_ENABLE_EH)
endif()
set(FLANG_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
+set(FORTRANRUNTIME_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../FortranRuntime")
if (CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR AND NOT MSVC_IDE)
message(FATAL_ERROR "In-source builds are not allowed. \
@@ -34,17 +35,6 @@ endif()
option(FLANG_ENABLE_WERROR "Fail and stop building flang if a warning is triggered." OFF)
-# The out of tree builds of the compiler and the Fortran runtime
-# must use the same setting of FLANG_RUNTIME_F128_MATH_LIB
-# to be composable. Failure to synchronize this setting may result
-# in linking errors or fatal failures in F128 runtime functions.
-set(FLANG_RUNTIME_F128_MATH_LIB "" CACHE STRING
- "Specifies the target library used for implementing IEEE-754 128-bit float \
- math in F18 runtime, e.g. it might be libquadmath for targets where \
- REAL(16) is mapped to __float128, or libm for targets where REAL(16) \
- is mapped to long double, etc."
- )
-
# Check for a standalone build and configure as appropriate from
# there.
if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
@@ -170,7 +160,6 @@ if (FLANG_STANDALONE_BUILD)
link_directories("${LLVM_LIBRARY_DIR}")
- set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY
${CMAKE_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX})
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY
@@ -249,7 +238,6 @@ include_directories(SYSTEM ${CLANG_INCLUDE_DIR})
# tco tool and FIR lib output directories
if(FLANG_STANDALONE_BUILD)
- set(LLVM_RUNTIME_OUTPUT_INTDIR ${CMAKE_BINARY_DIR}/bin)
set(LLVM_LIBRARY_OUTPUT_INTDIR ${CMAKE_BINARY_DIR}/lib)
endif()
# Always build tco tool
@@ -257,7 +245,8 @@ set(LLVM_BUILD_TOOLS ON)
include_directories(BEFORE
${FLANG_BINARY_DIR}/include
- ${FLANG_SOURCE_DIR}/include)
+ ${FLANG_SOURCE_DIR}/include
+ ${FORTRANRUNTIME_SOURCE_DIR}/include)
# Add Flang-centric modules to cmake path.
list(INSERT CMAKE_MODULE_PATH 0
@@ -335,12 +324,6 @@ if (FLANG_REPOSITORY_STRING)
add_definitions(-DFLANG_REPOSITORY_STRING="${FLANG_REPOSITORY_STRING}")
endif()
-if (FLANG_RUNTIME_F128_MATH_LIB)
- add_compile_definitions(
- FLANG_RUNTIME_F128_MATH_LIB="${FLANG_RUNTIME_F128_MATH_LIB}"
- )
-endif()
-
include(TestBigEndian)
test_big_endian(IS_BIGENDIAN)
if (IS_BIGENDIAN)
@@ -462,14 +445,6 @@ if (FLANG_BUILD_TOOLS)
add_subdirectory(tools)
endif()
-option(FLANG_CUF_RUNTIME
- "Compile CUDA Fortran runtime sources" OFF)
-if (FLANG_CUF_RUNTIME)
- find_package(CUDAToolkit REQUIRED)
-endif()
-
-add_subdirectory(runtime)
-
if (LLVM_INCLUDE_EXAMPLES)
add_subdirectory(examples)
endif()
@@ -532,17 +507,3 @@ if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY)
)
endif()
-# Put ISO_Fortran_binding.h into the include files of the build area now
-# so that we can run tests before installing
-include(GetClangResourceDir)
-get_clang_resource_dir(HEADER_BINARY_DIR PREFIX ${LLVM_LIBRARY_OUTPUT_INTDIR}/.. SUBDIR include)
-configure_file(
- ${FLANG_SOURCE_DIR}/include/flang/ISO_Fortran_binding.h
- ${HEADER_BINARY_DIR}/ISO_Fortran_binding.h)
-
-# And also install it into the install area
-get_clang_resource_dir(HEADER_INSTALL_DIR SUBDIR include)
-install(
- FILES include/flang/ISO_Fortran_binding.h
- DESTINATION ${HEADER_INSTALL_DIR} )
-
diff --git a/flang/docs/FlangDriver.md b/flang/docs/FlangDriver.md
index e1c11062125028..98611ee338e706 100644
--- a/flang/docs/FlangDriver.md
+++ b/flang/docs/FlangDriver.md
@@ -179,19 +179,18 @@ like this:
```
$ flang -v -o example example.o
-"/usr/bin/ld" [...] example.o [...] "-lFortranRuntime" "-lFortranDecimal" [...]
+"/usr/bin/ld" [...] example.o [...] "-lFortranRuntime" [...]
```
The automatically added libraries are:
* `FortranRuntime`: Provides most of the Flang runtime library.
-* `FortranDecimal`: Provides operations for decimal numbers.
If the code is C/C++ based and invokes Fortran routines, one can either use Clang
or Flang as the linker driver. If Clang is used, it will automatically all
required runtime libraries needed by C++ (e.g., for STL) to the linker invocation.
In this case, one has to explicitly provide the Fortran runtime libraries
-`FortranRuntime` and/or `FortranDecimal`. An alternative is to use Flang to link.
+`FortranRuntime`. An alternative is to use Flang to link.
In this case, it may be required to explicitly supply C++ runtime libraries.
On Darwin, the logical root where the system libraries are located (sysroot)
diff --git a/flang/include/flang/Evaluate/call.h b/flang/include/flang/Evaluate/call.h
index 7531d8a81e808d..8137185da61442 100644
--- a/flang/include/flang/Evaluate/call.h
+++ b/flang/include/flang/Evaluate/call.h
@@ -13,9 +13,9 @@
#include "constant.h"
#include "formatting.h"
#include "type.h"
-#include "flang/Common/Fortran.h"
-#include "flang/Common/indirection.h"
-#include "flang/Common/reference.h"
+#include "flang/Support/Fortran.h"
+#include "flang/Support/indirection.h"
+#include "flang/Support/reference.h"
#include "flang/Parser/char-block.h"
#include "flang/Semantics/attr.h"
#include <optional>
diff --git a/flang/include/flang/Evaluate/characteristics.h b/flang/include/flang/Evaluate/characteristics.h
index 11533a7259b055..8f1e6876d88d58 100644
--- a/flang/include/flang/Evaluate/characteristics.h
+++ b/flang/include/flang/Evaluate/characteristics.h
@@ -18,11 +18,11 @@
#include "shape.h"
#include "tools.h"
#include "type.h"
-#include "flang/Common/Fortran-features.h"
-#include "flang/Common/Fortran.h"
+#include "flang/Support/Fortran-features.h"
+#include "flang/Support/Fortran.h"
#include "flang/Common/enum-set.h"
#include "flang/Common/idioms.h"
-#include "flang/Common/indirection.h"
+#include "flang/Support/indirection.h"
#include "flang/Parser/char-block.h"
#include "flang/Semantics/symbol.h"
#include <optional>
diff --git a/flang/include/flang/Evaluate/common.h b/flang/include/flang/Evaluate/common.h
index d493e5fe044173..69f09a930dc604 100644
--- a/flang/include/flang/Evaluate/common.h
+++ b/flang/include/flang/Evaluate/common.h
@@ -9,15 +9,17 @@
#ifndef FORTRAN_EVALUATE_COMMON_H_
#define FORTRAN_EVALUATE_COMMON_H_
-#include "flang/Common/Fortran-features.h"
-#include "flang/Common/Fortran.h"
-#include "flang/Common/default-kinds.h"
+#include "flang/Support/Fortran-features.h"
+#include "flang/Support/Fortran.h"
+#include "flang/Support/default-kinds.h"
#include "flang/Common/enum-set.h"
#include "flang/Common/idioms.h"
-#include "flang/Common/indirection.h"
+#include "flang/Support/indirection.h"
+#include "flang/Common/Fortran-consts.h"
#include "flang/Common/restorer.h"
#include "flang/Parser/char-block.h"
#include "flang/Parser/message.h"
+#include "flang/Common/target-rounding.h"
#include <cinttypes>
#include <map>
#include <set>
@@ -33,6 +35,9 @@ class TargetCharacteristics;
using common::ConstantSubscript;
using common::RelationalOperator;
+using common::RoundingMode;
+using common::RealFlags;
+using common::RealFlag;
// Integers are always ordered; reals may not be.
ENUM_CLASS(Ordering, Less, Equal, Greater)
@@ -128,11 +133,6 @@ static constexpr bool Satisfies(RelationalOperator op, Relation relation) {
return false; // silence g++ warning
}
-// These are ordered like the bits in a common fenv.h header file.
-ENUM_CLASS(RealFlag, InvalidArgument, Denorm, DivideByZero, Overflow, Underflow,
- Inexact)
-using RealFlags = common::EnumSet<RealFlag, RealFlag_enumSize>;
-
template <typename A> struct ValueWithRealFlags {
A AccumulateFlags(RealFlags &f) {
f |= flags;
diff --git a/flang/include/flang/Evaluate/constant.h b/flang/include/flang/Evaluate/constant.h
index d9866a08889f35..a171b10026409c 100644
--- a/flang/include/flang/Evaluate/constant.h
+++ b/flang/include/flang/Evaluate/constant.h
@@ -11,8 +11,8 @@
#include "formatting.h"
#include "type.h"
-#include "flang/Common/default-kinds.h"
-#include "flang/Common/reference.h"
+#include "flang/Support/default-kinds.h"
+#include "flang/Support/reference.h"
#include <map>
#include <vector>
diff --git a/flang/include/flang/Evaluate/expression.h b/flang/include/flang/Evaluate/expression.h
index 2a40193e32306b..a582a2ea1a6989 100644
--- a/flang/include/flang/Evaluate/expression.h
+++ b/flang/include/flang/Evaluate/expression.h
@@ -21,10 +21,10 @@
#include "formatting.h"
#include "type.h"
#include "variable.h"
-#include "flang/Common/Fortran.h"
+#include "flang/Support/Fortran.h"
#include "flang/Common/idioms.h"
-#include "flang/Common/indirection.h"
-#include "flang/Common/template.h"
+#include "flang/Support/indirection.h"
+#include "flang/Support/template.h"
#include "flang/Parser/char-block.h"
#include <algorithm>
#include <list>
diff --git a/flang/include/flang/Evaluate/formatting.h b/flang/include/flang/Evaluate/formatting.h
index aa82f56107fdd3..ae9351139b1933 100644
--- a/flang/include/flang/Evaluate/formatting.h
+++ b/flang/include/flang/Evaluate/formatting.h
@@ -19,7 +19,7 @@
// This header is meant to be included by the headers that define the several
// representational class templates that need it, not by external clients.
-#include "flang/Common/indirection.h"
+#include "flang/Support/indirection.h"
#include "llvm/Support/raw_ostream.h"
#include <optional>
#include <type_traits>
diff --git a/flang/include/flang/Evaluate/intrinsics.h b/flang/include/flang/Evaluate/intrinsics.h
index 15afb772ae767b..17f555445f6f79 100644
--- a/flang/include/flang/Evaluate/intrinsics.h
+++ b/flang/include/flang/Evaluate/intrinsics.h
@@ -12,7 +12,7 @@
#include "call.h"
#include "characteristics.h"
#include "type.h"
-#include "flang/Common/default-kinds.h"
+#include "flang/Support/default-kinds.h"
#include "flang/Parser/char-block.h"
#include "flang/Parser/message.h"
#include <memory>
diff --git a/flang/include/flang/Evaluate/shape.h b/flang/include/flang/Evaluate/shape.h
index e33044c0d34e56..f3eeea7984bba7 100644
--- a/flang/include/flang/Evaluate/shape.h
+++ b/flang/include/flang/Evaluate/shape.h
@@ -15,7 +15,7 @@
#include "expression.h"
#include "traverse.h"
#include "variable.h"
-#include "flang/Common/indirection.h"
+#include "flang/Support/indirection.h"
#include "flang/Evaluate/type.h"
#include <optional>
#include <variant>
diff --git a/flang/include/flang/Evaluate/target.h b/flang/include/flang/Evaluate/target.h
index d076fcbf083078..8f52b29bec6654 100644
--- a/flang/include/flang/Evaluate/target.h
+++ b/flang/include/flang/Evaluate/target.h
@@ -12,27 +12,16 @@
#ifndef FORTRAN_EVALUATE_TARGET_H_
#define FORTRAN_EVALUATE_TARGET_H_
-#include "flang/Common/Fortran.h"
+#include "flang/Support/Fortran.h"
#include "flang/Common/enum-class.h"
#include "flang/Common/enum-set.h"
+#include "flang/Common/target-rounding.h"
#include "flang/Evaluate/common.h"
#include <cstdint>
namespace Fortran::evaluate {
-// Floating-point rounding control
-struct Rounding {
- common::RoundingMode mode{common::RoundingMode::TiesToEven};
- // When set, emulate status flag behavior peculiar to x86
- // (viz., fail to set the Underflow flag when an inexact product of a
- // multiplication is rounded up to a normal number from a subnormal
- // in some rounding modes)
-#if __x86_64__ || __riscv || __loongarch__
- bool x86CompatibleBehavior{true};
-#else
- bool x86CompatibleBehavior{false};
-#endif
-};
+using common::Rounding;
ENUM_CLASS(IeeeFeature, Denormal, Divide, Flags, Halting, Inf, Io, NaN,
Rounding, Sqrt, Standard, Subnormal, UnderflowControl)
diff --git a/flang/include/flang/Evaluate/tools.h b/flang/include/flang/Evaluate/tools.h
index a0487e399d936c..29d19bff44c79c 100644
--- a/flang/include/flang/Evaluate/tools.h
+++ b/flang/include/flang/Evaluate/tools.h
@@ -11,8 +11,8 @@
#include "traverse.h"
#include "flang/Common/idioms.h"
-#include "flang/Common/template.h"
-#include "flang/Common/unwrap.h"
+#include "flang/Support/template.h"
+#include "flang/Support/unwrap.h"
#include "flang/Evaluate/constant.h"
#include "flang/Evaluate/expression.h"
#include "flang/Evaluate/shape.h"
diff --git a/flang/include/flang/Evaluate/traverse.h b/flang/include/flang/Evaluate/traverse.h
index 7f4a67d97e64e7..e04888f395c013 100644
--- a/flang/include/flang/Evaluate/traverse.h
+++ b/flang/include/flang/Evaluate/traverse.h
@@ -38,7 +38,7 @@
// expression of an ASSOCIATE (or related) construct entity.
#include "expression.h"
-#include "flang/Common/indirection.h"
+#include "flang/Support/indirection.h"
#include "flang/Semantics/symbol.h"
#include "flang/Semantics/type.h"
#include <set>
diff --git a/flang/include/flang/Evaluate/type.h b/flang/include/flang/Evaluate/type.h
index bd8887dbce4e82..b68a5790c810fd 100644
--- a/flang/include/flang/Evaluate/type.h
+++ b/flang/include/flang/Evaluate/type.h
@@ -22,11 +22,11 @@
#include "integer.h"
#include "logical.h"
#include "real.h"
-#include "flang/Common/Fortran-features.h"
-#include "flang/Common/Fortran.h"
+#include "flang/Support/Fortran-features.h"
+#include "flang/Support/Fortran.h"
#include "flang/Common/idioms.h"
#include "flang/Common/real.h"
-#include "flang/Common/template.h"
+#include "flang/Support/template.h"
#include <cinttypes>
#include <optional>
#include <string>
diff --git a/flang/include/flang/Evaluate/variable.h b/flang/include/flang/Evaluate/variable.h
index 9565826dbfaea4..8d0da5b24277cd 100644
--- a/flang/include/flang/Evaluate/variable.h
+++ b/flang/include/flang/Evaluate/variable.h
@@ -21,8 +21,8 @@
#include "static-data.h"
#include "type.h"
#include "flang/Common/idioms.h"
-#include "flang/Common/reference.h"
-#include "flang/Common/template.h"
+#include "flang/Support/reference.h"
+#include "flang/Support/template.h"
#include "flang/Parser/char-block.h"
#include <optional>
#include <variant>
diff --git a/flang/include/flang/Frontend/FrontendOptions.h b/flang/include/flang/Frontend/FrontendOptions.h
index 82ca99672ec610..b69ffe83de1707 100644
--- a/flang/include/flang/Frontend/FrontendOptions.h
+++ b/flang/include/flang/Frontend/FrontendOptions.h
@@ -13,7 +13,7 @@
#ifndef FORTRAN_FRONTEND_FRONTENDOPTIONS_H
#define FORTRAN_FRONTEND_FRONTENDOPTIONS_H
-#include "flang/Common/Fortran-features.h"
+#include "flang/Support/Fortran-features.h"
#include "flang/Lower/EnvironmentDefault.h"
#include "flang/Parser/characters.h"
#include "flang/Parser/unparse.h"
diff --git a/flang/include/flang/Lower/AbstractConverter.h b/flang/include/flang/Lower/AbstractConverter.h
index daded9091780e2..56646c196a7de5 100644
--- a/flang/include/flang/Lower/AbstractConverter.h
+++ b/flang/include/flang/Lower/AbstractConverter.h
@@ -13,7 +13,7 @@
#ifndef FORTRAN_LOWER_ABSTRACTCONVERTER_H
#define FORTRAN_LOWER_ABSTRACTCONVERTER_H
-#include "flang/Common/Fortran.h"
+#include "flang/Support/Fortran.h"
#include "flang/Lower/LoweringOptions.h"
#include "flang/Lower/PFTDefs.h"
#include "flang/Optimizer/Builder/BoxValue.h"
diff --git a/flang/include/flang/Lower/Bridge.h b/flang/include/flang/Lower/Bridge.h
index 4379ed512cdf0a..0c2c7abc324952 100644
--- a/flang/include/flang/Lower/Bridge.h
+++ b/flang/include/flang/Lower/Bridge.h
@@ -13,7 +13,7 @@
#ifndef FORTRAN_LOWER_BRIDGE_H
#define FORTRAN_LOWER_BRIDGE_H
-#include "flang/Common/Fortran.h"
+#include "flang/Support/Fortran.h"
#include "flang/Lower/AbstractConverter.h"
#include "flang/Lower/EnvironmentDefault.h"
#include "flang/Lower/LoweringOptions.h"
diff --git a/flang/include/flang/Lower/CallInterface.h b/flang/include/flang/Lower/CallInterface.h
index 9a688330e8bd2d..df01eafe679d7d 100644
--- a/flang/include/flang/Lower/CallInterface.h
+++ b/flang/include/flang/Lower/CallInterface.h
@@ -27,7 +27,7 @@
#ifndef FORTRAN_LOWER_CALLINTERFACE_H
#define FORTRAN_LOWER_CALLINTERFACE_H
-#include "flang/Common/reference.h"
+#include "flang/Support/reference.h"
#include "flang/Evaluate/characteristics.h"
#include "mlir/Dialect/Func/IR/FuncOps.h"
#include "mlir/IR/BuiltinOps.h"
diff --git a/flang/include/flang/Lower/ConvertType.h b/flang/include/flang/Lower/ConvertType.h
index 7a3f92649a4e4a..b889d2bb279de2 100644
--- a/flang/include/flang/Lower/ConvertType.h
+++ b/flang/include/flang/Lower/ConvertType.h
@@ -21,7 +21,7 @@
#ifndef FORTRAN_LOWER_CONVERT_TYPE_H
#define FORTRAN_LOWER_CONVERT_TYPE_H
-#include "flang/Common/Fortran.h"
+#include "flang/Support/Fortran.h"
#include "flang/Evaluate/type.h"
#include "mlir/IR/BuiltinTypes.h"
diff --git a/flang/include/flang/Lower/LoweringOptions.h b/flang/include/flang/Lower/LoweringOptions.h
index 8105ccd7ef6b15..171510393b8168 100644
--- a/flang/include/flang/Lower/LoweringOptions.h
+++ b/flang/include/flang/Lower/LoweringOptions.h
@@ -15,7 +15,7 @@
#ifndef FLANG_LOWER_LOWERINGOPTIONS_H
#define FLANG_LOWER_LOWERINGOPTIONS_H
-#include "flang/Common/MathOptionsBase.h"
+#include "flang/Support/MathOptionsBase.h"
namespace Fortran::lower {
diff --git a/flang/include/flang/Lower/PFTBuilder.h b/flang/include/flang/Lower/PFTBuilder.h
index 7f1b93c564b4c4..7ee61e630581fe 100644
--- a/flang/include/flang/Lower/PFTBuilder.h
+++ b/flang/include/flang/Lower/PFTBuilder.h
@@ -17,8 +17,8 @@
#ifndef FORTRAN_LOWER_PFTBUILDER_H
#define FORTRAN_LOWER_PFTBUILDER_H
-#include "flang/Common/reference.h"
-#include "flang/Common/template.h"
+#include "flang/Support/reference.h"
+#include "flang/Support/template.h"
#include "flang/Lower/HostAssociations.h"
#include "flang/Lower/PFTDefs.h"
#include "flang/Parser/parse-tree.h"
diff --git a/flang/include/flang/Lower/Support/Utils.h b/flang/include/flang/Lower/Support/Utils.h
index 1cc74521e22d88..a09cfb16f7805a 100644
--- a/flang/include/flang/Lower/Support/Utils.h
+++ b/flang/include/flang/Lower/Support/Utils.h
@@ -13,7 +13,7 @@
#ifndef FORTRAN_LOWER_SUPPORT_UTILS_H
#define FORTRAN_LOWER_SUPPORT_UTILS_H
-#include "flang/Common/indirection.h"
+#include "flang/Support/indirection.h"
#include "flang/Parser/char-block.h"
#include "flang/Semantics/tools.h"
#include "mlir/Dialect/Arith/IR/Arith.h"
diff --git a/flang/include/flang/Lower/SymbolMap.h b/flang/include/flang/Lower/SymbolMap.h
index c03f9afd40801c..7bba02e41a3bdf 100644
--- a/flang/include/flang/Lower/SymbolMap.h
+++ b/flang/include/flang/Lower/SymbolMap.h
@@ -13,7 +13,7 @@
#ifndef FORTRAN_LOWER_SYMBOLMAP_H
#define FORTRAN_LOWER_SYMBOLMAP_H
-#include "flang/Common/reference.h"
+#include "flang/Support/reference.h"
#include "flang/Optimizer/Builder/BoxValue.h"
#include "flang/Optimizer/Dialect/FIRType.h"
#include "flang/Optimizer/Dialect/FortranVariableInterface.h"
diff --git a/flang/include/flang/Optimizer/Builder/FIRBuilder.h b/flang/include/flang/Optimizer/Builder/FIRBuilder.h
index f7151f26f09cb3..90279417b5c939 100644
--- a/flang/include/flang/Optimizer/Builder/FIRBuilder.h
+++ b/flang/include/flang/Optimizer/Builder/FIRBuilder.h
@@ -16,7 +16,7 @@
#ifndef FORTRAN_OPTIMIZER_BUILDER_FIRBUILDER_H
#define FORTRAN_OPTIMIZER_BUILDER_FIRBUILDER_H
-#include "flang/Common/MathOptionsBase.h"
+#include "flang/Support/MathOptionsBase.h"
#include "flang/Optimizer/Dialect/FIROps.h"
#include "flang/Optimizer/Dialect/FIROpsSupport.h"
#include "flang/Optimizer/Dialect/FIRType.h"
diff --git a/flang/include/flang/Optimizer/Builder/IntrinsicCall.h b/flang/include/flang/Optimizer/Builder/IntrinsicCall.h
index 78bb82b17d4050..3fc4201bd16c6c 100644
--- a/flang/include/flang/Optimizer/Builder/IntrinsicCall.h
+++ b/flang/include/flang/Optimizer/Builder/IntrinsicCall.h
@@ -397,6 +397,7 @@ struct IntrinsicLibrary {
fir::ExtendedValue genUbound(mlir::Type, llvm::ArrayRef<fir::ExtendedValue>);
fir::ExtendedValue genUnpack(mlir::Type, llvm::ArrayRef<fir::ExtendedValue>);
fir::ExtendedValue genVerify(mlir::Type, llvm::ArrayRef<fir::ExtendedValue>);
+ fir::ExtendedValue genNumericStorageSize(mlir::Type, llvm::ArrayRef<fir::ExtendedValue>);
/// Implement all conversion functions like DBLE, the first argument is
/// the value to convert. There may be an additional KIND arguments that
diff --git a/flang/include/flang/Optimizer/Builder/PPCIntrinsicCall.h b/flang/include/flang/Optimizer/Builder/PPCIntrinsicCall.h
index a7c4c075d818ee..26cf34188eb568 100644
--- a/flang/include/flang/Optimizer/Builder/PPCIntrinsicCall.h
+++ b/flang/include/flang/Optimizer/Builder/PPCIntrinsicCall.h
@@ -9,7 +9,7 @@
#ifndef FORTRAN_LOWER_PPCINTRINSICCALL_H
#define FORTRAN_LOWER_PPCINTRINSICCALL_H
-#include "flang/Common/static-multimap-view.h"
+#include "flang/Support/static-multimap-view.h"
#include "flang/Optimizer/Builder/IntrinsicCall.h"
#include "mlir/Dialect/Math/IR/Math.h"
diff --git a/flang/include/flang/Optimizer/Builder/Runtime/RTBuilder.h b/flang/include/flang/Optimizer/Builder/Runtime/RTBuilder.h
index a103861f1510b8..104e363e689857 100644
--- a/flang/include/flang/Optimizer/Builder/Runtime/RTBuilder.h
+++ b/flang/include/flang/Optimizer/Builder/Runtime/RTBuilder.h
@@ -17,7 +17,7 @@
#ifndef FORTRAN_OPTIMIZER_BUILDER_RUNTIME_RTBUILDER_H
#define FORTRAN_OPTIMIZER_BUILDER_RUNTIME_RTBUILDER_H
-#include "flang/Common/Fortran.h"
+#include "flang/Support/Fortran.h"
#include "flang/Common/uint128.h"
#include "flang/Optimizer/Builder/FIRBuilder.h"
#include "flang/Optimizer/Dialect/FIRDialect.h"
diff --git a/flang/include/flang/Optimizer/CodeGen/DescriptorModel.h b/flang/include/flang/Optimizer/CodeGen/DescriptorModel.h
index ff0cf29e8073e6..31d1416846d0c9 100644
--- a/flang/include/flang/Optimizer/CodeGen/DescriptorModel.h
+++ b/flang/include/flang/Optimizer/CodeGen/DescriptorModel.h
@@ -22,7 +22,7 @@
#ifndef OPTIMIZER_DESCRIPTOR_MODEL_H
#define OPTIMIZER_DESCRIPTOR_MODEL_H
-#include "flang/ISO_Fortran_binding_wrapper.h"
+#include "flang/Common/ISO_Fortran_binding_wrapper.h"
#include "flang/Runtime/descriptor.h"
#include "mlir/Dialect/LLVMIR/LLVMTypes.h"
#include "mlir/IR/BuiltinTypes.h"
diff --git a/flang/include/flang/Optimizer/Dialect/CUF/Attributes/CUFAttr.h b/flang/include/flang/Optimizer/Dialect/CUF/Attributes/CUFAttr.h
index f32e39b543e3f7..85615a4d69157d 100644
--- a/flang/include/flang/Optimizer/Dialect/CUF/Attributes/CUFAttr.h
+++ b/flang/include/flang/Optimizer/Dialect/CUF/Attributes/CUFAttr.h
@@ -13,7 +13,7 @@
#ifndef FORTRAN_OPTIMIZER_DIALECT_CUF_CUFATTR_H
#define FORTRAN_OPTIMIZER_DIALECT_CUF_CUFATTR_H
-#include "flang/Common/Fortran.h"
+#include "flang/Support/Fortran.h"
#include "mlir/IR/BuiltinAttributes.h"
namespace llvm {
diff --git a/flang/include/flang/Optimizer/Support/TypeCode.h b/flang/include/flang/Optimizer/Support/TypeCode.h
index 308c82118d5020..ec21d672287e62 100644
--- a/flang/include/flang/Optimizer/Support/TypeCode.h
+++ b/flang/include/flang/Optimizer/Support/TypeCode.h
@@ -13,7 +13,7 @@
#ifndef FORTRAN_OPTIMIZER_SUPPORT_TYPECODE_H
#define FORTRAN_OPTIMIZER_SUPPORT_TYPECODE_H
-#include "flang/ISO_Fortran_binding_wrapper.h"
+#include "flang/Common/ISO_Fortran_binding_wrapper.h"
#include "llvm/Support/ErrorHandling.h"
namespace fir {
diff --git a/flang/include/flang/Optimizer/Support/Utils.h b/flang/include/flang/Optimizer/Support/Utils.h
index 02bec4164fca08..631322b34c49e5 100644
--- a/flang/include/flang/Optimizer/Support/Utils.h
+++ b/flang/include/flang/Optimizer/Support/Utils.h
@@ -13,7 +13,7 @@
#ifndef FORTRAN_OPTIMIZER_SUPPORT_UTILS_H
#define FORTRAN_OPTIMIZER_SUPPORT_UTILS_H
-#include "flang/Common/default-kinds.h"
+#include "flang/Support/default-kinds.h"
#include "flang/Optimizer/Builder/FIRBuilder.h"
#include "flang/Optimizer/Builder/Todo.h"
#include "flang/Optimizer/Dialect/CUF/Attributes/CUFAttr.h"
diff --git a/flang/include/flang/Parser/char-block.h b/flang/include/flang/Parser/char-block.h
index 38f4f7b82e1eae..4541b31e566f95 100644
--- a/flang/include/flang/Parser/char-block.h
+++ b/flang/include/flang/Parser/char-block.h
@@ -11,7 +11,7 @@
// Describes a contiguous block of characters; does not own their storage.
-#include "flang/Common/interval.h"
+#include "flang/Support/interval.h"
#include <algorithm>
#include <cstddef>
#include <cstring>
diff --git a/flang/include/flang/Parser/dump-parse-tree.h b/flang/include/flang/Parser/dump-parse-tree.h
index 37c3370b48a085..f98ac17b6ecba7 100644
--- a/flang/include/flang/Parser/dump-parse-tree.h
+++ b/flang/include/flang/Parser/dump-parse-tree.h
@@ -14,9 +14,9 @@
#include "parse-tree.h"
#include "tools.h"
#include "unparse.h"
-#include "flang/Common/Fortran.h"
+#include "flang/Support/Fortran.h"
#include "flang/Common/idioms.h"
-#include "flang/Common/indirection.h"
+#include "flang/Support/indirection.h"
#include "llvm/Support/raw_ostream.h"
#include <string>
#include <type_traits>
diff --git a/flang/include/flang/Parser/message.h b/flang/include/flang/Parser/message.h
index 668559aeec9478..70746bf551f2d7 100644
--- a/flang/include/flang/Parser/message.h
+++ b/flang/include/flang/Parser/message.h
@@ -16,7 +16,7 @@
#include "char-set.h"
#include "provenance.h"
#include "flang/Common/idioms.h"
-#include "flang/Common/reference-counted.h"
+#include "flang/Support/reference-counted.h"
#include "flang/Common/restorer.h"
#include <cstddef>
#include <cstring>
diff --git a/flang/include/flang/Parser/parse-state.h b/flang/include/flang/Parser/parse-state.h
index 76cbb3470dc08d..20d339aeeccccf 100644
--- a/flang/include/flang/Parser/parse-state.h
+++ b/flang/include/flang/Parser/parse-state.h
@@ -16,7 +16,7 @@
// and recovery during parsing!
#include "user-state.h"
-#include "flang/Common/Fortran-features.h"
+#include "flang/Support/Fortran-features.h"
#include "flang/Common/idioms.h"
#include "flang/Parser/characters.h"
#include "flang/Parser/message.h"
diff --git a/flang/include/flang/Parser/parse-tree.h b/flang/include/flang/Parser/parse-tree.h
index 548fcc81984b2a..a6d19dd6435966 100644
--- a/flang/include/flang/Parser/parse-tree.h
+++ b/flang/include/flang/Parser/parse-tree.h
@@ -22,9 +22,9 @@
#include "format-specification.h"
#include "message.h"
#include "provenance.h"
-#include "flang/Common/Fortran.h"
+#include "flang/Support/Fortran.h"
#include "flang/Common/idioms.h"
-#include "flang/Common/indirection.h"
+#include "flang/Support/indirection.h"
#include "llvm/Frontend/OpenACC/ACC.h.inc"
#include "llvm/Frontend/OpenMP/OMPConstants.h"
#include <cinttypes>
diff --git a/flang/include/flang/Parser/parsing.h b/flang/include/flang/Parser/parsing.h
index 4d329c189cb80e..b0de98737f536e 100644
--- a/flang/include/flang/Parser/parsing.h
+++ b/flang/include/flang/Parser/parsing.h
@@ -14,7 +14,7 @@
#include "message.h"
#include "parse-tree.h"
#include "provenance.h"
-#include "flang/Common/Fortran-features.h"
+#include "flang/Support/Fortran-features.h"
#include "flang/Parser/preprocessor.h"
#include "llvm/Support/raw_ostream.h"
#include <optional>
diff --git a/flang/include/flang/Parser/provenance.h b/flang/include/flang/Parser/provenance.h
index a9224b727fd054..7f29fb272c9421 100644
--- a/flang/include/flang/Parser/provenance.h
+++ b/flang/include/flang/Parser/provenance.h
@@ -14,7 +14,7 @@
#include "characters.h"
#include "source.h"
#include "flang/Common/idioms.h"
-#include "flang/Common/interval.h"
+#include "flang/Support/interval.h"
#include "llvm/Support/raw_ostream.h"
#include <cstddef>
#include <list>
diff --git a/flang/include/flang/Parser/source.h b/flang/include/flang/Parser/source.h
index a6efdf9546c7f3..a67fd66045a3de 100644
--- a/flang/include/flang/Parser/source.h
+++ b/flang/include/flang/Parser/source.h
@@ -15,7 +15,7 @@
// - A Unicode byte order mark is recognized if present.
#include "characters.h"
-#include "flang/Common/reference.h"
+#include "flang/Support/reference.h"
#include "llvm/Support/MemoryBuffer.h"
#include "llvm/Support/raw_ostream.h"
#include <cstddef>
diff --git a/flang/include/flang/Parser/user-state.h b/flang/include/flang/Parser/user-state.h
index 61745a833c715c..fff651208e0e52 100644
--- a/flang/include/flang/Parser/user-state.h
+++ b/flang/include/flang/Parser/user-state.h
@@ -14,7 +14,7 @@
// parse tree construction so as to avoid any need for representing
// state in static data.
-#include "flang/Common/Fortran-features.h"
+#include "flang/Support/Fortran-features.h"
#include "flang/Common/idioms.h"
#include "flang/Parser/char-block.h"
#include "flang/Parser/parse-tree.h"
diff --git a/flang/include/flang/Semantics/expression.h b/flang/include/flang/Semantics/expression.h
index c90c8c4b3cc70f..77e26ffb834dd9 100644
--- a/flang/include/flang/Semantics/expression.h
+++ b/flang/include/flang/Semantics/expression.h
@@ -10,8 +10,8 @@
#define FORTRAN_SEMANTICS_EXPRESSION_H_
#include "semantics.h"
-#include "flang/Common/Fortran.h"
-#include "flang/Common/indirection.h"
+#include "flang/Support/Fortran.h"
+#include "flang/Support/indirection.h"
#include "flang/Common/restorer.h"
#include "flang/Common/visit.h"
#include "flang/Evaluate/characteristics.h"
diff --git a/flang/include/flang/Semantics/runtime-type-info.h b/flang/include/flang/Semantics/runtime-type-info.h
index e90d3ae8baf1eb..3f9f776797d782 100644
--- a/flang/include/flang/Semantics/runtime-type-info.h
+++ b/flang/include/flang/Semantics/runtime-type-info.h
@@ -14,7 +14,7 @@
#ifndef FORTRAN_SEMANTICS_RUNTIME_TYPE_INFO_H_
#define FORTRAN_SEMANTICS_RUNTIME_TYPE_INFO_H_
-#include "flang/Common/reference.h"
+#include "flang/Support/reference.h"
#include "flang/Semantics/symbol.h"
#include <map>
#include <set>
diff --git a/flang/include/flang/Semantics/scope.h b/flang/include/flang/Semantics/scope.h
index e73a507e9b3f5b..8b416dcffb5245 100644
--- a/flang/include/flang/Semantics/scope.h
+++ b/flang/include/flang/Semantics/scope.h
@@ -11,9 +11,9 @@
#include "attr.h"
#include "symbol.h"
-#include "flang/Common/Fortran.h"
+#include "flang/Support/Fortran.h"
#include "flang/Common/idioms.h"
-#include "flang/Common/reference.h"
+#include "flang/Support/reference.h"
#include "flang/Parser/message.h"
#include "flang/Parser/provenance.h"
#include <list>
diff --git a/flang/include/flang/Semantics/semantics.h b/flang/include/flang/Semantics/semantics.h
index e73f9d2e85d589..899d4afa016bff 100644
--- a/flang/include/flang/Semantics/semantics.h
+++ b/flang/include/flang/Semantics/semantics.h
@@ -11,7 +11,7 @@
#include "scope.h"
#include "symbol.h"
-#include "flang/Common/Fortran-features.h"
+#include "flang/Support/Fortran-features.h"
#include "flang/Evaluate/common.h"
#include "flang/Evaluate/intrinsics.h"
#include "flang/Evaluate/target.h"
diff --git a/flang/include/flang/Semantics/symbol.h b/flang/include/flang/Semantics/symbol.h
index b4db6689a94271..29587be2c7d77d 100644
--- a/flang/include/flang/Semantics/symbol.h
+++ b/flang/include/flang/Semantics/symbol.h
@@ -10,9 +10,9 @@
#define FORTRAN_SEMANTICS_SYMBOL_H_
#include "type.h"
-#include "flang/Common/Fortran.h"
+#include "flang/Support/Fortran.h"
#include "flang/Common/enum-set.h"
-#include "flang/Common/reference.h"
+#include "flang/Support/reference.h"
#include "flang/Common/visit.h"
#include "flang/Semantics/module-dependences.h"
#include "llvm/ADT/DenseMapInfo.h"
diff --git a/flang/include/flang/Semantics/tools.h b/flang/include/flang/Semantics/tools.h
index 15c02ecc0058cc..9be7ebff9b5bb6 100644
--- a/flang/include/flang/Semantics/tools.h
+++ b/flang/include/flang/Semantics/tools.h
@@ -12,7 +12,7 @@
// Simple predicates and look-up functions that are best defined
// canonically for use in semantic checking.
-#include "flang/Common/Fortran.h"
+#include "flang/Support/Fortran.h"
#include "flang/Common/visit.h"
#include "flang/Evaluate/expression.h"
#include "flang/Evaluate/shape.h"
diff --git a/flang/include/flang/Semantics/type.h b/flang/include/flang/Semantics/type.h
index e2d47d38f927f7..fd31bc805e2de6 100644
--- a/flang/include/flang/Semantics/type.h
+++ b/flang/include/flang/Semantics/type.h
@@ -9,7 +9,7 @@
#ifndef FORTRAN_SEMANTICS_TYPE_H_
#define FORTRAN_SEMANTICS_TYPE_H_
-#include "flang/Common/Fortran.h"
+#include "flang/Support/Fortran.h"
#include "flang/Common/idioms.h"
#include "flang/Evaluate/expression.h"
#include "flang/Parser/char-block.h"
diff --git a/flang/include/flang/Common/Fortran-features.h b/flang/include/flang/Support/Fortran-features.h
similarity index 98%
rename from flang/include/flang/Common/Fortran-features.h
rename to flang/include/flang/Support/Fortran-features.h
index 86c6e02b0f2ffd..f0bfc9232ea9e9 100644
--- a/flang/include/flang/Common/Fortran-features.h
+++ b/flang/include/flang/Support/Fortran-features.h
@@ -1,4 +1,4 @@
-//===-- include/flang/Common/Fortran-features.h -----------------*- C++ -*-===//
+//===-- include/flang/Support/Fortran-features.h ----------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -9,7 +9,7 @@
#ifndef FORTRAN_COMMON_FORTRAN_FEATURES_H_
#define FORTRAN_COMMON_FORTRAN_FEATURES_H_
-#include "flang/Common/Fortran.h"
+#include "flang/Support/Fortran.h"
#include "flang/Common/enum-set.h"
#include "flang/Common/idioms.h"
#include <vector>
diff --git a/flang/include/flang/Common/Fortran.h b/flang/include/flang/Support/Fortran.h
similarity index 73%
rename from flang/include/flang/Common/Fortran.h
rename to flang/include/flang/Support/Fortran.h
index 5b2ed43a8f99c0..6dbfb51f19dd8e 100644
--- a/flang/include/flang/Common/Fortran.h
+++ b/flang/include/flang/Support/Fortran.h
@@ -1,4 +1,4 @@
-//===-- include/flang/Common/Fortran.h --------------------------*- C++ -*-===//
+//===-- include/flang/Support/Fortran.h -------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -9,21 +9,20 @@
#ifndef FORTRAN_COMMON_FORTRAN_H_
#define FORTRAN_COMMON_FORTRAN_H_
-// Fortran language concepts that are used in many phases are defined
-// once here to avoid redundancy and needless translation.
-#include "enum-set.h"
-#include "idioms.h"
+
+#include "flang/Common/Fortran-consts.h"
+#include "flang/Common/enum-set.h"
+#include "flang/Common/idioms.h"
#include <cinttypes>
#include <optional>
#include <string>
+
namespace Fortran::common {
-class LanguageFeatureControl;
+ class LanguageFeatureControl;
+
-// Fortran has five kinds of intrinsic data types, plus the derived types.
-ENUM_CLASS(TypeCategory, Integer, Real, Complex, Character, Logical, Derived)
-ENUM_CLASS(VectorElementCategory, Integer, Unsigned, Real)
constexpr bool IsNumericTypeCategory(TypeCategory category) {
return category == TypeCategory::Integer || category == TypeCategory::Real ||
@@ -47,8 +46,6 @@ const char *AsFortran(RelationalOperator);
ENUM_CLASS(Intent, Default, In, Out, InOut)
-ENUM_CLASS(IoStmtKind, None, Backspace, Close, Endfile, Flush, Inquire, Open,
- Print, Read, Rewind, Wait, Write)
// Union of specifiers for all I/O statements.
ENUM_CLASS(IoSpecKind, Access, Action, Advance, Asynchronous, Blank, Decimal,
@@ -61,28 +58,14 @@ ENUM_CLASS(IoSpecKind, Access, Action, Advance, Asynchronous, Blank, Decimal,
Dispose, // nonstandard
)
-// Defined I/O variants
-ENUM_CLASS(
- DefinedIo, ReadFormatted, ReadUnformatted, WriteFormatted, WriteUnformatted)
+
const char *AsFortran(DefinedIo);
-// Floating-point rounding modes; these are packed into a byte to save
-// room in the runtime's format processing context structure. These
-// enumerators are defined with the corresponding values returned from
-// llvm.get.rounding.
-enum class RoundingMode : std::uint8_t {
- ToZero, // ROUND=ZERO, RZ - truncation
- TiesToEven, // ROUND=NEAREST, RN - default IEEE rounding
- Up, // ROUND=UP, RU
- Down, // ROUND=DOWN, RD
- TiesAwayFromZero, // ROUND=COMPATIBLE, RC - ties round away from zero
-};
// Fortran label. Must be in [1..99999].
using Label = std::uint64_t;
-// Fortran arrays may have up to 15 dimensions (See Fortran 2018 section 5.4.6).
-static constexpr int maxRank{15};
+
// CUDA subprogram attribute combinations
ENUM_CLASS(CUDASubprogramAttrs, Host, Device, HostDevice, Global, Grid_Global)
@@ -129,6 +112,5 @@ inline std::string GetExternalAssemblyName(
std::string symbolName, bool underscoring) {
return underscoring ? std::move(symbolName) + "_" : std::move(symbolName);
}
-
} // namespace Fortran::common
#endif // FORTRAN_COMMON_FORTRAN_H_
diff --git a/flang/include/flang/Common/MathOptionsBase.def b/flang/include/flang/Support/MathOptionsBase.def
similarity index 100%
rename from flang/include/flang/Common/MathOptionsBase.def
rename to flang/include/flang/Support/MathOptionsBase.def
diff --git a/flang/include/flang/Common/MathOptionsBase.h b/flang/include/flang/Support/MathOptionsBase.h
similarity index 86%
rename from flang/include/flang/Common/MathOptionsBase.h
rename to flang/include/flang/Support/MathOptionsBase.h
index 7f8ebdbee19878..a739ba3e066599 100644
--- a/flang/include/flang/Common/MathOptionsBase.h
+++ b/flang/include/flang/Support/MathOptionsBase.h
@@ -1,4 +1,4 @@
-//===- MathOptionsBase.h - Math options config ------------------*- C++ -*-===//
+//===-- include/flang/Support/MathOptionsBase.h -----------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -27,16 +27,16 @@ class MathOptionsBase {
Name = static_cast<unsigned>(Value); \
return *this; \
}
-#include "flang/Common/MathOptionsBase.def"
+#include "flang/Support/MathOptionsBase.def"
MathOptionsBase() {
#define ENUM_MATHOPT(Name, Type, Bits, Default) set##Name(Default);
-#include "flang/Common/MathOptionsBase.def"
+#include "flang/Support/MathOptionsBase.def"
}
private:
#define ENUM_MATHOPT(Name, Type, Bits, Default) unsigned Name : Bits;
-#include "flang/Common/MathOptionsBase.def"
+#include "flang/Support/MathOptionsBase.def"
};
} // namespace Fortran::common
diff --git a/flang/include/flang/Common/OpenMP-features.h b/flang/include/flang/Support/OpenMP-features.h
similarity index 94%
rename from flang/include/flang/Common/OpenMP-features.h
rename to flang/include/flang/Support/OpenMP-features.h
index 480c8b4c1013fe..fb73d4191d1c1a 100644
--- a/flang/include/flang/Common/OpenMP-features.h
+++ b/flang/include/flang/Support/OpenMP-features.h
@@ -1,4 +1,4 @@
-//===-- include/flang/Common/OpenMP-features.h -----------------*- C++ -*-====//
+//===-- include/flang/Support/OpenMP-features.h -----------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/include/flang/Common/Version.h b/flang/include/flang/Support/Version.h
similarity index 95%
rename from flang/include/flang/Common/Version.h
rename to flang/include/flang/Support/Version.h
index 3257d4a4f64593..643ddd2e27f69a 100644
--- a/flang/include/flang/Common/Version.h
+++ b/flang/include/flang/Support/Version.h
@@ -1,4 +1,4 @@
-//===- Version.h - Flang Version Number ---------------------*- Fortran -*-===//
+//===-- include/flang/Support/Version.h -------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/include/flang/Common/default-kinds.h b/flang/include/flang/Support/default-kinds.h
similarity index 96%
rename from flang/include/flang/Common/default-kinds.h
rename to flang/include/flang/Support/default-kinds.h
index 6c66b98e98a05b..e78a08dfae6cc3 100644
--- a/flang/include/flang/Common/default-kinds.h
+++ b/flang/include/flang/Support/default-kinds.h
@@ -1,4 +1,4 @@
-//===-- include/flang/Common/default-kinds.h --------------------*- C++ -*-===//
+//===-- include/flang/Support/default-kinds.h -------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -9,7 +9,7 @@
#ifndef FORTRAN_COMMON_DEFAULT_KINDS_H_
#define FORTRAN_COMMON_DEFAULT_KINDS_H_
-#include "flang/Common/Fortran.h"
+#include "flang/Support/Fortran.h"
#include <cstdint>
namespace Fortran::common {
diff --git a/flang/include/flang/Common/indirection.h b/flang/include/flang/Support/indirection.h
similarity index 98%
rename from flang/include/flang/Common/indirection.h
rename to flang/include/flang/Support/indirection.h
index 7348eb0473f072..1221a659323503 100644
--- a/flang/include/flang/Common/indirection.h
+++ b/flang/include/flang/Support/indirection.h
@@ -1,4 +1,4 @@
-//===-- include/flang/Common/indirection.h ----------------------*- C++ -*-===//
+//===-- include/flang/Support/indirection.h ---------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -20,7 +20,7 @@
// template class Fortran::common::Indirection<FORWARD_TYPE>;
// in one C++ source file later where a definition of the type is visible.
-#include "idioms.h"
+#include "flang/Common/idioms.h"
#include <memory>
#include <type_traits>
#include <utility>
diff --git a/flang/include/flang/Common/interval.h b/flang/include/flang/Support/interval.h
similarity index 97%
rename from flang/include/flang/Common/interval.h
rename to flang/include/flang/Support/interval.h
index c4cab0ccf1130b..2918cc54de3926 100644
--- a/flang/include/flang/Common/interval.h
+++ b/flang/include/flang/Support/interval.h
@@ -1,4 +1,4 @@
-//===-- include/flang/Common/interval.h -------------------------*- C++ -*-===//
+//===-- include/flang/Support/interval.h ------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -12,7 +12,7 @@
// Defines a generalized template class Interval<A> to represent
// the half-open interval [x .. x+n).
-#include "idioms.h"
+#include "flang/Common/idioms.h"
#include <algorithm>
#include <cstddef>
#include <utility>
diff --git a/flang/include/flang/Common/reference-counted.h b/flang/include/flang/Support/reference-counted.h
similarity index 96%
rename from flang/include/flang/Common/reference-counted.h
rename to flang/include/flang/Support/reference-counted.h
index de91d4fb6ee8b7..d7a065c59d5a0f 100644
--- a/flang/include/flang/Common/reference-counted.h
+++ b/flang/include/flang/Support/reference-counted.h
@@ -1,4 +1,4 @@
-//===-- include/flang/Common/reference-counted.h ----------------*- C++ -*-===//
+//===-- include/flang/Support/reference-counted.h ---------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/include/flang/Common/reference.h b/flang/include/flang/Support/reference.h
similarity index 97%
rename from flang/include/flang/Common/reference.h
rename to flang/include/flang/Support/reference.h
index 0c579de44bd7fa..cb367ae231376d 100644
--- a/flang/include/flang/Common/reference.h
+++ b/flang/include/flang/Support/reference.h
@@ -1,4 +1,4 @@
-//===-- include/flang/Common/reference.h ------------------------*- C++ -*-===//
+//===-- include/flang/Support/reference.h -----------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/include/flang/Common/static-multimap-view.h b/flang/include/flang/Support/static-multimap-view.h
similarity index 97%
rename from flang/include/flang/Common/static-multimap-view.h
rename to flang/include/flang/Support/static-multimap-view.h
index 27d2ba89c8009c..71da272a26de2f 100644
--- a/flang/include/flang/Common/static-multimap-view.h
+++ b/flang/include/flang/Support/static-multimap-view.h
@@ -1,4 +1,4 @@
-//===-- include/flang/Common/static-multimap-view.h -------------*- C++ -*-===//
+//===-- include/flang/Support/static-multimap-view.h ------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/include/flang/Common/template.h b/flang/include/flang/Support/template.h
similarity index 99%
rename from flang/include/flang/Common/template.h
rename to flang/include/flang/Support/template.h
index 51d09fb42ce368..e15de9c2d0cea8 100644
--- a/flang/include/flang/Common/template.h
+++ b/flang/include/flang/Support/template.h
@@ -1,4 +1,4 @@
-//===-- include/flang/Common/template.h -------------------------*- C++ -*-===//
+//===-- include/flang/Support/template.h ------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -9,7 +9,7 @@
#ifndef FORTRAN_COMMON_TEMPLATE_H_
#define FORTRAN_COMMON_TEMPLATE_H_
-#include "variant.h"
+#include "flang/Common/variant.h"
#include "flang/Common/idioms.h"
#include <functional>
#include <optional>
diff --git a/flang/include/flang/Common/unwrap.h b/flang/include/flang/Support/unwrap.h
similarity index 97%
rename from flang/include/flang/Common/unwrap.h
rename to flang/include/flang/Support/unwrap.h
index 84582174e4b300..d8fa553dedda3f 100644
--- a/flang/include/flang/Common/unwrap.h
+++ b/flang/include/flang/Support/unwrap.h
@@ -1,4 +1,4 @@
-//===-- include/flang/Common/unwrap.h ---------------------------*- C++ -*-===//
+//===-- include/flang/Support/unwrap.h --------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -12,8 +12,8 @@
#include "indirection.h"
#include "reference-counted.h"
#include "reference.h"
-#include "variant.h"
-#include "visit.h"
+#include "flang/Common/variant.h"
+#include "flang/Common/visit.h"
#include <memory>
#include <optional>
#include <type_traits>
diff --git a/flang/include/flang/Tools/CrossToolHelpers.h b/flang/include/flang/Tools/CrossToolHelpers.h
index 75fd783af237d0..bc105f471aa003 100644
--- a/flang/include/flang/Tools/CrossToolHelpers.h
+++ b/flang/include/flang/Tools/CrossToolHelpers.h
@@ -13,7 +13,7 @@
#ifndef FORTRAN_TOOLS_CROSS_TOOL_HELPERS_H
#define FORTRAN_TOOLS_CROSS_TOOL_HELPERS_H
-#include "flang/Common/MathOptionsBase.h"
+#include "flang/Support/MathOptionsBase.h"
#include "flang/Frontend/CodeGenOptions.h"
#include "flang/Frontend/LangOptions.h"
#include <cstdint>
diff --git a/flang/lib/CMakeLists.txt b/flang/lib/CMakeLists.txt
index f41d4df1f07e3c..d29da136ea3eda 100644
--- a/flang/lib/CMakeLists.txt
+++ b/flang/lib/CMakeLists.txt
@@ -1,6 +1,9 @@
+
+include_directories("${CMAKE_CURRENT_SOURCE_DIR}/../../FortranRuntime/include")
+
add_subdirectory(Common)
+add_subdirectory(Support)
add_subdirectory(Evaluate)
-add_subdirectory(Decimal)
add_subdirectory(Lower)
add_subdirectory(Parser)
add_subdirectory(Semantics)
diff --git a/flang/lib/Common/CMakeLists.txt b/flang/lib/Common/CMakeLists.txt
index c6f818ad27cd19..b62aeb2c08b779 100644
--- a/flang/lib/Common/CMakeLists.txt
+++ b/flang/lib/Common/CMakeLists.txt
@@ -1,48 +1,12 @@
-find_first_existing_vc_file("${LLVM_MAIN_SRC_DIR}" llvm_vc)
-find_first_existing_vc_file("${FLANG_SOURCE_DIR}" flang_vc)
-
-# The VC revision include that we want to generate.
-set(version_inc "${CMAKE_CURRENT_BINARY_DIR}/VCSVersion.inc")
-
-set(generate_vcs_version_script "${LLVM_CMAKE_DIR}/GenerateVersionFromVCS.cmake")
-
-if(llvm_vc AND LLVM_APPEND_VC_REV)
- set(llvm_source_dir ${LLVM_MAIN_SRC_DIR})
-endif()
-if(flang_vc AND LLVM_APPEND_VC_REV)
- set(flang_source_dir ${FLANG_SOURCE_DIR})
-endif()
-
-# Create custom target to generate the VC revision include.
-add_custom_command(OUTPUT "${version_inc}"
- DEPENDS "${llvm_vc}" "${flang_vc}" "${generate_vcs_version_script}"
- COMMAND ${CMAKE_COMMAND} "-DNAMES=\"LLVM;FLANG\""
- "-DLLVM_SOURCE_DIR=${llvm_source_dir}"
- "-DFLANG_SOURCE_DIR=${flang_source_dir}"
- "-DHEADER_FILE=${version_inc}"
- "-DLLVM_FORCE_VC_REVISION=${LLVM_FORCE_VC_REVISION}"
- "-DLLVM_FORCE_VC_REPOSITORY=${LLVM_FORCE_VC_REPOSITORY}"
- -P "${generate_vcs_version_script}")
-
-# Mark the generated header as being generated.
-set_source_files_properties("${version_inc}"
- PROPERTIES GENERATED TRUE
- HEADER_FILE_ONLY TRUE)
-
-if(FLANG_VENDOR)
- set_source_files_properties(Version.cpp
- PROPERTIES COMPILE_DEFINITIONS "FLANG_VENDOR=\"${FLANG_VENDOR} \"")
-endif()
-
-
-add_flang_library(FortranCommon
- Fortran.cpp
- Fortran-features.cpp
- default-kinds.cpp
- idioms.cpp
- Version.cpp
- ${version_inc}
-
- LINK_COMPONENTS
- Support
-)
+#===-- FortranRuntime/lib/Common/CMakeLists.txt ---------------------------===#
+#
+# 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
+#
+#===------------------------------------------------------------------------===#
+
+add_flang_library(FortranCommon
+ "${CMAKE_CURRENT_SOURCE_DIR}/../../../FortranRuntime/lib/Common/binary-to-decimal.cpp"
+ "${CMAKE_CURRENT_SOURCE_DIR}/../../../FortranRuntime/lib/Common/decimal-to-binary.cpp"
+)
diff --git a/flang/lib/Decimal/CMakeLists.txt b/flang/lib/Decimal/CMakeLists.txt
deleted file mode 100644
index 880b190f1c5815..00000000000000
--- a/flang/lib/Decimal/CMakeLists.txt
+++ /dev/null
@@ -1,86 +0,0 @@
-if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
- cmake_minimum_required(VERSION 3.20.0)
-
- project(FortranDecimal C CXX)
-
- set(CMAKE_CXX_STANDARD 17)
- set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
- set(CMAKE_CXX_EXTENSIONS OFF)
-
- set(FLANG_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../..")
-
- set(LLVM_COMMON_CMAKE_UTILS "${FLANG_SOURCE_DIR}/../cmake")
- set(LLVM_CMAKE_UTILS "${FLANG_SOURCE_DIR}/../llvm/cmake")
- set(CLANG_CMAKE_UTILS "${FLANG_SOURCE_DIR}/../clang/cmake")
-
- # Add path for custom modules
- list(INSERT CMAKE_MODULE_PATH 0
- "${FLANG_SOURCE_DIR}/cmake"
- "${FLANG_SOURCE_DIR}/cmake/modules"
- "${LLVM_COMMON_CMAKE_UTILS}"
- "${LLVM_COMMON_CMAKE_UTILS}/Modules"
- "${LLVM_CMAKE_UTILS}"
- "${LLVM_CMAKE_UTILS}/modules"
- "${CLANG_CMAKE_UTILS}/modules"
- )
-
- include(AddClang)
- include(AddLLVM)
- include(AddFlang)
- include(HandleLLVMOptions)
-
- include(TestBigEndian)
- test_big_endian(IS_BIGENDIAN)
- if (IS_BIGENDIAN)
- add_compile_definitions(FLANG_BIG_ENDIAN=1)
- else ()
- add_compile_definitions(FLANG_LITTLE_ENDIAN=1)
- endif ()
- include_directories(BEFORE
- ${FLANG_SOURCE_DIR}/include)
-endif()
-
-check_cxx_compiler_flag(-fno-lto FLANG_RUNTIME_HAS_FNO_LTO_FLAG)
-if (FLANG_RUNTIME_HAS_FNO_LTO_FLAG)
- append("-fno-lto" CMAKE_CXX_FLAGS)
-endif()
-
-# Disable libstdc++ assertions, even in an LLVM_ENABLE_ASSERTIONS build, to
-# avoid an unwanted dependency on libstdc++.so.
-add_definitions(-U_GLIBCXX_ASSERTIONS)
-
-set(sources
- binary-to-decimal.cpp
- decimal-to-binary.cpp
-)
-
-include(AddFlangOffloadRuntime)
-enable_cuda_compilation(FortranDecimal "${sources}")
-enable_omp_offload_compilation("${sources}")
-
-add_flang_library(FortranDecimal INSTALL_WITH_TOOLCHAIN ${sources})
-
-if (DEFINED MSVC)
- set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreaded)
- add_flang_library(FortranDecimal.static INSTALL_WITH_TOOLCHAIN
- binary-to-decimal.cpp
- decimal-to-binary.cpp
- )
- set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreadedDLL)
- add_flang_library(FortranDecimal.dynamic INSTALL_WITH_TOOLCHAIN
- binary-to-decimal.cpp
- decimal-to-binary.cpp
- )
- set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreadedDebug)
- add_flang_library(FortranDecimal.static_dbg INSTALL_WITH_TOOLCHAIN
- binary-to-decimal.cpp
- decimal-to-binary.cpp
- )
- set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreadedDebugDLL)
- add_flang_library(FortranDecimal.dynamic_dbg INSTALL_WITH_TOOLCHAIN
- binary-to-decimal.cpp
- decimal-to-binary.cpp
- )
- add_dependencies(FortranDecimal FortranDecimal.static FortranDecimal.dynamic
- FortranDecimal.static_dbg FortranDecimal.dynamic_dbg)
-endif()
diff --git a/flang/lib/Evaluate/CMakeLists.txt b/flang/lib/Evaluate/CMakeLists.txt
index b38f450d746ea7..5f2e345b7bfb56 100644
--- a/flang/lib/Evaluate/CMakeLists.txt
+++ b/flang/lib/Evaluate/CMakeLists.txt
@@ -60,9 +60,8 @@ add_flang_library(FortranEvaluate
variable.cpp
LINK_LIBS
- FortranCommon
- FortranDecimal
FortranParser
+ FortranSupport
${LIBPGMATH}
${QUADMATHLIB}
diff --git a/flang/lib/Evaluate/call.cpp b/flang/lib/Evaluate/call.cpp
index c5b50e806d2497..1cb8eb89f41687 100644
--- a/flang/lib/Evaluate/call.cpp
+++ b/flang/lib/Evaluate/call.cpp
@@ -7,7 +7,7 @@
//===----------------------------------------------------------------------===//
#include "flang/Evaluate/call.h"
-#include "flang/Common/Fortran.h"
+#include "flang/Support/Fortran.h"
#include "flang/Common/idioms.h"
#include "flang/Evaluate/characteristics.h"
#include "flang/Evaluate/check-expression.h"
diff --git a/flang/lib/Evaluate/characteristics.cpp b/flang/lib/Evaluate/characteristics.cpp
index 70e24d6e82eb8e..091f2e2b553e86 100644
--- a/flang/lib/Evaluate/characteristics.cpp
+++ b/flang/lib/Evaluate/characteristics.cpp
@@ -7,7 +7,7 @@
//===----------------------------------------------------------------------===//
#include "flang/Evaluate/characteristics.h"
-#include "flang/Common/indirection.h"
+#include "flang/Support/indirection.h"
#include "flang/Evaluate/check-expression.h"
#include "flang/Evaluate/fold.h"
#include "flang/Evaluate/intrinsics.h"
diff --git a/flang/lib/Evaluate/common.cpp b/flang/lib/Evaluate/common.cpp
index c633bff57b1ecd..7741bec650575d 100644
--- a/flang/lib/Evaluate/common.cpp
+++ b/flang/lib/Evaluate/common.cpp
@@ -9,10 +9,14 @@
#include "flang/Evaluate/common.h"
#include "flang/Common/idioms.h"
+
using namespace Fortran::parser::literals;
+
+
namespace Fortran::evaluate {
+
void RealFlagWarnings(
FoldingContext &context, const RealFlags &flags, const char *operation) {
if (context.languageFeatures().ShouldWarn(
diff --git a/flang/lib/Evaluate/fold-implementation.h b/flang/lib/Evaluate/fold-implementation.h
index 1b14a305b87f4f..c8452cdd6a0caa 100644
--- a/flang/lib/Evaluate/fold-implementation.h
+++ b/flang/lib/Evaluate/fold-implementation.h
@@ -12,9 +12,9 @@
#include "character.h"
#include "host.h"
#include "int-power.h"
-#include "flang/Common/indirection.h"
-#include "flang/Common/template.h"
-#include "flang/Common/unwrap.h"
+#include "flang/Support/indirection.h"
+#include "flang/Support/template.h"
+#include "flang/Support/unwrap.h"
#include "flang/Evaluate/characteristics.h"
#include "flang/Evaluate/common.h"
#include "flang/Evaluate/constant.h"
diff --git a/flang/lib/Evaluate/formatting.cpp b/flang/lib/Evaluate/formatting.cpp
index 0870d56549f74d..db5d005d97c8c9 100644
--- a/flang/lib/Evaluate/formatting.cpp
+++ b/flang/lib/Evaluate/formatting.cpp
@@ -7,7 +7,7 @@
//===----------------------------------------------------------------------===//
#include "flang/Evaluate/formatting.h"
-#include "flang/Common/Fortran.h"
+#include "flang/Support/Fortran.h"
#include "flang/Evaluate/call.h"
#include "flang/Evaluate/constant.h"
#include "flang/Evaluate/expression.h"
diff --git a/flang/lib/Evaluate/intrinsics-library.cpp b/flang/lib/Evaluate/intrinsics-library.cpp
index ed28d8130808fa..440ddaaf9689c8 100644
--- a/flang/lib/Evaluate/intrinsics-library.cpp
+++ b/flang/lib/Evaluate/intrinsics-library.cpp
@@ -14,7 +14,7 @@
#include "flang/Evaluate/intrinsics-library.h"
#include "fold-implementation.h"
#include "host.h"
-#include "flang/Common/static-multimap-view.h"
+#include "flang/Support/static-multimap-view.h"
#include "flang/Evaluate/expression.h"
#include <cfloat>
#include <cmath>
diff --git a/flang/lib/Evaluate/intrinsics.cpp b/flang/lib/Evaluate/intrinsics.cpp
index 166dae93178c51..343bd2c9f22be2 100644
--- a/flang/lib/Evaluate/intrinsics.cpp
+++ b/flang/lib/Evaluate/intrinsics.cpp
@@ -7,7 +7,7 @@
//===----------------------------------------------------------------------===//
#include "flang/Evaluate/intrinsics.h"
-#include "flang/Common/Fortran.h"
+#include "flang/Support/Fortran.h"
#include "flang/Common/enum-set.h"
#include "flang/Common/idioms.h"
#include "flang/Evaluate/check-expression.h"
diff --git a/flang/lib/Evaluate/real.cpp b/flang/lib/Evaluate/real.cpp
index 642490646dcaf3..9d465e5f35d6ae 100644
--- a/flang/lib/Evaluate/real.cpp
+++ b/flang/lib/Evaluate/real.cpp
@@ -9,7 +9,7 @@
#include "flang/Evaluate/real.h"
#include "int-power.h"
#include "flang/Common/idioms.h"
-#include "flang/Decimal/decimal.h"
+#include "flang/Common/decimal.h"
#include "flang/Parser/characters.h"
#include "llvm/Support/raw_ostream.h"
#include <limits>
diff --git a/flang/lib/Evaluate/shape.cpp b/flang/lib/Evaluate/shape.cpp
index c62d0cb0ff29dd..7b78d8c7b9734f 100644
--- a/flang/lib/Evaluate/shape.cpp
+++ b/flang/lib/Evaluate/shape.cpp
@@ -8,7 +8,7 @@
#include "flang/Evaluate/shape.h"
#include "flang/Common/idioms.h"
-#include "flang/Common/template.h"
+#include "flang/Support/template.h"
#include "flang/Evaluate/characteristics.h"
#include "flang/Evaluate/check-expression.h"
#include "flang/Evaluate/fold.h"
diff --git a/flang/lib/Evaluate/target.cpp b/flang/lib/Evaluate/target.cpp
index 1e2cf6b0d298d4..d0722c31e3c3f7 100644
--- a/flang/lib/Evaluate/target.cpp
+++ b/flang/lib/Evaluate/target.cpp
@@ -7,7 +7,7 @@
//===----------------------------------------------------------------------===//
#include "flang/Evaluate/target.h"
-#include "flang/Common/template.h"
+#include "flang/Support/template.h"
#include "flang/Evaluate/common.h"
#include "flang/Evaluate/type.h"
diff --git a/flang/lib/Frontend/CMakeLists.txt b/flang/lib/Frontend/CMakeLists.txt
index ecdcc73d61ec1f..9b20b6a92cca0f 100644
--- a/flang/lib/Frontend/CMakeLists.txt
+++ b/flang/lib/Frontend/CMakeLists.txt
@@ -28,7 +28,7 @@ add_flang_library(flangFrontend
FortranParser
FortranSemantics
FortranEvaluate
- FortranCommon
+ FortranSupport
FortranLower
FIRDialect
FIRDialectSupport
diff --git a/flang/lib/Frontend/CompilerInstance.cpp b/flang/lib/Frontend/CompilerInstance.cpp
index d37430e0e5773e..a0653576852101 100644
--- a/flang/lib/Frontend/CompilerInstance.cpp
+++ b/flang/lib/Frontend/CompilerInstance.cpp
@@ -11,7 +11,7 @@
//===----------------------------------------------------------------------===//
#include "flang/Frontend/CompilerInstance.h"
-#include "flang/Common/Fortran-features.h"
+#include "flang/Support/Fortran-features.h"
#include "flang/Frontend/CompilerInvocation.h"
#include "flang/Frontend/TextDiagnosticPrinter.h"
#include "flang/Parser/parsing.h"
diff --git a/flang/lib/Frontend/CompilerInvocation.cpp b/flang/lib/Frontend/CompilerInvocation.cpp
index 90c327546198b5..5fe6ccbc44a894 100644
--- a/flang/lib/Frontend/CompilerInvocation.cpp
+++ b/flang/lib/Frontend/CompilerInvocation.cpp
@@ -11,9 +11,9 @@
//===----------------------------------------------------------------------===//
#include "flang/Frontend/CompilerInvocation.h"
-#include "flang/Common/Fortran-features.h"
-#include "flang/Common/OpenMP-features.h"
-#include "flang/Common/Version.h"
+#include "flang/Support/Fortran-features.h"
+#include "flang/Support/OpenMP-features.h"
+#include "flang/Support/Version.h"
#include "flang/Frontend/CodeGenOptions.h"
#include "flang/Frontend/PreprocessorOptions.h"
#include "flang/Frontend/TargetOptions.h"
diff --git a/flang/lib/Frontend/FrontendActions.cpp b/flang/lib/Frontend/FrontendActions.cpp
index cda82bcb7ecc71..7d51c20514387a 100644
--- a/flang/lib/Frontend/FrontendActions.cpp
+++ b/flang/lib/Frontend/FrontendActions.cpp
@@ -11,7 +11,7 @@
//===----------------------------------------------------------------------===//
#include "flang/Frontend/FrontendActions.h"
-#include "flang/Common/default-kinds.h"
+#include "flang/Support/default-kinds.h"
#include "flang/Frontend/CompilerInstance.h"
#include "flang/Frontend/CompilerInvocation.h"
#include "flang/Frontend/FrontendOptions.h"
diff --git a/flang/lib/Lower/Bridge.cpp b/flang/lib/Lower/Bridge.cpp
index 79e5a04463e00b..6924717cb467ac 100644
--- a/flang/lib/Lower/Bridge.cpp
+++ b/flang/lib/Lower/Bridge.cpp
@@ -12,7 +12,7 @@
#include "flang/Lower/Bridge.h"
#include "DirectivesCommon.h"
-#include "flang/Common/Version.h"
+#include "flang/Support/Version.h"
#include "flang/Lower/Allocatable.h"
#include "flang/Lower/CallInterface.h"
#include "flang/Lower/Coarray.h"
diff --git a/flang/lib/Lower/CMakeLists.txt b/flang/lib/Lower/CMakeLists.txt
index ba6622d8504a4f..cb37857ab1de0b 100644
--- a/flang/lib/Lower/CMakeLists.txt
+++ b/flang/lib/Lower/CMakeLists.txt
@@ -56,7 +56,7 @@ add_flang_library(FortranLower
HLFIRDialect
${dialect_libs}
${extension_libs}
- FortranCommon
+ FortranSupport
FortranParser
FortranEvaluate
FortranSemantics
diff --git a/flang/lib/Lower/CallInterface.cpp b/flang/lib/Lower/CallInterface.cpp
index c0ef96adc20c3e..153845699dae3d 100644
--- a/flang/lib/Lower/CallInterface.cpp
+++ b/flang/lib/Lower/CallInterface.cpp
@@ -7,7 +7,7 @@
//===----------------------------------------------------------------------===//
#include "flang/Lower/CallInterface.h"
-#include "flang/Common/Fortran.h"
+#include "flang/Support/Fortran.h"
#include "flang/Evaluate/fold.h"
#include "flang/Lower/Bridge.h"
#include "flang/Lower/Mangler.h"
diff --git a/flang/lib/Lower/ConvertExpr.cpp b/flang/lib/Lower/ConvertExpr.cpp
index 62a7615e1af13c..4d2ac95ea784b5 100644
--- a/flang/lib/Lower/ConvertExpr.cpp
+++ b/flang/lib/Lower/ConvertExpr.cpp
@@ -11,8 +11,8 @@
//===----------------------------------------------------------------------===//
#include "flang/Lower/ConvertExpr.h"
-#include "flang/Common/default-kinds.h"
-#include "flang/Common/unwrap.h"
+#include "flang/Support/default-kinds.h"
+#include "flang/Support/unwrap.h"
#include "flang/Evaluate/fold.h"
#include "flang/Evaluate/real.h"
#include "flang/Evaluate/traverse.h"
diff --git a/flang/lib/Lower/Mangler.cpp b/flang/lib/Lower/Mangler.cpp
index a66dae8851a866..565f9c6cbc5892 100644
--- a/flang/lib/Lower/Mangler.cpp
+++ b/flang/lib/Lower/Mangler.cpp
@@ -7,7 +7,7 @@
//===----------------------------------------------------------------------===//
#include "flang/Lower/Mangler.h"
-#include "flang/Common/reference.h"
+#include "flang/Support/reference.h"
#include "flang/Lower/Support/Utils.h"
#include "flang/Optimizer/Builder/Todo.h"
#include "flang/Optimizer/Dialect/FIRType.h"
diff --git a/flang/lib/Optimizer/Builder/IntrinsicCall.cpp b/flang/lib/Optimizer/Builder/IntrinsicCall.cpp
index dc0dc47bda9a9d..5f1a25b1af23e9 100644
--- a/flang/lib/Optimizer/Builder/IntrinsicCall.cpp
+++ b/flang/lib/Optimizer/Builder/IntrinsicCall.cpp
@@ -14,7 +14,7 @@
//===----------------------------------------------------------------------===//
#include "flang/Optimizer/Builder/IntrinsicCall.h"
-#include "flang/Common/static-multimap-view.h"
+#include "flang/Support/static-multimap-view.h"
#include "flang/Optimizer/Builder/BoxValue.h"
#include "flang/Optimizer/Builder/Character.h"
#include "flang/Optimizer/Builder/Complex.h"
@@ -68,6 +68,11 @@
/// a call is generated for it. LLVM intrinsics are handled as a math
/// runtime library here.
+static llvm::cl::opt<bool> ignoreModuleOnlyBuiltins(
+ "ignore-module-only-builtins",
+ llvm::cl::desc("ignore failures from __builtin_numeric_storage_size when compiling FortranRuntime"),
+ llvm::cl::init(false), llvm::cl::Hidden);
+
namespace fir {
fir::ExtendedValue getAbsentIntrinsicArgument() { return fir::UnboxedValue{}; }
@@ -502,6 +507,7 @@ static constexpr IntrinsicHandler handlers[]{
/*isElemental=*/false},
{"not", &I::genNot},
{"null", &I::genNull, {{{"mold", asInquired}}}, /*isElemental=*/false},
+ {"numeric_storage_size", &I::genNumericStorageSize},
{"pack",
&I::genPack,
{{{"array", asBox},
@@ -7218,6 +7224,19 @@ IntrinsicLibrary::genVerify(mlir::Type resultType,
return readAndAddCleanUp(resultMutableBox, resultType, "VERIFY");
}
+
+ fir::ExtendedValue IntrinsicLibrary:: genNumericStorageSize(mlir::Type resultType, llvm::ArrayRef<fir::ExtendedValue> args) {
+ assert(args.empty() );
+
+ if (!ignoreModuleOnlyBuiltins) {
+ fir::emitFatalError(loc, "__builtin_numeric_storage_size is for internal use only. Use NUMERIC_STORAGE_SIZE from ISO_FORTRAN_ENV module instead.");
+ return {};
+ }
+
+ return builder.createIntegerConstant(loc, resultType , 32 );
+ }
+
+
/// Process calls to Minloc, Maxloc intrinsic functions
template <typename FN, typename FD>
fir::ExtendedValue
diff --git a/flang/lib/Optimizer/CodeGen/TypeConverter.cpp b/flang/lib/Optimizer/CodeGen/TypeConverter.cpp
index 1043494b6fb48a..c632e42ef72c29 100644
--- a/flang/lib/Optimizer/CodeGen/TypeConverter.cpp
+++ b/flang/lib/Optimizer/CodeGen/TypeConverter.cpp
@@ -13,7 +13,7 @@
#define DEBUG_TYPE "flang-type-conversion"
#include "flang/Optimizer/CodeGen/TypeConverter.h"
-#include "flang/Common/Fortran.h"
+#include "flang/Support/Fortran.h"
#include "flang/Optimizer/Builder/Todo.h" // remove when TODO's are done
#include "flang/Optimizer/CodeGen/DescriptorModel.h"
#include "flang/Optimizer/CodeGen/TBAABuilder.h"
diff --git a/flang/lib/Optimizer/Dialect/FIRType.cpp b/flang/lib/Optimizer/Dialect/FIRType.cpp
index c1debf28d00332..08d75c46faee4b 100644
--- a/flang/lib/Optimizer/Dialect/FIRType.cpp
+++ b/flang/lib/Optimizer/Dialect/FIRType.cpp
@@ -11,7 +11,7 @@
//===----------------------------------------------------------------------===//
#include "flang/Optimizer/Dialect/FIRType.h"
-#include "flang/ISO_Fortran_binding_wrapper.h"
+#include "flang/Common/ISO_Fortran_binding_wrapper.h"
#include "flang/Optimizer/Builder/Todo.h"
#include "flang/Optimizer/Dialect/FIRDialect.h"
#include "flang/Optimizer/Dialect/Support/KindMapping.h"
diff --git a/flang/lib/Optimizer/Transforms/AddDebugInfo.cpp b/flang/lib/Optimizer/Transforms/AddDebugInfo.cpp
index 46e70d7ef9180a..f41633629bb3e2 100644
--- a/flang/lib/Optimizer/Transforms/AddDebugInfo.cpp
+++ b/flang/lib/Optimizer/Transforms/AddDebugInfo.cpp
@@ -12,7 +12,7 @@
//===----------------------------------------------------------------------===//
#include "DebugTypeGenerator.h"
-#include "flang/Common/Version.h"
+#include "flang/Support/Version.h"
#include "flang/Optimizer/Builder/FIRBuilder.h"
#include "flang/Optimizer/Builder/Todo.h"
#include "flang/Optimizer/CodeGen/CGOps.h"
diff --git a/flang/lib/Optimizer/Transforms/AssumedRankOpConversion.cpp b/flang/lib/Optimizer/Transforms/AssumedRankOpConversion.cpp
index 2c9c73e8a5394d..ca6eacfd0e7200 100644
--- a/flang/lib/Optimizer/Transforms/AssumedRankOpConversion.cpp
+++ b/flang/lib/Optimizer/Transforms/AssumedRankOpConversion.cpp
@@ -6,7 +6,7 @@
//
//===----------------------------------------------------------------------===//
-#include "flang/Common/Fortran.h"
+#include "flang/Support/Fortran.h"
#include "flang/Lower/BuiltinModules.h"
#include "flang/Optimizer/Builder/FIRBuilder.h"
#include "flang/Optimizer/Builder/Runtime/Support.h"
diff --git a/flang/lib/Optimizer/Transforms/CMakeLists.txt b/flang/lib/Optimizer/Transforms/CMakeLists.txt
index b32f2ef86fca44..35794300dbc6aa 100644
--- a/flang/lib/Optimizer/Transforms/CMakeLists.txt
+++ b/flang/lib/Optimizer/Transforms/CMakeLists.txt
@@ -44,6 +44,7 @@ add_flang_library(FIRTransforms
FIRDialectSupport
FIRSupport
FortranCommon
+ FortranSupport
HLFIRDialect
MLIRAffineUtils
MLIRFuncDialect
diff --git a/flang/lib/Optimizer/Transforms/CufOpConversion.cpp b/flang/lib/Optimizer/Transforms/CufOpConversion.cpp
index c22c74d3f78af7..d3c44a75e4cffb 100644
--- a/flang/lib/Optimizer/Transforms/CufOpConversion.cpp
+++ b/flang/lib/Optimizer/Transforms/CufOpConversion.cpp
@@ -6,7 +6,7 @@
//
//===----------------------------------------------------------------------===//
-#include "flang/Common/Fortran.h"
+#include "flang/Support/Fortran.h"
#include "flang/Optimizer/Builder/Runtime/RTBuilder.h"
#include "flang/Optimizer/CodeGen/TypeConverter.h"
#include "flang/Optimizer/Dialect/CUF/CUFOps.h"
diff --git a/flang/lib/Optimizer/Transforms/ExternalNameConversion.cpp b/flang/lib/Optimizer/Transforms/ExternalNameConversion.cpp
index 648628fd1c9af0..1915abe2f91e0e 100644
--- a/flang/lib/Optimizer/Transforms/ExternalNameConversion.cpp
+++ b/flang/lib/Optimizer/Transforms/ExternalNameConversion.cpp
@@ -6,7 +6,7 @@
//
//===----------------------------------------------------------------------===//
-#include "flang/Common/Fortran.h"
+#include "flang/Support/Fortran.h"
#include "flang/Optimizer/Dialect/FIRDialect.h"
#include "flang/Optimizer/Dialect/FIROps.h"
#include "flang/Optimizer/Dialect/FIROpsSupport.h"
diff --git a/flang/lib/Optimizer/Transforms/LoopVersioning.cpp b/flang/lib/Optimizer/Transforms/LoopVersioning.cpp
index 51dc48f0fcb129..f6bd2aeb17bc20 100644
--- a/flang/lib/Optimizer/Transforms/LoopVersioning.cpp
+++ b/flang/lib/Optimizer/Transforms/LoopVersioning.cpp
@@ -40,7 +40,7 @@
/// could be part of the cost analysis above.
//===----------------------------------------------------------------------===//
-#include "flang/ISO_Fortran_binding_wrapper.h"
+#include "flang/Common/ISO_Fortran_binding_wrapper.h"
#include "flang/Optimizer/Builder/BoxValue.h"
#include "flang/Optimizer/Builder/FIRBuilder.h"
#include "flang/Optimizer/Builder/Runtime/Inquiry.h"
diff --git a/flang/lib/Optimizer/Transforms/SimplifyIntrinsics.cpp b/flang/lib/Optimizer/Transforms/SimplifyIntrinsics.cpp
index c61179a7460e32..c56dfa1cdfb524 100644
--- a/flang/lib/Optimizer/Transforms/SimplifyIntrinsics.cpp
+++ b/flang/lib/Optimizer/Transforms/SimplifyIntrinsics.cpp
@@ -22,7 +22,7 @@
/// and small in size.
//===----------------------------------------------------------------------===//
-#include "flang/Common/Fortran.h"
+#include "flang/Support/Fortran.h"
#include "flang/Optimizer/Builder/BoxValue.h"
#include "flang/Optimizer/Builder/FIRBuilder.h"
#include "flang/Optimizer/Builder/LowLevelIntrinsics.h"
diff --git a/flang/lib/Optimizer/Transforms/StackReclaim.cpp b/flang/lib/Optimizer/Transforms/StackReclaim.cpp
index 8a60a9e64f704b..629ba587adf3ca 100644
--- a/flang/lib/Optimizer/Transforms/StackReclaim.cpp
+++ b/flang/lib/Optimizer/Transforms/StackReclaim.cpp
@@ -6,7 +6,7 @@
//
//===----------------------------------------------------------------------===//
-#include "flang/Common/Fortran.h"
+#include "flang/Support/Fortran.h"
#include "flang/Optimizer/Dialect/FIRDialect.h"
#include "flang/Optimizer/Dialect/FIROps.h"
#include "flang/Optimizer/Transforms/Passes.h"
diff --git a/flang/lib/Optimizer/Transforms/VScaleAttr.cpp b/flang/lib/Optimizer/Transforms/VScaleAttr.cpp
index d311167c58b4d6..54a2456e77366c 100644
--- a/flang/lib/Optimizer/Transforms/VScaleAttr.cpp
+++ b/flang/lib/Optimizer/Transforms/VScaleAttr.cpp
@@ -14,7 +14,7 @@
/// likely harmless to run it on something else, but it is also not valuable].
//===----------------------------------------------------------------------===//
-#include "flang/ISO_Fortran_binding_wrapper.h"
+#include "flang/Common/ISO_Fortran_binding_wrapper.h"
#include "flang/Optimizer/Builder/BoxValue.h"
#include "flang/Optimizer/Builder/FIRBuilder.h"
#include "flang/Optimizer/Builder/Runtime/Inquiry.h"
diff --git a/flang/lib/Parser/CMakeLists.txt b/flang/lib/Parser/CMakeLists.txt
index 600a2f67df4431..b2cd3cbbe35ffc 100644
--- a/flang/lib/Parser/CMakeLists.txt
+++ b/flang/lib/Parser/CMakeLists.txt
@@ -25,7 +25,7 @@ add_flang_library(FortranParser
user-state.cpp
LINK_LIBS
- FortranCommon
+ FortranSupport
LINK_COMPONENTS
Support
diff --git a/flang/lib/Parser/basic-parsers.h b/flang/lib/Parser/basic-parsers.h
index 515b5993d67376..6575c7d01de346 100644
--- a/flang/lib/Parser/basic-parsers.h
+++ b/flang/lib/Parser/basic-parsers.h
@@ -22,9 +22,9 @@
// This header defines the fundamental parser class templates and helper
// template functions. See parser-combinators.txt for documentation.
-#include "flang/Common/Fortran-features.h"
+#include "flang/Support/Fortran-features.h"
#include "flang/Common/idioms.h"
-#include "flang/Common/indirection.h"
+#include "flang/Support/indirection.h"
#include "flang/Parser/char-block.h"
#include "flang/Parser/message.h"
#include "flang/Parser/parse-state.h"
diff --git a/flang/lib/Parser/parse-tree.cpp b/flang/lib/Parser/parse-tree.cpp
index 7f0899aaa14294..3b90a57c602945 100644
--- a/flang/lib/Parser/parse-tree.cpp
+++ b/flang/lib/Parser/parse-tree.cpp
@@ -8,7 +8,7 @@
#include "flang/Parser/parse-tree.h"
#include "flang/Common/idioms.h"
-#include "flang/Common/indirection.h"
+#include "flang/Support/indirection.h"
#include "flang/Parser/tools.h"
#include "flang/Parser/user-state.h"
#include "llvm/Support/raw_ostream.h"
diff --git a/flang/lib/Parser/prescan.h b/flang/lib/Parser/prescan.h
index 9d4f7c0c302a1a..0ea614d1df3bd9 100644
--- a/flang/lib/Parser/prescan.h
+++ b/flang/lib/Parser/prescan.h
@@ -16,7 +16,7 @@
// fixed form character literals on truncated card images, file
// inclusion, and driving the Fortran source preprocessor.
-#include "flang/Common/Fortran-features.h"
+#include "flang/Support/Fortran-features.h"
#include "flang/Parser/characters.h"
#include "flang/Parser/message.h"
#include "flang/Parser/provenance.h"
diff --git a/flang/lib/Parser/unparse.cpp b/flang/lib/Parser/unparse.cpp
index 2511a5dda9d095..7b0385c63cd8a1 100644
--- a/flang/lib/Parser/unparse.cpp
+++ b/flang/lib/Parser/unparse.cpp
@@ -10,9 +10,9 @@
// traversal templates in parse-tree-visitor.h.
#include "flang/Parser/unparse.h"
-#include "flang/Common/Fortran.h"
+#include "flang/Support/Fortran.h"
#include "flang/Common/idioms.h"
-#include "flang/Common/indirection.h"
+#include "flang/Support/indirection.h"
#include "flang/Parser/characters.h"
#include "flang/Parser/parse-tree-visitor.h"
#include "flang/Parser/parse-tree.h"
diff --git a/flang/lib/Semantics/CMakeLists.txt b/flang/lib/Semantics/CMakeLists.txt
index 41406ecf50e004..4203648a50ef71 100644
--- a/flang/lib/Semantics/CMakeLists.txt
+++ b/flang/lib/Semantics/CMakeLists.txt
@@ -52,7 +52,7 @@ add_flang_library(FortranSemantics
omp_gen
LINK_LIBS
- FortranCommon
+ FortranSupport
FortranParser
FortranEvaluate
diff --git a/flang/lib/Semantics/assignment.h b/flang/lib/Semantics/assignment.h
index 95d7b3cf91b17a..275625d3ed6522 100644
--- a/flang/lib/Semantics/assignment.h
+++ b/flang/lib/Semantics/assignment.h
@@ -9,7 +9,7 @@
#ifndef FORTRAN_SEMANTICS_ASSIGNMENT_H_
#define FORTRAN_SEMANTICS_ASSIGNMENT_H_
-#include "flang/Common/indirection.h"
+#include "flang/Support/indirection.h"
#include "flang/Evaluate/expression.h"
#include "flang/Semantics/semantics.h"
diff --git a/flang/lib/Semantics/check-case.cpp b/flang/lib/Semantics/check-case.cpp
index d296460127e12c..0e38b24f1b319d 100644
--- a/flang/lib/Semantics/check-case.cpp
+++ b/flang/lib/Semantics/check-case.cpp
@@ -8,8 +8,8 @@
#include "check-case.h"
#include "flang/Common/idioms.h"
-#include "flang/Common/reference.h"
-#include "flang/Common/template.h"
+#include "flang/Support/reference.h"
+#include "flang/Support/template.h"
#include "flang/Evaluate/fold.h"
#include "flang/Evaluate/type.h"
#include "flang/Parser/parse-tree.h"
diff --git a/flang/lib/Semantics/check-coarray.cpp b/flang/lib/Semantics/check-coarray.cpp
index 6cf61a6b923db3..d34c70e60d966b 100644
--- a/flang/lib/Semantics/check-coarray.cpp
+++ b/flang/lib/Semantics/check-coarray.cpp
@@ -7,7 +7,7 @@
//===----------------------------------------------------------------------===//
#include "check-coarray.h"
-#include "flang/Common/indirection.h"
+#include "flang/Support/indirection.h"
#include "flang/Evaluate/expression.h"
#include "flang/Parser/message.h"
#include "flang/Parser/parse-tree.h"
diff --git a/flang/lib/Semantics/check-cuda.cpp b/flang/lib/Semantics/check-cuda.cpp
index d8bd435bf09f38..738a471f4d01f5 100644
--- a/flang/lib/Semantics/check-cuda.cpp
+++ b/flang/lib/Semantics/check-cuda.cpp
@@ -7,7 +7,7 @@
//===----------------------------------------------------------------------===//
#include "check-cuda.h"
-#include "flang/Common/template.h"
+#include "flang/Support/template.h"
#include "flang/Evaluate/fold.h"
#include "flang/Evaluate/tools.h"
#include "flang/Evaluate/traverse.h"
diff --git a/flang/lib/Semantics/check-data.h b/flang/lib/Semantics/check-data.h
index 479d32568fa66a..5cdf46a5ffb1c9 100644
--- a/flang/lib/Semantics/check-data.h
+++ b/flang/lib/Semantics/check-data.h
@@ -10,7 +10,7 @@
#define FORTRAN_SEMANTICS_CHECK_DATA_H_
#include "data-to-inits.h"
-#include "flang/Common/interval.h"
+#include "flang/Support/interval.h"
#include "flang/Evaluate/fold-designator.h"
#include "flang/Evaluate/initial-image.h"
#include "flang/Semantics/expression.h"
diff --git a/flang/lib/Semantics/check-do-forall.cpp b/flang/lib/Semantics/check-do-forall.cpp
index d798244ff1ef2d..42e1c07fc45c3e 100644
--- a/flang/lib/Semantics/check-do-forall.cpp
+++ b/flang/lib/Semantics/check-do-forall.cpp
@@ -8,7 +8,7 @@
#include "check-do-forall.h"
#include "definable.h"
-#include "flang/Common/template.h"
+#include "flang/Support/template.h"
#include "flang/Evaluate/call.h"
#include "flang/Evaluate/expression.h"
#include "flang/Evaluate/tools.h"
diff --git a/flang/lib/Semantics/check-return.cpp b/flang/lib/Semantics/check-return.cpp
index ec2600bac3c68e..6a03467a27a759 100644
--- a/flang/lib/Semantics/check-return.cpp
+++ b/flang/lib/Semantics/check-return.cpp
@@ -7,7 +7,7 @@
//===----------------------------------------------------------------------===//
#include "check-return.h"
-#include "flang/Common/Fortran-features.h"
+#include "flang/Support/Fortran-features.h"
#include "flang/Parser/message.h"
#include "flang/Parser/parse-tree.h"
#include "flang/Semantics/semantics.h"
diff --git a/flang/lib/Semantics/check-select-rank.cpp b/flang/lib/Semantics/check-select-rank.cpp
index 2e602d307013c1..722226465b6642 100644
--- a/flang/lib/Semantics/check-select-rank.cpp
+++ b/flang/lib/Semantics/check-select-rank.cpp
@@ -7,7 +7,7 @@
//===----------------------------------------------------------------------===//
#include "check-select-rank.h"
-#include "flang/Common/Fortran.h"
+#include "flang/Support/Fortran.h"
#include "flang/Common/idioms.h"
#include "flang/Parser/message.h"
#include "flang/Parser/tools.h"
diff --git a/flang/lib/Semantics/check-select-type.cpp b/flang/lib/Semantics/check-select-type.cpp
index 94d16a719277af..da41410bd24612 100644
--- a/flang/lib/Semantics/check-select-type.cpp
+++ b/flang/lib/Semantics/check-select-type.cpp
@@ -8,7 +8,7 @@
#include "check-select-type.h"
#include "flang/Common/idioms.h"
-#include "flang/Common/reference.h"
+#include "flang/Support/reference.h"
#include "flang/Evaluate/fold.h"
#include "flang/Evaluate/type.h"
#include "flang/Parser/parse-tree.h"
diff --git a/flang/lib/Semantics/check-stop.cpp b/flang/lib/Semantics/check-stop.cpp
index 43535b07f029e9..dab076424bd8e6 100644
--- a/flang/lib/Semantics/check-stop.cpp
+++ b/flang/lib/Semantics/check-stop.cpp
@@ -7,7 +7,7 @@
//===----------------------------------------------------------------------===//
#include "check-stop.h"
-#include "flang/Common/Fortran.h"
+#include "flang/Support/Fortran.h"
#include "flang/Evaluate/expression.h"
#include "flang/Parser/parse-tree.h"
#include "flang/Semantics/semantics.h"
diff --git a/flang/lib/Semantics/data-to-inits.h b/flang/lib/Semantics/data-to-inits.h
index d8cc4601de26fa..df4d552760eda6 100644
--- a/flang/lib/Semantics/data-to-inits.h
+++ b/flang/lib/Semantics/data-to-inits.h
@@ -9,8 +9,8 @@
#ifndef FORTRAN_SEMANTICS_DATA_TO_INITS_H_
#define FORTRAN_SEMANTICS_DATA_TO_INITS_H_
-#include "flang/Common/default-kinds.h"
-#include "flang/Common/interval.h"
+#include "flang/Support/default-kinds.h"
+#include "flang/Support/interval.h"
#include "flang/Evaluate/fold-designator.h"
#include "flang/Evaluate/initial-image.h"
#include <list>
diff --git a/flang/lib/Semantics/expression.cpp b/flang/lib/Semantics/expression.cpp
index 072ebe172f45a9..a4be06515e4c87 100644
--- a/flang/lib/Semantics/expression.cpp
+++ b/flang/lib/Semantics/expression.cpp
@@ -11,7 +11,7 @@
#include "pointer-assignment.h"
#include "resolve-names-utils.h"
#include "resolve-names.h"
-#include "flang/Common/Fortran.h"
+#include "flang/Support/Fortran.h"
#include "flang/Common/idioms.h"
#include "flang/Evaluate/common.h"
#include "flang/Evaluate/fold.h"
diff --git a/flang/lib/Semantics/pointer-assignment.cpp b/flang/lib/Semantics/pointer-assignment.cpp
index 4948fce77a2502..abd3c5f461cb7e 100644
--- a/flang/lib/Semantics/pointer-assignment.cpp
+++ b/flang/lib/Semantics/pointer-assignment.cpp
@@ -10,7 +10,7 @@
#include "definable.h"
#include "flang/Common/idioms.h"
#include "flang/Common/restorer.h"
-#include "flang/Common/template.h"
+#include "flang/Support/template.h"
#include "flang/Evaluate/characteristics.h"
#include "flang/Evaluate/expression.h"
#include "flang/Evaluate/fold.h"
diff --git a/flang/lib/Semantics/resolve-labels.cpp b/flang/lib/Semantics/resolve-labels.cpp
index e5e96ec6327e2b..84d2e51d438bfe 100644
--- a/flang/lib/Semantics/resolve-labels.cpp
+++ b/flang/lib/Semantics/resolve-labels.cpp
@@ -8,7 +8,7 @@
#include "resolve-labels.h"
#include "flang/Common/enum-set.h"
-#include "flang/Common/template.h"
+#include "flang/Support/template.h"
#include "flang/Parser/parse-tree-visitor.h"
#include "flang/Semantics/semantics.h"
#include <cstdarg>
diff --git a/flang/lib/Semantics/resolve-names-utils.cpp b/flang/lib/Semantics/resolve-names-utils.cpp
index 39392257938d66..bc5f458f403cf2 100644
--- a/flang/lib/Semantics/resolve-names-utils.cpp
+++ b/flang/lib/Semantics/resolve-names-utils.cpp
@@ -7,10 +7,10 @@
//===----------------------------------------------------------------------===//
#include "resolve-names-utils.h"
-#include "flang/Common/Fortran-features.h"
-#include "flang/Common/Fortran.h"
+#include "flang/Support/Fortran-features.h"
+#include "flang/Support/Fortran.h"
#include "flang/Common/idioms.h"
-#include "flang/Common/indirection.h"
+#include "flang/Support/indirection.h"
#include "flang/Evaluate/fold.h"
#include "flang/Evaluate/tools.h"
#include "flang/Evaluate/traverse.h"
diff --git a/flang/lib/Semantics/resolve-names.cpp b/flang/lib/Semantics/resolve-names.cpp
index d8f601212d8d01..920cefa084e05c 100644
--- a/flang/lib/Semantics/resolve-names.cpp
+++ b/flang/lib/Semantics/resolve-names.cpp
@@ -14,9 +14,9 @@
#include "resolve-directives.h"
#include "resolve-names-utils.h"
#include "rewrite-parse-tree.h"
-#include "flang/Common/Fortran.h"
-#include "flang/Common/default-kinds.h"
-#include "flang/Common/indirection.h"
+#include "flang/Support/Fortran.h"
+#include "flang/Support/default-kinds.h"
+#include "flang/Support/indirection.h"
#include "flang/Common/restorer.h"
#include "flang/Common/visit.h"
#include "flang/Evaluate/characteristics.h"
diff --git a/flang/lib/Semantics/rewrite-parse-tree.cpp b/flang/lib/Semantics/rewrite-parse-tree.cpp
index b4fb72ce213017..46641f5bd3c363 100644
--- a/flang/lib/Semantics/rewrite-parse-tree.cpp
+++ b/flang/lib/Semantics/rewrite-parse-tree.cpp
@@ -8,7 +8,7 @@
#include "rewrite-parse-tree.h"
#include "rewrite-directives.h"
-#include "flang/Common/indirection.h"
+#include "flang/Support/indirection.h"
#include "flang/Parser/parse-tree-visitor.h"
#include "flang/Parser/parse-tree.h"
#include "flang/Parser/tools.h"
diff --git a/flang/lib/Semantics/semantics.cpp b/flang/lib/Semantics/semantics.cpp
index 8592d1e5d6217e..c39c8ac5a7b111 100644
--- a/flang/lib/Semantics/semantics.cpp
+++ b/flang/lib/Semantics/semantics.cpp
@@ -37,7 +37,7 @@
#include "resolve-labels.h"
#include "resolve-names.h"
#include "rewrite-parse-tree.h"
-#include "flang/Common/default-kinds.h"
+#include "flang/Support/default-kinds.h"
#include "flang/Parser/parse-tree-visitor.h"
#include "flang/Parser/tools.h"
#include "flang/Semantics/expression.h"
diff --git a/flang/lib/Semantics/tools.cpp b/flang/lib/Semantics/tools.cpp
index 8d16ab71008766..2aa0476b8fa07a 100644
--- a/flang/lib/Semantics/tools.cpp
+++ b/flang/lib/Semantics/tools.cpp
@@ -7,8 +7,8 @@
//===----------------------------------------------------------------------===//
#include "flang/Parser/tools.h"
-#include "flang/Common/Fortran.h"
-#include "flang/Common/indirection.h"
+#include "flang/Support/Fortran.h"
+#include "flang/Support/indirection.h"
#include "flang/Parser/dump-parse-tree.h"
#include "flang/Parser/message.h"
#include "flang/Parser/parse-tree.h"
diff --git a/flang/lib/Support/CMakeLists.txt b/flang/lib/Support/CMakeLists.txt
new file mode 100644
index 00000000000000..674ed0f196c89e
--- /dev/null
+++ b/flang/lib/Support/CMakeLists.txt
@@ -0,0 +1,56 @@
+#===-- lib/Support/CMakeLists.txt ------------------------------------------===#
+#
+# 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
+#
+#===------------------------------------------------------------------------===#
+
+find_first_existing_vc_file("${LLVM_MAIN_SRC_DIR}" llvm_vc)
+find_first_existing_vc_file("${FLANG_SOURCE_DIR}" flang_vc)
+
+# The VC revision include that we want to generate.
+set(version_inc "${CMAKE_CURRENT_BINARY_DIR}/VCSVersion.inc")
+
+set(generate_vcs_version_script "${LLVM_CMAKE_DIR}/GenerateVersionFromVCS.cmake")
+
+if(llvm_vc AND LLVM_APPEND_VC_REV)
+ set(llvm_source_dir ${LLVM_MAIN_SRC_DIR})
+endif()
+if(flang_vc AND LLVM_APPEND_VC_REV)
+ set(flang_source_dir ${FLANG_SOURCE_DIR})
+endif()
+
+# Create custom target to generate the VC revision include.
+add_custom_command(OUTPUT "${version_inc}"
+ DEPENDS "${llvm_vc}" "${flang_vc}" "${generate_vcs_version_script}"
+ COMMAND ${CMAKE_COMMAND} "-DNAMES=\"LLVM;FLANG\""
+ "-DLLVM_SOURCE_DIR=${llvm_source_dir}"
+ "-DFLANG_SOURCE_DIR=${flang_source_dir}"
+ "-DHEADER_FILE=${version_inc}"
+ "-DLLVM_FORCE_VC_REVISION=${LLVM_FORCE_VC_REVISION}"
+ "-DLLVM_FORCE_VC_REPOSITORY=${LLVM_FORCE_VC_REPOSITORY}"
+ -P "${generate_vcs_version_script}")
+
+# Mark the generated header as being generated.
+set_source_files_properties("${version_inc}"
+ PROPERTIES GENERATED TRUE
+ HEADER_FILE_ONLY TRUE)
+
+if(FLANG_VENDOR)
+ set_source_files_properties(Version.cpp
+ PROPERTIES COMPILE_DEFINITIONS "FLANG_VENDOR=\"${FLANG_VENDOR} \"")
+endif()
+
+
+add_flang_library(FortranSupport
+ Fortran.cpp
+ Fortran-features.cpp
+ default-kinds.cpp
+ idioms.cpp
+ Version.cpp
+ ${version_inc}
+
+ LINK_COMPONENTS
+ Support
+)
diff --git a/flang/lib/Common/Fortran-features.cpp b/flang/lib/Support/Fortran-features.cpp
similarity index 91%
rename from flang/lib/Common/Fortran-features.cpp
rename to flang/lib/Support/Fortran-features.cpp
index 25a948818e6560..e49735218ab967 100644
--- a/flang/lib/Common/Fortran-features.cpp
+++ b/flang/lib/Support/Fortran-features.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Common/Fortran-features.cpp -----------------------------------===//
+//===-- lib/Support/Fortran-features.cpp ------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -6,8 +6,8 @@
//
//===----------------------------------------------------------------------===//
-#include "flang/Common/Fortran-features.h"
-#include "flang/Common/Fortran.h"
+#include "flang/Support/Fortran-features.h"
+#include "flang/Support/Fortran.h"
#include "flang/Common/idioms.h"
namespace Fortran::common {
diff --git a/flang/lib/Common/Fortran.cpp b/flang/lib/Support/Fortran.cpp
similarity index 96%
rename from flang/lib/Common/Fortran.cpp
rename to flang/lib/Support/Fortran.cpp
index c014b1263a67f0..21eafe385015b5 100644
--- a/flang/lib/Common/Fortran.cpp
+++ b/flang/lib/Support/Fortran.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Common/Fortran.cpp --------------------------------------------===//
+//===-- lib/Support/Fortran.cpp ---------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -6,8 +6,8 @@
//
//===----------------------------------------------------------------------===//
-#include "flang/Common/Fortran.h"
-#include "flang/Common/Fortran-features.h"
+#include "flang/Support/Fortran.h"
+#include "flang/Support/Fortran-features.h"
namespace Fortran::common {
diff --git a/flang/lib/Common/Version.cpp b/flang/lib/Support/Version.cpp
similarity index 95%
rename from flang/lib/Common/Version.cpp
rename to flang/lib/Support/Version.cpp
index d67255f353dfd7..8ee4908f28f621 100644
--- a/flang/lib/Common/Version.cpp
+++ b/flang/lib/Support/Version.cpp
@@ -1,4 +1,4 @@
-//===- Version.cpp - Flang Version Number -------------------*- Fortran -*-===//
+//===-- lib/Support/Version.cpp ---------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -10,7 +10,7 @@
//
//===----------------------------------------------------------------------===//
-#include "flang/Common/Version.h"
+#include "flang/Support/Version.h"
#include "llvm/Support/raw_ostream.h"
#include <cstdlib>
#include <cstring>
diff --git a/flang/lib/Support/big-radix-floating-point.h b/flang/lib/Support/big-radix-floating-point.h
new file mode 100644
index 00000000000000..4c3d8f8b30832a
--- /dev/null
+++ b/flang/lib/Support/big-radix-floating-point.h
@@ -0,0 +1,396 @@
+//===-- lib/Support/big-radix-floating-point.h ------------------*- C++ -*-===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef FORTRAN_DECIMAL_BIG_RADIX_FLOATING_POINT_H_
+#define FORTRAN_DECIMAL_BIG_RADIX_FLOATING_POINT_H_
+
+// This is a helper class for use in floating-point conversions between
+// binary and decimal representations. It holds a multiple-precision
+// integer value using digits of a radix that is a large even power of ten
+// (10,000,000,000,000,000 by default, 10**16). These digits are accompanied
+// by a signed exponent that denotes multiplication by a power of ten.
+// The effective radix point is to the right of the digits (i.e., they do
+// not represent a fraction).
+//
+// The operations supported by this class are limited to those required
+// for conversions between binary and decimal representations; it is not
+// a general-purpose facility.
+
+#include "flang/Common/bit-population-count.h"
+#include "flang/Common/leading-zero-bit-count.h"
+#include "flang/Common/uint128.h"
+#include "flang/Support/binary-floating-point.h"
+#include "flang/Common/decimal.h"
+#include <cinttypes>
+#include <limits>
+#include <type_traits>
+
+// Some environments, viz. glibc 2.17, allow the macro HUGE
+// to leak out of <math.h>.
+#undef HUGE
+
+namespace Fortran::decimal {
+
+static constexpr std::uint64_t TenToThe(int power) {
+ return power <= 0 ? 1 : 10 * TenToThe(power - 1);
+}
+
+// 10**(LOG10RADIX + 3) must be < 2**wordbits, and LOG10RADIX must be
+// even, so that pairs of decimal digits do not straddle Digits.
+// So LOG10RADIX must be 16 or 6.
+template <int PREC, int LOG10RADIX = 16> class BigRadixFloatingPointNumber {
+public:
+ using Real = BinaryFloatingPointNumber<PREC>;
+ static constexpr int log10Radix{LOG10RADIX};
+
+private:
+ static constexpr std::uint64_t uint64Radix{TenToThe(log10Radix)};
+ static constexpr int minDigitBits{
+ 64 - common::LeadingZeroBitCount(uint64Radix)};
+ using Digit = common::HostUnsignedIntType<minDigitBits>;
+ static constexpr Digit radix{uint64Radix};
+ static_assert(radix < std::numeric_limits<Digit>::max() / 1000,
+ "radix is somehow too big");
+ static_assert(radix > std::numeric_limits<Digit>::max() / 10000,
+ "radix is somehow too small");
+
+ // The base-2 logarithm of the least significant bit that can arise
+ // in a subnormal IEEE floating-point number.
+ static constexpr int minLog2AnyBit{
+ -Real::exponentBias - Real::binaryPrecision};
+
+ // The number of Digits needed to represent the smallest subnormal.
+ static constexpr int maxDigits{3 - minLog2AnyBit / log10Radix};
+
+public:
+ explicit RT_API_ATTRS BigRadixFloatingPointNumber(
+ enum FortranRounding rounding = RoundNearest)
+ : rounding_{rounding} {}
+
+ // Converts a binary floating point value.
+ explicit RT_API_ATTRS BigRadixFloatingPointNumber(
+ Real, enum FortranRounding = RoundNearest);
+
+ RT_API_ATTRS BigRadixFloatingPointNumber &SetToZero() {
+ isNegative_ = false;
+ digits_ = 0;
+ exponent_ = 0;
+ return *this;
+ }
+
+ RT_API_ATTRS bool IsInteger() const { return exponent_ >= 0; }
+
+ // Converts decimal floating-point to binary.
+ RT_API_ATTRS ConversionToBinaryResult<PREC> ConvertToBinary();
+
+ // Parses and converts to binary. Handles leading spaces,
+ // "NaN", & optionally-signed "Inf". Does not skip internal
+ // spaces.
+ // The argument is a reference to a pointer that is left
+ // pointing to the first character that wasn't parsed.
+ RT_API_ATTRS ConversionToBinaryResult<PREC> ConvertToBinary(
+ const char *&, const char *end = nullptr);
+
+ // Formats a decimal floating-point number to a user buffer.
+ // May emit "NaN" or "Inf", or an possibly-signed integer.
+ // No decimal point is written, but if it were, it would be
+ // after the last digit; the effective decimal exponent is
+ // returned as part of the result structure so that it can be
+ // formatted by the client.
+ RT_API_ATTRS ConversionToDecimalResult ConvertToDecimal(
+ char *, std::size_t, enum DecimalConversionFlags, int digits) const;
+
+ // Discard decimal digits not needed to distinguish this value
+ // from the decimal encodings of two others (viz., the nearest binary
+ // floating-point numbers immediately below and above this one).
+ // The last decimal digit may not be uniquely determined in all
+ // cases, and will be the mean value when that is so (e.g., if
+ // last decimal digit values 6-8 would all work, it'll be a 7).
+ // This minimization necessarily assumes that the value will be
+ // emitted and read back into the same (or less precise) format
+ // with default rounding to the nearest value.
+ RT_API_ATTRS void Minimize(
+ BigRadixFloatingPointNumber &&less, BigRadixFloatingPointNumber &&more);
+
+ template <typename STREAM> STREAM &Dump(STREAM &) const;
+
+private:
+ RT_API_ATTRS BigRadixFloatingPointNumber(
+ const BigRadixFloatingPointNumber &that)
+ : digits_{that.digits_}, exponent_{that.exponent_},
+ isNegative_{that.isNegative_}, rounding_{that.rounding_} {
+ for (int j{0}; j < digits_; ++j) {
+ digit_[j] = that.digit_[j];
+ }
+ }
+
+ RT_API_ATTRS bool IsZero() const {
+ // Don't assume normalization.
+ for (int j{0}; j < digits_; ++j) {
+ if (digit_[j] != 0) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ // Predicate: true when 10*value would cause a carry.
+ // (When this happens during decimal-to-binary conversion,
+ // there are more digits in the input string than can be
+ // represented precisely.)
+ RT_API_ATTRS bool IsFull() const {
+ return digits_ == digitLimit_ && digit_[digits_ - 1] >= radix / 10;
+ }
+
+ // Sets *this to an unsigned integer value.
+ // Returns any remainder.
+ template <typename UINT> RT_API_ATTRS UINT SetTo(UINT n) {
+ static_assert(
+ std::is_same_v<UINT, common::uint128_t> || std::is_unsigned_v<UINT>);
+ SetToZero();
+ while (n != 0) {
+ auto q{n / 10u};
+ if (n != q * 10) {
+ break;
+ }
+ ++exponent_;
+ n = q;
+ }
+ if constexpr (sizeof n < sizeof(Digit)) {
+ if (n != 0) {
+ digit_[digits_++] = n;
+ }
+ return 0;
+ } else {
+ while (n != 0 && digits_ < digitLimit_) {
+ auto q{n / radix};
+ digit_[digits_++] = static_cast<Digit>(n - q * radix);
+ n = q;
+ }
+ return n;
+ }
+ }
+
+ RT_API_ATTRS int RemoveLeastOrderZeroDigits() {
+ int remove{0};
+ if (digits_ > 0 && digit_[0] == 0) {
+ while (remove < digits_ && digit_[remove] == 0) {
+ ++remove;
+ }
+ if (remove >= digits_) {
+ digits_ = 0;
+ } else if (remove > 0) {
+#if defined __GNUC__ && __GNUC__ < 8
+ // (&& j + remove < maxDigits) was added to avoid GCC < 8 build failure
+ // on -Werror=array-bounds. This can be removed if -Werror is disable.
+ for (int j{0}; j + remove < digits_ && (j + remove < maxDigits); ++j) {
+#else
+ for (int j{0}; j + remove < digits_; ++j) {
+#endif
+ digit_[j] = digit_[j + remove];
+ }
+ digits_ -= remove;
+ }
+ }
+ return remove;
+ }
+
+ RT_API_ATTRS void RemoveLeadingZeroDigits() {
+ while (digits_ > 0 && digit_[digits_ - 1] == 0) {
+ --digits_;
+ }
+ }
+
+ RT_API_ATTRS void Normalize() {
+ RemoveLeadingZeroDigits();
+ exponent_ += RemoveLeastOrderZeroDigits() * log10Radix;
+ }
+
+ // This limited divisibility test only works for even divisors of the radix,
+ // which is fine since it's only ever used with 2 and 5.
+ template <int N> RT_API_ATTRS bool IsDivisibleBy() const {
+ static_assert(N > 1 && radix % N == 0, "bad modulus");
+ return digits_ == 0 || (digit_[0] % N) == 0;
+ }
+
+ template <unsigned DIVISOR> RT_API_ATTRS int DivideBy() {
+ Digit remainder{0};
+ for (int j{digits_ - 1}; j >= 0; --j) {
+ Digit q{digit_[j] / DIVISOR};
+ Digit nrem{digit_[j] - DIVISOR * q};
+ digit_[j] = q + (radix / DIVISOR) * remainder;
+ remainder = nrem;
+ }
+ return remainder;
+ }
+
+ RT_API_ATTRS void DivideByPowerOfTwo(int twoPow) { // twoPow <= log10Radix
+ Digit remainder{0};
+ auto mask{(Digit{1} << twoPow) - 1};
+ auto coeff{radix >> twoPow};
+ for (int j{digits_ - 1}; j >= 0; --j) {
+ auto nrem{digit_[j] & mask};
+ digit_[j] = (digit_[j] >> twoPow) + coeff * remainder;
+ remainder = nrem;
+ }
+ }
+
+ // Returns true on overflow
+ RT_API_ATTRS bool DivideByPowerOfTwoInPlace(int twoPow) {
+ if (digits_ > 0) {
+ while (twoPow > 0) {
+ int chunk{twoPow > log10Radix ? log10Radix : twoPow};
+ if ((digit_[0] & ((Digit{1} << chunk) - 1)) == 0) {
+ DivideByPowerOfTwo(chunk);
+ twoPow -= chunk;
+ continue;
+ }
+ twoPow -= chunk;
+ if (digit_[digits_ - 1] >> chunk != 0) {
+ if (digits_ == digitLimit_) {
+ return true; // overflow
+ }
+ digit_[digits_++] = 0;
+ }
+ auto remainder{digit_[digits_ - 1]};
+ exponent_ -= log10Radix;
+ auto coeff{radix >> chunk}; // precise; radix is (5*2)**log10Radix
+ auto mask{(Digit{1} << chunk) - 1};
+ for (int j{digits_ - 1}; j >= 1; --j) {
+ digit_[j] = (digit_[j - 1] >> chunk) + coeff * remainder;
+ remainder = digit_[j - 1] & mask;
+ }
+ digit_[0] = coeff * remainder;
+ }
+ }
+ return false; // no overflow
+ }
+
+ RT_API_ATTRS int AddCarry(int position = 0, int carry = 1) {
+ for (; position < digits_; ++position) {
+ Digit v{digit_[position] + carry};
+ if (v < radix) {
+ digit_[position] = v;
+ return 0;
+ }
+ digit_[position] = v - radix;
+ carry = 1;
+ }
+ if (digits_ < digitLimit_) {
+ digit_[digits_++] = carry;
+ return 0;
+ }
+ Normalize();
+ if (digits_ < digitLimit_) {
+ digit_[digits_++] = carry;
+ return 0;
+ }
+ return carry;
+ }
+
+ RT_API_ATTRS void Decrement() {
+ for (int j{0}; digit_[j]-- == 0; ++j) {
+ digit_[j] = radix - 1;
+ }
+ }
+
+ template <int N> RT_API_ATTRS int MultiplyByHelper(int carry = 0) {
+ for (int j{0}; j < digits_; ++j) {
+ auto v{N * digit_[j] + carry};
+ carry = v / radix;
+ digit_[j] = v - carry * radix; // i.e., v % radix
+ }
+ return carry;
+ }
+
+ template <int N> RT_API_ATTRS int MultiplyBy(int carry = 0) {
+ if (int newCarry{MultiplyByHelper<N>(carry)}) {
+ return AddCarry(digits_, newCarry);
+ } else {
+ return 0;
+ }
+ }
+
+ template <int N> RT_API_ATTRS int MultiplyWithoutNormalization() {
+ if (int carry{MultiplyByHelper<N>(0)}) {
+ if (digits_ < digitLimit_) {
+ digit_[digits_++] = carry;
+ return 0;
+ } else {
+ return carry;
+ }
+ } else {
+ return 0;
+ }
+ }
+
+ RT_API_ATTRS void LoseLeastSignificantDigit(); // with rounding
+
+ RT_API_ATTRS void PushCarry(int carry) {
+ if (digits_ == maxDigits && RemoveLeastOrderZeroDigits() == 0) {
+ LoseLeastSignificantDigit();
+ digit_[digits_ - 1] += carry;
+ } else {
+ digit_[digits_++] = carry;
+ }
+ }
+
+ // Adds another number and then divides by two.
+ // Assumes same exponent and sign.
+ // Returns true when the result has effectively been rounded down.
+ RT_API_ATTRS bool Mean(const BigRadixFloatingPointNumber &);
+
+ // Parses a floating-point number; leaves the pointer reference
+ // argument pointing at the next character after what was recognized.
+ // The "end" argument can be left null if the caller is sure that the
+ // string is properly terminated with an addressable character that
+ // can't be in a valid floating-point character.
+ RT_API_ATTRS bool ParseNumber(const char *&, bool &inexact, const char *end);
+
+ using Raw = typename Real::RawType;
+ constexpr RT_API_ATTRS Raw SignBit() const {
+ return Raw{isNegative_} << (Real::bits - 1);
+ }
+ constexpr RT_API_ATTRS Raw Infinity() const {
+ Raw result{static_cast<Raw>(Real::maxExponent)};
+ result <<= Real::significandBits;
+ result |= SignBit();
+ if constexpr (Real::bits == 80) { // x87
+ result |= Raw{1} << 63;
+ }
+ return result;
+ }
+ constexpr RT_API_ATTRS Raw NaN(bool isQuiet = true) {
+ Raw result{Real::maxExponent};
+ result <<= Real::significandBits;
+ result |= SignBit();
+ if constexpr (Real::bits == 80) { // x87
+ result |= Raw{isQuiet ? 3u : 2u} << 62;
+ } else {
+ Raw quiet{isQuiet ? Raw{2} : Raw{1}};
+ quiet <<= Real::significandBits - 2;
+ result |= quiet;
+ }
+ return result;
+ }
+ constexpr RT_API_ATTRS Raw HUGE() const {
+ Raw result{static_cast<Raw>(Real::maxExponent)};
+ result <<= Real::significandBits;
+ result |= SignBit();
+ return result - 1; // decrement exponent, set all significand bits
+ }
+
+ Digit digit_[maxDigits]; // in little-endian order: digit_[0] is LSD
+ int digits_{0}; // # of elements in digit_[] array; zero when zero
+ int digitLimit_{maxDigits}; // precision clamp
+ int exponent_{0}; // signed power of ten
+ bool isNegative_{false};
+ enum FortranRounding rounding_ { RoundNearest };
+};
+} // namespace Fortran::decimal
+#endif
diff --git a/flang/lib/Common/default-kinds.cpp b/flang/lib/Support/default-kinds.cpp
similarity index 94%
rename from flang/lib/Common/default-kinds.cpp
rename to flang/lib/Support/default-kinds.cpp
index 0c708fcd605094..612adceb9d996b 100644
--- a/flang/lib/Common/default-kinds.cpp
+++ b/flang/lib/Support/default-kinds.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Common/default-kinds.cpp --------------------------------------===//
+//===-- lib/Support/default-kinds.cpp ---------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -6,7 +6,7 @@
//
//===----------------------------------------------------------------------===//
-#include "flang/Common/default-kinds.h"
+#include "flang/Support/default-kinds.h"
#include "flang/Common/idioms.h"
namespace Fortran::common {
diff --git a/flang/lib/Common/idioms.cpp b/flang/lib/Support/idioms.cpp
similarity index 89%
rename from flang/lib/Common/idioms.cpp
rename to flang/lib/Support/idioms.cpp
index 536a5c2e5479df..906a4c1bcd9b0a 100644
--- a/flang/lib/Common/idioms.cpp
+++ b/flang/lib/Support/idioms.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Common/idioms.cpp ---------------------------------------------===//
+//===-- lib/Support/idioms.cpp ----------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/runtime/CMakeLists.txt b/flang/runtime/CMakeLists.txt
deleted file mode 100644
index 4537b2d059d65b..00000000000000
--- a/flang/runtime/CMakeLists.txt
+++ /dev/null
@@ -1,314 +0,0 @@
-#===-- runtime/CMakeLists.txt ----------------------------------------------===#
-#
-# 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
-#
-#===------------------------------------------------------------------------===#
-
-if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
- cmake_minimum_required(VERSION 3.20.0)
-
- project(FlangRuntime C CXX)
-
- set(CMAKE_CXX_STANDARD 17)
- set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
- set(CMAKE_CXX_EXTENSIONS OFF)
-
- set(FLANG_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/..")
-
- set(LLVM_COMMON_CMAKE_UTILS "${FLANG_SOURCE_DIR}/../cmake")
- set(LLVM_CMAKE_UTILS "${FLANG_SOURCE_DIR}/../llvm/cmake")
- set(CLANG_CMAKE_UTILS "${FLANG_SOURCE_DIR}/../clang/cmake")
-
- # Add path for custom modules
- list(INSERT CMAKE_MODULE_PATH 0
- "${FLANG_SOURCE_DIR}/cmake"
- "${FLANG_SOURCE_DIR}/cmake/modules"
- "${LLVM_COMMON_CMAKE_UTILS}"
- "${LLVM_COMMON_CMAKE_UTILS}/Modules"
- "${LLVM_CMAKE_UTILS}"
- "${LLVM_CMAKE_UTILS}/modules"
- "${CLANG_CMAKE_UTILS}/modules"
- )
-
- include(AddClang)
- include(AddLLVM)
- include(AddFlang)
- include(HandleLLVMOptions)
-
- include(TestBigEndian)
- test_big_endian(IS_BIGENDIAN)
- if (IS_BIGENDIAN)
- add_compile_definitions(FLANG_BIG_ENDIAN=1)
- else ()
- add_compile_definitions(FLANG_LITTLE_ENDIAN=1)
- endif ()
- include_directories(BEFORE
- ${FLANG_SOURCE_DIR}/include)
-
- # The out of tree builds of the compiler and the Fortran runtime
- # must use the same setting of FLANG_RUNTIME_F128_MATH_LIB
- # to be composable. Failure to synchronize this setting may result
- # in linking errors or fatal failures in F128 runtime functions.
- set(FLANG_RUNTIME_F128_MATH_LIB "" CACHE STRING
- "Specifies the target library used for implementing IEEE-754 128-bit float \
- math in F18 runtime, e.g. it might be libquadmath for targets where \
- REAL(16) is mapped to __float128, or libm for targets where REAL(16) \
- is mapped to long double, etc."
- )
-endif()
-
-include(CheckCXXSymbolExists)
-include(CheckCXXSourceCompiles)
-check_cxx_symbol_exists(strerror_r string.h HAVE_STRERROR_R)
-# Can't use symbol exists here as the function is overloaded in C++
-check_cxx_source_compiles(
- "#include <string.h>
- int main() {
- char buf[4096];
- return strerror_s(buf, 4096, 0);
- }
- "
- HAVE_DECL_STRERROR_S)
-
-# Check if 128-bit float computations can be done via long double.
-check_cxx_source_compiles(
- "#include <cfloat>
- #if LDBL_MANT_DIG != 113
- #error LDBL_MANT_DIG != 113
- #endif
- int main() { return 0; }
- "
- HAVE_LDBL_MANT_DIG_113)
-
-check_cxx_compiler_flag(-fno-lto FLANG_RUNTIME_HAS_FNO_LTO_FLAG)
-if (FLANG_RUNTIME_HAS_FNO_LTO_FLAG)
- set(NO_LTO_FLAGS "-fno-lto")
-else()
- set(NO_LTO_FLAGS "")
-endif()
-
-configure_file(config.h.cmake config.h)
-# include_directories is used here instead of target_include_directories
-# because add_flang_library creates multiple objects (STATIC/SHARED, OBJECT)
-# with different names
-include_directories(AFTER ${CMAKE_CURRENT_BINARY_DIR})
-
-append(${NO_LTO_FLAGS} CMAKE_C_FLAGS)
-append(${NO_LTO_FLAGS} CMAKE_CXX_FLAGS)
-
-# Disable libstdc++/libc++ assertions, even in an LLVM_ENABLE_ASSERTIONS build,
-# to avoid an unwanted dependency on libstdc++/libc++.so.
-add_definitions(-U_GLIBCXX_ASSERTIONS)
-add_definitions(-U_LIBCPP_ENABLE_ASSERTIONS)
-
-add_subdirectory(Float128Math)
-
-set(sources
- ISO_Fortran_binding.cpp
- allocator-registry.cpp
- allocatable.cpp
- array-constructor.cpp
- assign.cpp
- buffer.cpp
- character.cpp
- command.cpp
- complex-powi.cpp
- complex-reduction.c
- connection.cpp
- copy.cpp
- derived-api.cpp
- derived.cpp
- descriptor-io.cpp
- descriptor.cpp
- dot-product.cpp
- edit-input.cpp
- edit-output.cpp
- environment.cpp
- exceptions.cpp
- execute.cpp
- extensions.cpp
- external-unit.cpp
- extrema.cpp
- file.cpp
- findloc.cpp
- format.cpp
- inquiry.cpp
- internal-unit.cpp
- io-api.cpp
- io-api-minimal.cpp
- io-error.cpp
- io-stmt.cpp
- iostat.cpp
- main.cpp
- matmul-transpose.cpp
- matmul.cpp
- memory.cpp
- misc-intrinsic.cpp
- namelist.cpp
- non-tbp-dio.cpp
- numeric.cpp
- pointer.cpp
- product.cpp
- pseudo-unit.cpp
- ragged.cpp
- random.cpp
- reduce.cpp
- reduction.cpp
- stat.cpp
- stop.cpp
- sum.cpp
- support.cpp
- temporary-stack.cpp
- terminator.cpp
- time-intrinsic.cpp
- tools.cpp
- transformational.cpp
- type-code.cpp
- type-info.cpp
- unit-map.cpp
- unit.cpp
- utf.cpp
- ${FORTRAN_MODULE_OBJECTS}
-)
-
-include(AddFlangOffloadRuntime)
-
-# List of files that are buildable for all devices.
-set(supported_files
- ISO_Fortran_binding.cpp
- allocatable.cpp
- allocator-registry.cpp
- array-constructor.cpp
- assign.cpp
- buffer.cpp
- character.cpp
- connection.cpp
- copy.cpp
- derived-api.cpp
- derived.cpp
- descriptor.cpp
- descriptor-io.cpp
- dot-product.cpp
- edit-input.cpp
- edit-output.cpp
- environment.cpp
- extrema.cpp
- external-unit.cpp
- file.cpp
- findloc.cpp
- format.cpp
- inquiry.cpp
- internal-unit.cpp
- io-api.cpp
- io-api-minimal.cpp
- io-error.cpp
- io-stmt.cpp
- iostat.cpp
- matmul-transpose.cpp
- matmul.cpp
- memory.cpp
- misc-intrinsic.cpp
- namelist.cpp
- non-tbp-dio.cpp
- numeric.cpp
- pointer.cpp
- product.cpp
- pseudo-unit.cpp
- ragged.cpp
- stat.cpp
- sum.cpp
- support.cpp
- terminator.cpp
- tools.cpp
- transformational.cpp
- type-code.cpp
- type-info.cpp
- unit.cpp
- utf.cpp
- )
-
-enable_cuda_compilation(FortranRuntime "${supported_files}")
-enable_omp_offload_compilation("${supported_files}")
-
-if (NOT TARGET FortranFloat128Math)
- # If FortranFloat128Math is not defined, then we are not building
- # standalone FortranFloat128Math library. Instead, include
- # the relevant sources into FortranRuntime itself.
- # The information is provided via FortranFloat128MathILib
- # interface library.
- get_target_property(f128_sources
- FortranFloat128MathILib INTERFACE_SOURCES
- )
- if (f128_sources)
- # The interface may define special macros for Float128Math files,
- # so we need to propagate them.
- get_target_property(f128_defs
- FortranFloat128MathILib INTERFACE_COMPILE_DEFINITIONS
- )
- set_property(SOURCE ${f128_sources}
- APPEND PROPERTY COMPILE_DEFINITIONS
- ${f128_defs}
- )
- list(APPEND sources ${f128_sources})
- endif()
-endif()
-
-if (NOT DEFINED MSVC)
- add_flang_library(FortranRuntime
- ${sources}
- LINK_LIBS
- FortranDecimal
-
- INSTALL_WITH_TOOLCHAIN
- )
-else()
- add_flang_library(FortranRuntime
- ${sources}
- LINK_LIBS
- FortranDecimal
- )
- set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreaded)
- add_flang_library(FortranRuntime.static ${sources}
- LINK_LIBS
- FortranDecimal.static
- INSTALL_WITH_TOOLCHAIN)
- set_target_properties(FortranRuntime.static PROPERTIES FOLDER "Flang/Runtime Libraries")
- set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreadedDLL)
- add_flang_library(FortranRuntime.dynamic ${sources}
- LINK_LIBS
- FortranDecimal.dynamic
- INSTALL_WITH_TOOLCHAIN)
- set_target_properties(FortranRuntime.dynamic PROPERTIES FOLDER "Flang/Runtime Libraries")
- set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreadedDebug)
- add_flang_library(FortranRuntime.static_dbg ${sources}
- LINK_LIBS
- FortranDecimal.static_dbg
- INSTALL_WITH_TOOLCHAIN)
- set_target_properties(FortranRuntime.static_dbg PROPERTIES FOLDER "Flang/Runtime Libraries")
- set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreadedDebugDLL)
- add_flang_library(FortranRuntime.dynamic_dbg ${sources}
- LINK_LIBS
- FortranDecimal.dynamic_dbg
- INSTALL_WITH_TOOLCHAIN)
- set_target_properties(FortranRuntime.dynamic_dbg PROPERTIES FOLDER "Flang/Runtime Libraries")
- add_dependencies(FortranRuntime FortranRuntime.static FortranRuntime.dynamic
- FortranRuntime.static_dbg FortranRuntime.dynamic_dbg)
-endif()
-set_target_properties(FortranRuntime PROPERTIES FOLDER "Flang/Runtime Libraries")
-
-# If FortranRuntime is part of a Flang build (and not a separate build) then
-# add dependency to make sure that Fortran runtime library is being built after
-# we have the Flang compiler available. This also includes the MODULE files
-# that compile when the 'flang-new' target is built.
-#
-# TODO: This is a workaround and should be updated when runtime build procedure
-# is changed to a regular runtime build. See discussion in PR #95388.
-if (TARGET flang-new AND TARGET module_files)
- add_dependencies(FortranRuntime flang-new module_files)
-endif()
-
-if (FLANG_CUF_RUNTIME)
- add_subdirectory(CUDA)
-endif()
diff --git a/flang/test/CMakeLists.txt b/flang/test/CMakeLists.txt
index a18a5c6519eda4..60261ea352780a 100644
--- a/flang/test/CMakeLists.txt
+++ b/flang/test/CMakeLists.txt
@@ -63,7 +63,7 @@ set(FLANG_TEST_DEPENDS
FileCheck
count
not
- module_files
+# module_files
fir-opt
tco
bbc
@@ -71,8 +71,6 @@ set(FLANG_TEST_DEPENDS
llvm-objdump
llvm-readobj
split-file
- FortranRuntime
- FortranDecimal
)
if (LLVM_ENABLE_PLUGINS AND NOT WIN32)
list(APPEND FLANG_TEST_DEPENDS Bye)
diff --git a/flang/test/Driver/linker-flags.f90 b/flang/test/Driver/linker-flags.f90
index ac9500d7c45cec..fdeb95e4dd97c6 100644
--- a/flang/test/Driver/linker-flags.f90
+++ b/flang/test/Driver/linker-flags.f90
@@ -33,7 +33,7 @@
! SOLARIS-F128NONE-NOT: FortranFloat128Math
! UNIX-F128LIBQUADMATH-SAME: "-lFortranFloat128Math" "--as-needed" "-lquadmath" "--no-as-needed"
! SOLARIS-F128LIBQUADMATH-SAME: "-lFortranFloat128Math" "-z" "ignore" "-lquadmath" "-z" "record"
-! UNIX-SAME: "-lFortranRuntime" "-lFortranDecimal" "-lm"
+! UNIX-SAME: "-lFortranRuntime" "-lm"
! COMPILER-RT: "{{.*}}{{\\|/}}libclang_rt.builtins.a"
! DARWIN-LABEL: "{{.*}}ld{{(\.exe)?}}"
@@ -41,20 +41,18 @@
! DARWIN-F128NONE-NOT: FortranFloat128Math
! DARWIN-F128LIBQUADMATH-SAME: "-lFortranFloat128Math" "--as-needed" "-lquadmath" "--no-as-needed"
! DARWIN-SAME: -lFortranRuntime
-! DARWIN-SAME: -lFortranDecimal
! HAIKU-LABEL: "{{.*}}ld{{(\.exe)?}}"
! HAIKU-SAME: "[[object_file]]"
! HAIKU-F128NONE-NOT: FortranFloat128Math
! HAIKU-F128LIBQUADMATH-SAME: "-lFortranFloat128Math" "--as-needed" "-lquadmath" "--no-as-needed"
-! HAIKU-SAME: "-lFortranRuntime" "-lFortranDecimal"
+! HAIKU-SAME: "-lFortranRuntime"
! MINGW-LABEL: "{{.*}}ld{{(\.exe)?}}"
! MINGW-SAME: "[[object_file]]"
! MINGW-F128NONE-NOT: FortranFloat128Math
! MINGW-F128LIBQUADMATH-SAME: "-lFortranFloat128Math" "--as-needed" "-lquadmath" "--no-as-needed"
! MINGW-SAME: -lFortranRuntime
-! MINGW-SAME: -lFortranDecimal
! NOTE: This also matches lld-link (when CLANG_DEFAULT_LINKER=lld) and
! any .exe suffix that is added when resolving to the full path of
diff --git a/flang/test/Driver/msvc-dependent-lib-flags.f90 b/flang/test/Driver/msvc-dependent-lib-flags.f90
index 765917f07d8e72..befe61fdadcd14 100644
--- a/flang/test/Driver/msvc-dependent-lib-flags.f90
+++ b/flang/test/Driver/msvc-dependent-lib-flags.f90
@@ -8,7 +8,6 @@
! MSVC-SAME: -D_MT
! MSVC-SAME: --dependent-lib=libcmt
! MSVC-SAME: --dependent-lib=FortranRuntime.static.lib
-! MSVC-SAME: --dependent-lib=FortranDecimal.static.lib
! MSVC-DEBUG: -fc1
! MSVC-DEBUG-SAME: --dependent-lib=clang_rt.builtins.lib
@@ -16,7 +15,6 @@
! MSVC-DEBUG-SAME: -D_DEBUG
! MSVC-DEBUG-SAME: --dependent-lib=libcmtd
! MSVC-DEBUG-SAME: --dependent-lib=FortranRuntime.static_dbg.lib
-! MSVC-DEBUG-SAME: --dependent-lib=FortranDecimal.static_dbg.lib
! MSVC-DLL: -fc1
! MSVC-DLL-SAME: --dependent-lib=clang_rt.builtins.lib
@@ -24,7 +22,6 @@
! MSVC-DLL-SAME: -D_DLL
! MSVC-DLL-SAME: --dependent-lib=msvcrt
! MSVC-DLL-SAME: --dependent-lib=FortranRuntime.dynamic.lib
-! MSVC-DLL-SAME: --dependent-lib=FortranDecimal.dynamic.lib
! MSVC-DLL-DEBUG: -fc1
! MSVC-DLL-DEBUG-SAME: --dependent-lib=clang_rt.builtins.lib
@@ -33,4 +30,3 @@
! MSVC-DLL-DEBUG-SAME: -D_DLL
! MSVC-DLL-DEBUG-SAME: --dependent-lib=msvcrtd
! MSVC-DLL-DEBUG-SAME: --dependent-lib=FortranRuntime.dynamic_dbg.lib
-! MSVC-DLL-DEBUG-SAME: --dependent-lib=FortranDecimal.dynamic_dbg.lib
diff --git a/flang/test/lib/CMakeLists.txt b/flang/test/lib/CMakeLists.txt
index fc6ef10fab1f5a..687b107844c651 100644
--- a/flang/test/lib/CMakeLists.txt
+++ b/flang/test/lib/CMakeLists.txt
@@ -1 +1,2 @@
+include_directories("${CMAKE_CURRENT_SOURCE_DIR}/../../../FortranRuntime/include")
add_subdirectory(Analysis)
diff --git a/flang/test/lit.cfg.py b/flang/test/lit.cfg.py
index 4acbc0606d1977..48b03e34798792 100644
--- a/flang/test/lit.cfg.py
+++ b/flang/test/lit.cfg.py
@@ -163,29 +163,6 @@
ToolSubst("%not_todo_abort_cmd", command=FindTool("not"), unresolved="fatal")
)
-# Define some variables to help us test that the flang runtime doesn't depend on
-# the C++ runtime libraries. For this we need a C compiler. If for some reason
-# we don't have one, we can just disable the test.
-if config.cc:
- libruntime = os.path.join(config.flang_lib_dir, "libFortranRuntime.a")
- libdecimal = os.path.join(config.flang_lib_dir, "libFortranDecimal.a")
- include = os.path.join(config.flang_src_dir, "include")
-
- if (
- os.path.isfile(libruntime)
- and os.path.isfile(libdecimal)
- and os.path.isdir(include)
- ):
- config.available_features.add("c-compiler")
- tools.append(
- ToolSubst(
- "%cc", command=config.cc, extra_args=isysroot_flag, unresolved="fatal"
- )
- )
- tools.append(ToolSubst("%libruntime", command=libruntime, unresolved="fatal"))
- tools.append(ToolSubst("%libdecimal", command=libdecimal, unresolved="fatal"))
- tools.append(ToolSubst("%include", command=include, unresolved="fatal"))
-
# Add all the tools and their substitutions (if applicable). Use the search paths provided for
# finding the tools.
if config.flang_standalone_build:
diff --git a/flang/test/lit.site.cfg.py.in b/flang/test/lit.site.cfg.py.in
index d1a0ac763cf8a0..65864302fb7aec 100644
--- a/flang/test/lit.site.cfg.py.in
+++ b/flang/test/lit.site.cfg.py.in
@@ -21,7 +21,6 @@ config.python_executable = "@PYTHON_EXECUTABLE@"
config.flang_standalone_build = @FLANG_STANDALONE_BUILD@
config.has_plugins = @LLVM_ENABLE_PLUGINS@
config.linked_bye_extension = @LLVM_BYE_LINK_INTO_TOOLS@
-config.cc = "@CMAKE_C_COMPILER@"
config.osx_sysroot = path(r"@CMAKE_OSX_SYSROOT@")
config.targets_to_build = "@TARGETS_TO_BUILD@"
config.default_sysroot = "@DEFAULT_SYSROOT@"
diff --git a/flang/tools/CMakeLists.txt b/flang/tools/CMakeLists.txt
index 337545ae0d4d7a..c9f00c8cc6dbd6 100644
--- a/flang/tools/CMakeLists.txt
+++ b/flang/tools/CMakeLists.txt
@@ -7,7 +7,6 @@
#===------------------------------------------------------------------------===#
add_subdirectory(bbc)
-add_subdirectory(f18)
add_subdirectory(flang-driver)
add_subdirectory(tco)
add_subdirectory(f18-parse-demo)
diff --git a/flang/tools/bbc/CMakeLists.txt b/flang/tools/bbc/CMakeLists.txt
index 69316d4dc61de3..68e4b59fd6eec5 100644
--- a/flang/tools/bbc/CMakeLists.txt
+++ b/flang/tools/bbc/CMakeLists.txt
@@ -6,6 +6,7 @@ AllTargetsInfos
TargetParser
)
+include_directories("${CMAKE_CURRENT_SOURCE_DIR}/../../../FortranRuntime/include")
add_flang_tool(bbc bbc.cpp
DEPENDS
FIROptCodeGenPassIncGen
diff --git a/flang/tools/bbc/bbc.cpp b/flang/tools/bbc/bbc.cpp
index dcff4503f16571..e9ec6b7116e0aa 100644
--- a/flang/tools/bbc/bbc.cpp
+++ b/flang/tools/bbc/bbc.cpp
@@ -14,10 +14,10 @@
///
//===----------------------------------------------------------------------===//
-#include "flang/Common/Fortran-features.h"
-#include "flang/Common/OpenMP-features.h"
-#include "flang/Common/Version.h"
-#include "flang/Common/default-kinds.h"
+#include "flang/Support/Fortran-features.h"
+#include "flang/Support/OpenMP-features.h"
+#include "flang/Support/Version.h"
+#include "flang/Support/default-kinds.h"
#include "flang/Frontend/TargetOptions.h"
#include "flang/Lower/Bridge.h"
#include "flang/Lower/PFTBuilder.h"
diff --git a/flang/tools/f18-parse-demo/CMakeLists.txt b/flang/tools/f18-parse-demo/CMakeLists.txt
index df1f1d24a55e51..34f1bf048ad849 100644
--- a/flang/tools/f18-parse-demo/CMakeLists.txt
+++ b/flang/tools/f18-parse-demo/CMakeLists.txt
@@ -1,3 +1,5 @@
+include_directories("${CMAKE_CURRENT_SOURCE_DIR}/../../../FortranRuntime/include")
+
set(LLVM_LINK_COMPONENTS
FrontendOpenACC
FrontendOpenMP
diff --git a/flang/tools/f18-parse-demo/f18-parse-demo.cpp b/flang/tools/f18-parse-demo/f18-parse-demo.cpp
index 3025dbd4dca4ab..691b6cebec9b51 100644
--- a/flang/tools/f18-parse-demo/f18-parse-demo.cpp
+++ b/flang/tools/f18-parse-demo/f18-parse-demo.cpp
@@ -21,8 +21,8 @@
// scaffolding compiler driver that can test some semantic passes of the
// F18 compiler under development.
-#include "flang/Common/Fortran-features.h"
-#include "flang/Common/default-kinds.h"
+#include "flang/Support/Fortran-features.h"
+#include "flang/Support/default-kinds.h"
#include "flang/Parser/characters.h"
#include "flang/Parser/dump-parse-tree.h"
#include "flang/Parser/message.h"
diff --git a/flang/tools/f18/CMakeLists.txt b/flang/tools/f18/CMakeLists.txt
deleted file mode 100644
index 9d7b8633958cb7..00000000000000
--- a/flang/tools/f18/CMakeLists.txt
+++ /dev/null
@@ -1,173 +0,0 @@
-set(LLVM_LINK_COMPONENTS
- FrontendOpenACC
- FrontendOpenMP
- Support
- )
-
-# Define the list of Fortran module files that need to be compiled
-# to produce an object file for inclusion into the FortranRuntime
-# library.
-set(MODULES_WITH_IMPLEMENTATION
- "iso_fortran_env_impl"
-)
-
-# Define the list of Fortran module files for which it is
-# sufficient to generate the module file via -fsyntax-only.
-set(MODULES_WITHOUT_IMPLEMENTATION
- "__fortran_builtins"
- "__fortran_ieee_exceptions"
- "__fortran_type_info"
- "__ppc_types"
- "__ppc_intrinsics"
- "mma"
- "__cuda_builtins"
- "cudadevice"
- "ieee_arithmetic"
- "ieee_exceptions"
- "ieee_features"
- "iso_c_binding"
- "iso_fortran_env"
-)
-
-set(MODULES ${MODULES_WITH_IMPLEMENTATION} ${MODULES_WITHOUT_IMPLEMENTATION})
-
-# Check if 128-bit float computations can be done via long double.
-check_cxx_source_compiles(
- "#include <cfloat>
- #if LDBL_MANT_DIG != 113
- #error LDBL_MANT_DIG != 113
- #endif
- int main() { return 0; }
- "
- HAVE_LDBL_MANT_DIG_113)
-
-# Figure out whether we can support REAL(KIND=16)
-if (FLANG_RUNTIME_F128_MATH_LIB)
- set(FLANG_SUPPORT_R16 "1")
-elseif (HAVE_LDBL_MANT_DIG_113)
- set(FLANG_SUPPORT_R16 "1")
-else()
- set(FLANG_SUPPORT_R16 "0")
-endif()
-
-# Init variable to hold extra object files coming from the Fortran modules;
-# these module files will be contributed from the CMakeLists in flang/tools/f18.
-set(module_objects "")
-
-# Create module files directly from the top-level module source directory.
-# If CMAKE_CROSSCOMPILING, then the newly built flang-new executable was
-# cross compiled, and thus can't be executed on the build system and thus
-# can't be used for generating module files.
-if (NOT CMAKE_CROSSCOMPILING)
- foreach(filename ${MODULES})
- set(depends "")
- set(opts "")
- if(${filename} STREQUAL "__fortran_builtins" OR
- ${filename} STREQUAL "__ppc_types")
- elseif(${filename} STREQUAL "__ppc_intrinsics" OR
- ${filename} STREQUAL "mma")
- set(depends ${FLANG_INTRINSIC_MODULES_DIR}/__ppc_types.mod)
- elseif(${filename} STREQUAL "cudadevice")
- set(opts -fc1 -xcuda)
- set(depends ${FLANG_INTRINSIC_MODULES_DIR}/__cuda_builtins.mod)
- else()
- set(depends ${FLANG_INTRINSIC_MODULES_DIR}/__fortran_builtins.mod)
- if(${filename} STREQUAL "iso_fortran_env")
- set(depends ${depends} ${FLANG_INTRINSIC_MODULES_DIR}/iso_fortran_env_impl.mod)
- endif()
- if(${filename} STREQUAL "ieee_arithmetic" OR
- ${filename} STREQUAL "ieee_exceptions")
- set(depends ${depends} ${FLANG_INTRINSIC_MODULES_DIR}/__fortran_ieee_exceptions.mod)
- endif()
- endif()
- if(NOT ${filename} STREQUAL "__fortran_type_info" AND NOT ${filename} STREQUAL "__fortran_builtins")
- set(depends ${depends} ${FLANG_INTRINSIC_MODULES_DIR}/__fortran_type_info.mod)
- endif()
-
- # The module contains PPC vector types that needs the PPC target.
- if(${filename} STREQUAL "__ppc_intrinsics" OR
- ${filename} STREQUAL "mma")
- if (PowerPC IN_LIST LLVM_TARGETS_TO_BUILD)
- set(opts "--target=ppc64le")
- else()
- # Do not compile PPC module if the target is not available.
- continue()
- endif()
- endif()
-
- set(decls "")
- if (FLANG_SUPPORT_R16)
- set(decls "-DFLANG_SUPPORT_R16")
- endif()
-
- # Some modules have an implementation part that needs to be added to the
- # FortranRuntime library.
- set(compile_with "-fsyntax-only")
- set(object_output "")
- set(include_in_link FALSE)
- if(${filename} IN_LIST MODULES_WITH_IMPLEMENTATION)
- set(object_output "${CMAKE_CURRENT_BINARY_DIR}/${filename}${CMAKE_CXX_OUTPUT_EXTENSION}")
- set(compile_with -c -o ${object_output})
- set(include_in_link TRUE)
- endif()
-
- set(base ${FLANG_INTRINSIC_MODULES_DIR}/${filename})
- # TODO: We may need to flag this with conditional, in case Flang is built w/o OpenMP support
- add_custom_command(OUTPUT ${base}.mod ${object_output}
- COMMAND ${CMAKE_COMMAND} -E make_directory ${FLANG_INTRINSIC_MODULES_DIR}
- COMMAND flang-new ${opts} ${decls} -cpp ${compile_with} -module-dir ${FLANG_INTRINSIC_MODULES_DIR}
- ${FLANG_SOURCE_DIR}/module/${filename}.f90
- DEPENDS flang-new ${FLANG_SOURCE_DIR}/module/${filename}.f90 ${FLANG_SOURCE_DIR}/module/__fortran_builtins.f90 ${depends}
- )
- list(APPEND MODULE_FILES ${base}.mod)
- install(FILES ${base}.mod DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/flang")
-
- # If a module has been compiled into an object file, add the file to
- # the link line for the FortranRuntime library.
- if(include_in_link)
- list(APPEND module_objects ${object_output})
- endif()
- endforeach()
-
- # Set a CACHE variable that is visible to the CMakeLists.txt in runtime/, so that
- # the compiled Fortran modules can be added to the link line of the FortranRuntime
- # library.
- set(FORTRAN_MODULE_OBJECTS ${module_objects} CACHE INTERNAL "" FORCE)
-
- # Special case for omp_lib.mod, because its source comes from openmp/runtime/src/include.
- # It also produces two module files: omp_lib.mod and omp_lib_kinds.mod. Compile these
- # files only if OpenMP support has been configured.
- if (LLVM_TOOL_OPENMP_BUILD)
- message(STATUS "OpenMP runtime support enabled via LLVM_ENABLED_PROJECTS, building omp_lib.mod")
- set(base ${FLANG_INTRINSIC_MODULES_DIR}/omp_lib)
- add_custom_command(OUTPUT ${base}.mod ${base}_kinds.mod
- COMMAND ${CMAKE_COMMAND} -E make_directory ${FLANG_INTRINSIC_MODULES_DIR}
- COMMAND flang-new -cpp -fsyntax-only ${opts} -module-dir ${FLANG_INTRINSIC_MODULES_DIR}
- ${CMAKE_BINARY_DIR}/projects/openmp/runtime/src/omp_lib.F90
- DEPENDS flang-new ${FLANG_INTRINSIC_MODULES_DIR}/iso_c_binding.mod ${CMAKE_BINARY_DIR}/projects/openmp/runtime/src/omp_lib.F90 ${depends}
- )
- add_custom_command(OUTPUT ${base}.f18.mod
- DEPENDS ${base}.mod
- COMMAND ${CMAKE_COMMAND} -E copy ${base}.mod ${base}.f18.mod)
- add_custom_command(OUTPUT ${base}_kinds.f18.mod
- DEPENDS ${base}.mod
- COMMAND ${CMAKE_COMMAND} -E copy ${base}_kinds.mod ${base}_kinds.f18.mod)
- list(APPEND MODULE_FILES ${base}.mod ${base}.f18.mod ${base}_kinds.mod ${base}_kinds.f18.mod)
- install(FILES ${base}.mod ${base}.f18.mod ${base}_kinds.mod ${base}_kinds.f18.mod DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/flang")
- else()
- message(STATUS "Not building omp_lib.mod, no OpenMP runtime in LLVM_ENABLED_PROJECTS")
- endif()
-endif()
-
-add_custom_target(module_files ALL DEPENDS ${MODULE_FILES})
-set_target_properties(module_files PROPERTIES FOLDER "Flang/Resources")
-
-# TODO Move this to a more suitable location
-# Copy the generated omp_lib.h header file, if OpenMP support has been configured.
-if (LLVM_TOOL_OPENMP_BUILD)
- message(STATUS "OpenMP runtime support enabled via LLVM_ENABLED_PROJECTS, building omp_lib.h")
- file(COPY ${CMAKE_BINARY_DIR}/projects/openmp/runtime/src/omp_lib.h DESTINATION "${CMAKE_BINARY_DIR}/include/flang/OpenMP/" FILE_PERMISSIONS OWNER_READ OWNER_WRITE)
- install(FILES ${CMAKE_BINARY_DIR}/include/flang/OpenMP/omp_lib.h DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/flang/OpenMP")
-else()
- message(STATUS "Not copying omp_lib.h, no OpenMP runtime in LLVM_ENABLED_PROJECTS")
-endif()
diff --git a/flang/tools/f18/dump.cpp b/flang/tools/f18/dump.cpp
deleted file mode 100644
index f11b5aedf4c6af..00000000000000
--- a/flang/tools/f18/dump.cpp
+++ /dev/null
@@ -1,42 +0,0 @@
-//===-- tools/f18/dump.cpp ------------------------------------------------===//
-//
-// 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 file defines Dump routines available for calling from the debugger.
-// Each is based on operator<< for that type. There are overloadings for
-// reference and pointer, and for dumping to a provided raw_ostream or errs().
-
-#ifdef DEBUGF18
-
-#include "llvm/Support/raw_ostream.h"
-
-#define DEFINE_DUMP(ns, name) \
- namespace ns { \
- class name; \
- llvm::raw_ostream &operator<<(llvm::raw_ostream &, const name &); \
- } \
- void Dump(llvm::raw_ostream &os, const ns::name &x) { os << x << '\n'; } \
- void Dump(llvm::raw_ostream &os, const ns::name *x) { \
- if (x == nullptr) \
- os << "null\n"; \
- else \
- Dump(os, *x); \
- } \
- void Dump(const ns::name &x) { Dump(llvm::errs(), x); } \
- void Dump(const ns::name *x) { Dump(llvm::errs(), *x); }
-
-namespace Fortran {
-DEFINE_DUMP(parser, Name)
-DEFINE_DUMP(parser, CharBlock)
-DEFINE_DUMP(semantics, Symbol)
-DEFINE_DUMP(semantics, Scope)
-DEFINE_DUMP(semantics, IntrinsicTypeSpec)
-DEFINE_DUMP(semantics, DerivedTypeSpec)
-DEFINE_DUMP(semantics, DeclTypeSpec)
-} // namespace Fortran
-
-#endif
diff --git a/flang/tools/fir-opt/CMakeLists.txt b/flang/tools/fir-opt/CMakeLists.txt
index 4c6dbf7d9c8c37..3723ac5d7b37d2 100644
--- a/flang/tools/fir-opt/CMakeLists.txt
+++ b/flang/tools/fir-opt/CMakeLists.txt
@@ -1,3 +1,4 @@
+include_directories("${CMAKE_CURRENT_SOURCE_DIR}/../../../FortranRuntime/include")
add_flang_tool(fir-opt fir-opt.cpp)
llvm_update_compile_flags(fir-opt)
get_property(dialect_libs GLOBAL PROPERTY MLIR_DIALECT_LIBS)
@@ -19,6 +20,7 @@ target_link_libraries(fir-opt PRIVATE
FIRCodeGen
HLFIRDialect
HLFIRTransforms
+ FortranCommon # FIXME: Dependency of something else
FlangOpenMPTransforms
FIRAnalysis
${test_libs}
diff --git a/flang/tools/flang-driver/CMakeLists.txt b/flang/tools/flang-driver/CMakeLists.txt
index 9f33cdfe3fa90f..a2ad672b9d48c9 100644
--- a/flang/tools/flang-driver/CMakeLists.txt
+++ b/flang/tools/flang-driver/CMakeLists.txt
@@ -1,6 +1,9 @@
# Infrastructure to build flang driver entry point. Flang driver depends on
# LLVM libraries.
+message("include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../../FortranRuntime/include)")
+include_directories("${CMAKE_CURRENT_SOURCE_DIR}/../../../FortranRuntime/include")
+
# Set your project compile flags.
link_directories(${LLVM_LIBRARY_DIR})
diff --git a/flang/tools/tco/CMakeLists.txt b/flang/tools/tco/CMakeLists.txt
index 698a398547c773..f308fb6acbe98b 100644
--- a/flang/tools/tco/CMakeLists.txt
+++ b/flang/tools/tco/CMakeLists.txt
@@ -2,6 +2,7 @@ set(LLVM_LINK_COMPONENTS
Passes
)
+include_directories("${CMAKE_CURRENT_SOURCE_DIR}/../../../FortranRuntime/include")
add_flang_tool(tco tco.cpp)
llvm_update_compile_flags(tco)
get_property(dialect_libs GLOBAL PROPERTY MLIR_DIALECT_LIBS)
@@ -17,6 +18,7 @@ target_link_libraries(tco PRIVATE
FIRBuilder
HLFIRDialect
HLFIRTransforms
+ FortranCommon
FlangOpenMPTransforms
${dialect_libs}
${extension_libs}
diff --git a/flang/unittests/CMakeLists.txt b/flang/unittests/CMakeLists.txt
index 945067fed4f82d..f9953bd434d44e 100644
--- a/flang/unittests/CMakeLists.txt
+++ b/flang/unittests/CMakeLists.txt
@@ -1,40 +1,8 @@
-if (FLANG_EXPERIMENTAL_CUDA_RUNTIME)
- # If Fortran runtime is built as CUDA library, the linking
- # of targets that link FortranRuntime must be done
- # with CUDA_RESOLVE_DEVICE_SYMBOLS.
- # CUDA language must be enabled for CUDA_RESOLVE_DEVICE_SYMBOLS
- # to take effect.
- enable_language(CUDA)
-endif()
-
add_custom_target(FlangUnitTests)
set_target_properties(FlangUnitTests PROPERTIES FOLDER "Flang/Tests")
-function(add_flang_unittest_offload_properties target)
- # Set CUDA_RESOLVE_DEVICE_SYMBOLS.
- if (FLANG_EXPERIMENTAL_CUDA_RUNTIME)
- set_target_properties(${target}
- PROPERTIES CUDA_RESOLVE_DEVICE_SYMBOLS ON
- )
- endif()
- # Enable OpenMP offload during linking. We may need to replace
- # LINK_OPTIONS with COMPILE_OPTIONS when there are OpenMP offload
- # unittests.
- #
- # FIXME: replace 'native' in --offload-arch option with the list
- # of targets that Fortran Runtime was built for.
- # Common code must be moved from flang/runtime/CMakeLists.txt.
- if (NOT FLANG_EXPERIMENTAL_OMP_OFFLOAD_BUILD STREQUAL "off")
- set_target_properties(${target}
- PROPERTIES LINK_OPTIONS
- "-fopenmp;--offload-arch=native"
- )
- endif()
-endfunction()
-
function(add_flang_unittest test_dirname)
add_unittest(FlangUnitTests ${test_dirname} ${ARGN})
- add_flang_unittest_offload_properties(${test_dirname})
endfunction()
if (CXX_SUPPORTS_SUGGEST_OVERRIDE_FLAG)
@@ -67,13 +35,8 @@ function(add_flang_nongtest_unittest test_name)
if(NOT ARG_SLOW_TEST)
add_dependencies(FlangUnitTests ${test_name}${suffix})
endif()
-
- add_flang_unittest_offload_properties(${test_name}${suffix})
endfunction()
add_subdirectory(Optimizer)
-add_subdirectory(Common)
-add_subdirectory(Decimal)
add_subdirectory(Evaluate)
-add_subdirectory(Runtime)
add_subdirectory(Frontend)
diff --git a/flang/unittests/Common/CMakeLists.txt b/flang/unittests/Common/CMakeLists.txt
deleted file mode 100644
index bda02ed29a5efa..00000000000000
--- a/flang/unittests/Common/CMakeLists.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-add_flang_unittest(FlangCommonTests
- FastIntSetTest.cpp
-)
diff --git a/flang/unittests/Decimal/CMakeLists.txt b/flang/unittests/Decimal/CMakeLists.txt
deleted file mode 100644
index d301a9d3628c56..00000000000000
--- a/flang/unittests/Decimal/CMakeLists.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
-add_flang_nongtest_unittest(quick-sanity-test
- FortranDecimal
-)
-
-# This test is not run by default as it takes a long time to execute.
-add_flang_nongtest_unittest(thorough-test
- SLOW_TEST
- FortranDecimal
-)
diff --git a/flang/unittests/Evaluate/CMakeLists.txt b/flang/unittests/Evaluate/CMakeLists.txt
index 52eb385f4763fb..a7f763d7b17d85 100644
--- a/flang/unittests/Evaluate/CMakeLists.txt
+++ b/flang/unittests/Evaluate/CMakeLists.txt
@@ -1,7 +1,7 @@
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
add_library(FortranEvaluateTesting
- testing.cpp
- fp-testing.cpp
+ ${FORTRANRUNTIME_SOURCE_DIR}/lib/Testing/testing.cpp
+ ${FORTRANRUNTIME_SOURCE_DIR}/lib/Testing/fp-testing.cpp
)
set_target_properties(FortranEvaluateTesting PROPERTIES FOLDER "Flang/Tests")
if (LLVM_LINK_LLVM_DYLIB)
@@ -40,13 +40,12 @@ add_flang_nongtest_unittest(integer
)
add_flang_nongtest_unittest(intrinsics
+ FortranSupport
FortranCommon
FortranEvaluateTesting
FortranEvaluate
- FortranDecimal
FortranSemantics
FortranParser
- FortranRuntime
)
add_flang_nongtest_unittest(logical
@@ -64,25 +63,12 @@ set(LLVM_REQUIRES_RTTI ON)
add_flang_nongtest_unittest(real
FortranEvaluateTesting
FortranEvaluate
- FortranDecimal
+ FortranCommon
+ FortranSupport
FortranSemantics
)
llvm_update_compile_flags(real.test)
-add_flang_nongtest_unittest(reshape
- FortranEvaluateTesting
- FortranSemantics
- FortranEvaluate
- FortranRuntime
-)
-
-add_flang_nongtest_unittest(ISO-Fortran-binding
- FortranEvaluateTesting
- FortranEvaluate
- FortranSemantics
- FortranRuntime
-)
-
add_flang_nongtest_unittest(folding
FortranCommon
FortranEvaluateTesting
diff --git a/flang/unittests/Evaluate/bit-population-count.cpp b/flang/unittests/Evaluate/bit-population-count.cpp
index 24e721c14f94a7..0c9529a92e5724 100644
--- a/flang/unittests/Evaluate/bit-population-count.cpp
+++ b/flang/unittests/Evaluate/bit-population-count.cpp
@@ -1,5 +1,5 @@
#include "flang/Common/bit-population-count.h"
-#include "testing.h"
+#include "flang/Testing/testing.h"
using Fortran::common::BitPopulationCount;
using Fortran::common::Parity;
diff --git a/flang/unittests/Evaluate/expression.cpp b/flang/unittests/Evaluate/expression.cpp
index f03a6bc2a4e23c..6349997bafee48 100644
--- a/flang/unittests/Evaluate/expression.cpp
+++ b/flang/unittests/Evaluate/expression.cpp
@@ -1,5 +1,5 @@
#include "flang/Evaluate/expression.h"
-#include "testing.h"
+#include "flang/Testing/testing.h"
#include "flang/Evaluate/fold.h"
#include "flang/Evaluate/intrinsics.h"
#include "flang/Evaluate/target.h"
diff --git a/flang/unittests/Evaluate/folding.cpp b/flang/unittests/Evaluate/folding.cpp
index 4e8ff9754e4ccb..35df702ff20ea6 100644
--- a/flang/unittests/Evaluate/folding.cpp
+++ b/flang/unittests/Evaluate/folding.cpp
@@ -1,4 +1,4 @@
-#include "testing.h"
+#include "flang/Testing/testing.h"
#include "../../lib/Evaluate/host.h"
#include "flang/Evaluate/call.h"
#include "flang/Evaluate/expression.h"
diff --git a/flang/unittests/Evaluate/integer.cpp b/flang/unittests/Evaluate/integer.cpp
index 3eabb2434cce60..5ab22cc6443a7b 100644
--- a/flang/unittests/Evaluate/integer.cpp
+++ b/flang/unittests/Evaluate/integer.cpp
@@ -1,5 +1,5 @@
#include "flang/Evaluate/integer.h"
-#include "testing.h"
+#include "flang/Testing/testing.h"
#include <cstdio>
#include <string>
diff --git a/flang/unittests/Evaluate/intrinsics.cpp b/flang/unittests/Evaluate/intrinsics.cpp
index 86c471d2c62950..0baf01a4cb1b7e 100644
--- a/flang/unittests/Evaluate/intrinsics.cpp
+++ b/flang/unittests/Evaluate/intrinsics.cpp
@@ -1,5 +1,5 @@
#include "flang/Evaluate/intrinsics.h"
-#include "testing.h"
+#include "flang/Testing/testing.h"
#include "flang/Evaluate/common.h"
#include "flang/Evaluate/expression.h"
#include "flang/Evaluate/target.h"
diff --git a/flang/unittests/Evaluate/leading-zero-bit-count.cpp b/flang/unittests/Evaluate/leading-zero-bit-count.cpp
index 968946b69f27ea..25e2664e76df04 100644
--- a/flang/unittests/Evaluate/leading-zero-bit-count.cpp
+++ b/flang/unittests/Evaluate/leading-zero-bit-count.cpp
@@ -1,5 +1,5 @@
#include "flang/Common/leading-zero-bit-count.h"
-#include "testing.h"
+#include "flang/Testing/testing.h"
using Fortran::common::LeadingZeroBitCount;
diff --git a/flang/unittests/Evaluate/logical.cpp b/flang/unittests/Evaluate/logical.cpp
index d79aff84487123..ee568371eab86c 100644
--- a/flang/unittests/Evaluate/logical.cpp
+++ b/flang/unittests/Evaluate/logical.cpp
@@ -1,4 +1,4 @@
-#include "testing.h"
+#include "flang/Testing/testing.h"
#include "flang/Evaluate/type.h"
#include <cstdio>
diff --git a/flang/unittests/Evaluate/real.cpp b/flang/unittests/Evaluate/real.cpp
index ccbaf81f054cb5..ab1a178df22312 100644
--- a/flang/unittests/Evaluate/real.cpp
+++ b/flang/unittests/Evaluate/real.cpp
@@ -1,5 +1,5 @@
-#include "fp-testing.h"
-#include "testing.h"
+#include "flang/Testing/fp-testing.h"
+#include "flang/Testing/testing.h"
#include "flang/Evaluate/type.h"
#include "llvm/Support/raw_ostream.h"
#include <cmath>
diff --git a/flang/unittests/Evaluate/uint128.cpp b/flang/unittests/Evaluate/uint128.cpp
index f05c1c96a7e8b0..0b749abe1c080a 100644
--- a/flang/unittests/Evaluate/uint128.cpp
+++ b/flang/unittests/Evaluate/uint128.cpp
@@ -1,6 +1,6 @@
#define AVOID_NATIVE_UINT128_T 1
#include "flang/Common/uint128.h"
-#include "testing.h"
+#include "flang/Testing/testing.h"
#include "llvm/Support/raw_ostream.h"
#include <cinttypes>
diff --git a/flang/unittests/Runtime/CUDA/CMakeLists.txt b/flang/unittests/Runtime/CUDA/CMakeLists.txt
deleted file mode 100644
index ed0caece3d15db..00000000000000
--- a/flang/unittests/Runtime/CUDA/CMakeLists.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-if (FLANG_CUF_RUNTIME)
-
-add_flang_unittest(FlangCufRuntimeTests
- AllocatorCUF.cpp
-)
-
-target_link_libraries(FlangCufRuntimeTests
- PRIVATE
- CufRuntime_cuda_${CUDAToolkit_VERSION_MAJOR}
- FortranRuntime
-)
-
-target_include_directories(FlangCufRuntimeTests PRIVATE ${CUDAToolkit_INCLUDE_DIRS})
-
-endif()
diff --git a/lld/COFF/MinGW.cpp b/lld/COFF/MinGW.cpp
index 29c01da9e28f6d..e4e6a3bb52410f 100644
--- a/lld/COFF/MinGW.cpp
+++ b/lld/COFF/MinGW.cpp
@@ -51,7 +51,11 @@ AutoExporter::AutoExporter(
"libc++",
"libc++abi",
"libFortranRuntime",
- "libFortranDecimal",
+ "libFortranFloat128Math",
+ "libFortranRuntime.static",
+ "libFortranRuntime.dynamic",
+ "libFortranRuntime.static_dbg",
+ "libFortranRuntime.dynamic_dbg",
"libunwind",
"libmsvcrt",
"libucrtbase",
diff --git a/llvm/CMakeLists.txt b/llvm/CMakeLists.txt
index c637febce1c1fe..70f6f50ee5e11a 100644
--- a/llvm/CMakeLists.txt
+++ b/llvm/CMakeLists.txt
@@ -149,7 +149,7 @@ endif()
# As we migrate runtimes to using the bootstrapping build, the set of default runtimes
# should grow as we remove those runtimes from LLVM_ENABLE_PROJECTS above.
set(LLVM_DEFAULT_RUNTIMES "libcxx;libcxxabi;libunwind")
-set(LLVM_SUPPORTED_RUNTIMES "libc;libunwind;libcxxabi;pstl;libcxx;compiler-rt;openmp;llvm-libgcc;offload")
+set(LLVM_SUPPORTED_RUNTIMES "libc;libunwind;libcxxabi;pstl;libcxx;compiler-rt;openmp;llvm-libgcc;offload;FortranRuntime")
set(LLVM_ENABLE_RUNTIMES "" CACHE STRING
"Semicolon-separated list of runtimes to build, or \"all\" (${LLVM_DEFAULT_RUNTIMES}). Supported runtimes are ${LLVM_SUPPORTED_RUNTIMES}.")
if(LLVM_ENABLE_RUNTIMES STREQUAL "all")
diff --git a/llvm/cmake/modules/LLVMExternalProjectUtils.cmake b/llvm/cmake/modules/LLVMExternalProjectUtils.cmake
index f7e1165bc4b947..f49ce19b3f845c 100644
--- a/llvm/cmake/modules/LLVMExternalProjectUtils.cmake
+++ b/llvm/cmake/modules/LLVMExternalProjectUtils.cmake
@@ -34,6 +34,8 @@ endfunction()
# llvm_ExternalProject_Add(name source_dir ...
+# ENABLE_FORTRAN
+# External project requires the Flang compiler
# USE_TOOLCHAIN
# Use just-built tools (see TOOLCHAIN_TOOLS)
# EXCLUDE_FROM_ALL
@@ -61,7 +63,7 @@ endfunction()
# )
function(llvm_ExternalProject_Add name source_dir)
cmake_parse_arguments(ARG
- "USE_TOOLCHAIN;EXCLUDE_FROM_ALL;NO_INSTALL;ALWAYS_CLEAN"
+ "ENABLE_FORTRAN;USE_TOOLCHAIN;EXCLUDE_FROM_ALL;NO_INSTALL;ALWAYS_CLEAN"
"SOURCE_DIR;FOLDER"
"CMAKE_ARGS;TOOLCHAIN_TOOLS;RUNTIME_LIBRARIES;DEPENDS;EXTRA_TARGETS;PASSTHROUGH_PREFIXES;STRIP_TOOL;TARGET_TRIPLE"
${ARGN})
@@ -89,6 +91,9 @@ function(llvm_ExternalProject_Add name source_dir)
if(NOT ARG_TOOLCHAIN_TOOLS)
set(ARG_TOOLCHAIN_TOOLS clang)
+ if (ARG_ENABLE_FORTRAN)
+ list(APPEND ARG_TOOLCHAIN_TOOLS flang-new)
+ endif ()
# AIX 64-bit XCOFF and big AR format is not yet supported in some of these tools.
if(NOT _cmake_system_name STREQUAL AIX)
list(APPEND ARG_TOOLCHAIN_TOOLS lld llvm-ar llvm-ranlib llvm-nm llvm-objdump)
@@ -139,6 +144,10 @@ function(llvm_ExternalProject_Add name source_dir)
set(CLANG_IN_TOOLCHAIN On)
endif()
+ if(flang-new IN_LIST TOOLCHAIN_TOOLS)
+ set(FLANG_IN_TOOLCHAIN On)
+ endif()
+
if(RUNTIME_LIBRARIES AND CLANG_IN_TOOLCHAIN)
list(APPEND TOOLCHAIN_BINS ${RUNTIME_LIBRARIES})
endif()
@@ -221,6 +230,9 @@ function(llvm_ExternalProject_Add name source_dir)
-DCMAKE_ASM_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang${CMAKE_EXECUTABLE_SUFFIX})
endif()
endif()
+ if(FLANG_IN_TOOLCHAIN)
+ list(APPEND compiler_args -DCMAKE_Fortran_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/flang-new${CMAKE_EXECUTABLE_SUFFIX})
+ endif()
if(lld IN_LIST TOOLCHAIN_TOOLS)
if(is_msvc_target)
list(APPEND compiler_args -DCMAKE_LINKER=${LLVM_RUNTIME_OUTPUT_INTDIR}/lld-link${CMAKE_EXECUTABLE_SUFFIX})
@@ -304,6 +316,7 @@ function(llvm_ExternalProject_Add name source_dir)
set(compiler_args -DCMAKE_ASM_COMPILER=${CMAKE_ASM_COMPILER}
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
+ -DCMAKE_Fortran_COMPILER=${CMAKE_Fortran_COMPILER}
-DCMAKE_LINKER=${CMAKE_LINKER}
-DCMAKE_AR=${CMAKE_AR}
-DCMAKE_RANLIB=${CMAKE_RANLIB}
@@ -353,6 +366,7 @@ function(llvm_ExternalProject_Add name source_dir)
if(ARG_TARGET_TRIPLE)
list(APPEND compiler_args -DCMAKE_C_COMPILER_TARGET=${ARG_TARGET_TRIPLE})
list(APPEND compiler_args -DCMAKE_CXX_COMPILER_TARGET=${ARG_TARGET_TRIPLE})
+ list(APPEND compiler_args -DCMAKE_Fortran_COMPILER_TARGET=${ARG_TARGET_TRIPLE})
list(APPEND compiler_args -DCMAKE_ASM_COMPILER_TARGET=${ARG_TARGET_TRIPLE})
endif()
diff --git a/llvm/projects/CMakeLists.txt b/llvm/projects/CMakeLists.txt
index 08f2fa522420b0..fab28c9df6d384 100644
--- a/llvm/projects/CMakeLists.txt
+++ b/llvm/projects/CMakeLists.txt
@@ -11,7 +11,8 @@ foreach(entry ${entries})
(NOT ${entry} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}/libunwind) AND
(NOT ${entry} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}/test-suite) AND
(NOT ${entry} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}/openmp) AND
- (NOT ${entry} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}/cross-project-tests))
+ (NOT ${entry} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}/cross-project-tests) AND
+ (NOT ${entry} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}/FortranRuntime))
get_filename_component(entry_name "${entry}" NAME)
add_llvm_external_project(${entry_name})
endif()
@@ -37,6 +38,8 @@ if(${LLVM_BUILD_RUNTIME})
if(NOT LLVM_BUILD_EXTERNAL_COMPILER_RT)
add_llvm_external_project(compiler-rt)
endif()
+
+ add_llvm_external_project(FortranRuntime)
endif()
add_llvm_external_project(dragonegg)
diff --git a/llvm/runtimes/CMakeLists.txt b/llvm/runtimes/CMakeLists.txt
index 187c44fb9d04d2..e4389b120f49df 100644
--- a/llvm/runtimes/CMakeLists.txt
+++ b/llvm/runtimes/CMakeLists.txt
@@ -96,6 +96,7 @@ function(builtin_default_target compiler_rt_path)
-DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=${LLVM_ENABLE_PER_TARGET_RUNTIME_DIR}
-DLLVM_CMAKE_DIR=${CMAKE_BINARY_DIR}
-DCMAKE_C_COMPILER_WORKS=ON
+ -DCMAKE_Fortran_COMPILER_WORKS=ON
-DCMAKE_ASM_COMPILER_WORKS=ON
${COMMON_CMAKE_ARGS}
${BUILTINS_CMAKE_ARGS}
@@ -136,6 +137,7 @@ function(builtin_register_target compiler_rt_path name)
-DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON
-DLLVM_CMAKE_DIR=${CMAKE_BINARY_DIR}
-DCMAKE_C_COMPILER_WORKS=ON
+ -DCMAKE_Fortran_COMPILER_WORKS=ON
-DCMAKE_ASM_COMPILER_WORKS=ON
-DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON
${COMMON_CMAKE_ARGS}
@@ -261,6 +263,7 @@ function(runtime_default_target)
llvm_ExternalProject_Add(runtimes
${CMAKE_CURRENT_SOURCE_DIR}/../../runtimes
DEPENDS ${ARG_DEPENDS}
+ ${enable_fortran}
# Builtins were built separately above
CMAKE_ARGS -DCOMPILER_RT_BUILD_BUILTINS=Off
-DLLVM_INCLUDE_TESTS=${LLVM_INCLUDE_TESTS}
@@ -270,6 +273,7 @@ function(runtime_default_target)
-DLLVM_BUILD_TOOLS=${LLVM_BUILD_TOOLS}
-DCMAKE_C_COMPILER_WORKS=ON
-DCMAKE_CXX_COMPILER_WORKS=ON
+ -DCMAKE_Fortran_COMPILER_WORKS=ON
-DCMAKE_ASM_COMPILER_WORKS=ON
${COMMON_CMAKE_ARGS}
${RUNTIMES_CMAKE_ARGS}
@@ -396,6 +400,7 @@ function(runtime_register_target name)
llvm_ExternalProject_Add(runtimes-${name}
${CMAKE_CURRENT_SOURCE_DIR}/../../runtimes
DEPENDS ${ARG_DEPENDS}
+ ${enable_fortran}
# Builtins were built separately above
CMAKE_ARGS -DCOMPILER_RT_BUILD_BUILTINS=OFF
-DLLVM_INCLUDE_TESTS=${LLVM_INCLUDE_TESTS}
@@ -403,6 +408,7 @@ function(runtime_register_target name)
-DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=${LLVM_ENABLE_PER_TARGET_RUNTIME_DIR}
-DCMAKE_C_COMPILER_WORKS=ON
-DCMAKE_CXX_COMPILER_WORKS=ON
+ -DCMAKE_Fortran_COMPILER_WORKS=ON
-DCMAKE_ASM_COMPILER_WORKS=ON
-DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON
-DLLVM_RUNTIMES_TARGET=${name}
@@ -462,10 +468,12 @@ if(build_runtimes)
# together in a single CMake invocation.
set(extra_deps "")
set(extra_cmake_args "")
+ set(enable_fortran "")
if(LLVM_INCLUDE_TESTS)
foreach(dep FileCheck
clang
+ flang-new
count
lld
lli
@@ -502,18 +510,17 @@ if(build_runtimes)
list(APPEND extra_cmake_args "-DCMAKE_PROGRAM_PATH=${CMAKE_PROGRAM_PATH}")
endif()
+ # FIXME: Go away
if("openmp" IN_LIST LLVM_ENABLE_RUNTIMES)
- if (${LLVM_TOOL_FLANG_BUILD})
- message(STATUS "Configuring build of omp_lib.mod and omp_lib_kinds.mod via flang-new")
- set(LIBOMP_FORTRAN_MODULES_COMPILER "${CMAKE_BINARY_DIR}/bin/flang-new")
- set(LIBOMP_MODULES_INSTALL_PATH "${CMAKE_INSTALL_INCLUDEDIR}/flang")
- # TODO: This is a workaround until flang becomes a first-class project
- # in llvm/CMakeList.txt. Until then, this line ensures that flang-new is
- # built before "openmp" is built as a runtime project. Besides "flang-new"
- # to build the compiler, we also need to add "module_files" to make sure
- # that all .mod files are also properly build.
- list(APPEND extra_deps "flang-new" "module_files")
- endif()
+ #if (LLVM_TOOL_FLANG_BUILD AND "FortranRuntime" IN_LIST LLVM_ENABLE_PROJECTS)
+ # message(STATUS "Configuring build of omp_lib.mod and omp_lib_kinds.mod via flang-new")
+ # set(LIBOMP_FORTRAN_MODULES_COMPILER "${CMAKE_BINARY_DIR}/bin/flang-new${CMAKE_EXECUTABLE_SUFFIX}")
+ # #TODO: set(LIBOMP_MODULES_INSTALL_PATH "${CMAKE_INSTALL_INCLUDEDIR}/flang")
+ # list(APPEND extra_deps "flang-new")
+ #endif()
+ if (LLVM_TOOL_FLANG_BUILD AND "FortranRuntime" IN_LIST LLVM_ENABLE_PROJECTS)
+ set(enable_fortran ENABLE_FORTRAN)
+ endif ()
foreach(dep opt llvm-link llvm-extract clang clang-offload-packager)
if(TARGET ${dep})
list(APPEND extra_deps ${dep})
@@ -563,6 +570,9 @@ if(build_runtimes)
if(LLVM_LIBC_FULL_BUILD)
list(APPEND extra_cmake_args "-DLLVM_LIBC_FULL_BUILD=ON")
endif()
+ if("FortranRuntime" IN_LIST LLVM_ENABLE_RUNTIMES)
+ set(enable_fortran ENABLE_FORTRAN)
+ endif ()
if(NOT LLVM_RUNTIME_TARGETS)
runtime_default_target(
diff --git a/runtimes/CMakeLists.txt b/runtimes/CMakeLists.txt
index 830165c799c2ab..d77b4da6e00e34 100644
--- a/runtimes/CMakeLists.txt
+++ b/runtimes/CMakeLists.txt
@@ -23,7 +23,7 @@ list(INSERT CMAKE_MODULE_PATH 0
# We order libraries to mirror roughly how they are layered, except that compiler-rt can depend
# on libc++, so we put it after.
-set(LLVM_DEFAULT_RUNTIMES "libc;libunwind;libcxxabi;pstl;libcxx;compiler-rt;openmp;offload")
+set(LLVM_DEFAULT_RUNTIMES "libc;libunwind;libcxxabi;pstl;libcxx;compiler-rt;openmp;offload;FortranRuntime")
set(LLVM_SUPPORTED_RUNTIMES "${LLVM_DEFAULT_RUNTIMES};llvm-libgcc")
set(LLVM_ENABLE_RUNTIMES "" CACHE STRING
"Semicolon-separated list of runtimes to build, or \"all\" (${LLVM_DEFAULT_RUNTIMES}). Supported runtimes are ${LLVM_SUPPORTED_RUNTIMES}.")
@@ -49,6 +49,7 @@ function(runtime_register_component name)
set_property(GLOBAL APPEND PROPERTY SUB_COMPONENTS ${name})
endfunction()
+message("LLVM_BINARY_DIR: ${LLVM_BINARY_DIR}")
find_package(LLVM PATHS "${LLVM_BINARY_DIR}" NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
find_package(Clang PATHS "${LLVM_BINARY_DIR}" NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
>From 7c697c49dc220449676a6f641a7624106d1df709 Mon Sep 17 00:00:00 2001
From: Michael Kruse <llvm-project at meinersbur.de>
Date: Fri, 27 Sep 2024 18:58:16 +0200
Subject: [PATCH 02/32] Cleanup + reduce patch size
---
.../include/flang/Common/Fortran-consts.h | 8 +-
.../flang/Common/ISO_Fortran_binding.h | 8 +-
.../Common/ISO_Fortran_binding_wrapper.h | 8 +-
.../include/flang/Common/api-attrs.h | 6 +-
.../flang/Common/binary-floating-point.h | 6 +-
.../flang/Common/bit-population-count.h | 2 +-
.../include/flang/Common/constexpr-bitset.h | 2 +-
FortranRuntime/include/flang/Common/decimal.h | 6 +-
.../include/flang/Common/enum-class.h | 2 +-
.../include/flang/Common/enum-set.h | 2 +-
.../include/flang/Common/fast-int-set.h | 2 +-
FortranRuntime/include/flang/Common/format.h | 2 +-
FortranRuntime/include/flang/Common/idioms.h | 2 +-
.../flang/Common/leading-zero-bit-count.h | 2 +-
.../include/flang/Common/optional.h | 6 +-
FortranRuntime/include/flang/Common/real.h | 2 +-
.../include/flang/Common/reference-wrapper.h | 6 +-
.../include/flang/Common/restorer.h | 4 +-
.../include/flang/Common/target-rounding.h | 7 +-
FortranRuntime/include/flang/Common/uint128.h | 4 +-
FortranRuntime/include/flang/Common/variant.h | 6 +-
FortranRuntime/include/flang/Common/visit.h | 4 +-
.../include/flang/Common/windows-include.h | 2 +-
.../include/flang/Runtime/CUDA/allocator.h | 2 +-
.../include/flang/Runtime/CUDA/descriptor.h | 2 +-
.../include/flang/Runtime/allocatable.h | 2 +-
.../flang/Runtime/allocator-registry.h | 6 +-
.../include/flang/Runtime/array-constructor.h | 6 +-
FortranRuntime/include/flang/Runtime/assign.h | 2 +-
.../include/flang/Runtime/c-or-cpp.h | 2 +-
.../include/flang/Runtime/character.h | 2 +-
.../include/flang/Runtime/command.h | 2 +-
.../include/flang/Runtime/cpp-type.h | 2 +-
.../include/flang/Runtime/derived-api.h | 2 +-
.../include/flang/Runtime/descriptor.h | 2 +-
.../include/flang/Runtime/entry-names.h | 6 +-
.../include/flang/Runtime/exceptions.h | 2 +-
.../include/flang/Runtime/execute.h | 2 +-
.../include/flang/Runtime/extensions.h | 2 +-
.../flang/Runtime/freestanding-tools.h | 2 +-
.../include/flang/Runtime/inquiry.h | 2 +-
FortranRuntime/include/flang/Runtime/io-api.h | 2 +-
FortranRuntime/include/flang/Runtime/iostat.h | 2 +-
FortranRuntime/include/flang/Runtime/main.h | 2 +-
.../include/flang/Runtime/matmul-transpose.h | 2 +-
FortranRuntime/include/flang/Runtime/matmul.h | 2 +-
FortranRuntime/include/flang/Runtime/memory.h | 2 +-
.../include/flang/Runtime/misc-intrinsic.h | 2 +-
.../include/flang/Runtime/numeric.h | 2 +-
.../include/flang/Runtime/pointer.h | 2 +-
FortranRuntime/include/flang/Runtime/ragged.h | 2 +-
FortranRuntime/include/flang/Runtime/random.h | 5 +
FortranRuntime/include/flang/Runtime/reduce.h | 2 +-
.../include/flang/Runtime/reduction.h | 2 +-
FortranRuntime/include/flang/Runtime/stop.h | 2 +-
.../include/flang/Runtime/support.h | 2 +-
.../include/flang/Runtime/temporary-stack.h | 2 +-
.../include/flang/Runtime/time-intrinsic.h | 2 +-
.../include/flang/Runtime/transformational.h | 2 +-
.../include/flang/Runtime/type-code.h | 4 +-
.../include/flang/Testing/fp-testing.h | 8 +-
.../include/flang/Testing/testing.h | 6 +-
.../lib/Common/big-radix-floating-point.h | 10 +-
.../lib/Common/decimal-to-binary.cpp | 4 +-
FortranRuntime/lib/Runtime/CMakeLists.txt | 20 -
.../lib/Runtime/CUDA/CMakeLists.txt | 2 +-
FortranRuntime/lib/Runtime/CUDA/allocator.cpp | 2 +-
.../lib/Runtime/Float128Math/CMakeLists.txt | 2 +-
.../lib/Runtime/Float128Math/math-entries.h | 6 +-
.../Float128Math/numeric-template-specs.h | 2 +-
.../lib/Runtime/ISO_Fortran_binding.cpp | 2 +-
FortranRuntime/lib/Runtime/ISO_Fortran_util.h | 4 +-
FortranRuntime/lib/Runtime/allocatable.cpp | 6 +-
.../lib/Runtime/array-constructor.cpp | 6 +-
FortranRuntime/lib/Runtime/assign-impl.h | 2 +-
FortranRuntime/lib/Runtime/assign.cpp | 2 +-
FortranRuntime/lib/Runtime/buffer.h | 4 +-
FortranRuntime/lib/Runtime/character.cpp | 4 +-
FortranRuntime/lib/Runtime/command.cpp | 2 +-
.../lib/Runtime/complex-reduction.h | 2 +-
FortranRuntime/lib/Runtime/connection.h | 8 +-
FortranRuntime/lib/Runtime/copy.cpp | 4 +-
FortranRuntime/lib/Runtime/copy.h | 2 +-
FortranRuntime/lib/Runtime/derived-api.cpp | 2 +-
FortranRuntime/lib/Runtime/derived.cpp | 2 +-
FortranRuntime/lib/Runtime/derived.h | 2 +-
FortranRuntime/lib/Runtime/descriptor-io.h | 10 +-
FortranRuntime/lib/Runtime/descriptor.cpp | 2 +-
FortranRuntime/lib/Runtime/dot-product.cpp | 6 +-
FortranRuntime/lib/Runtime/edit-input.cpp | 4 +-
FortranRuntime/lib/Runtime/edit-input.h | 4 +-
FortranRuntime/lib/Runtime/edit-output.cpp | 2 +-
FortranRuntime/lib/Runtime/edit-output.h | 6 +-
FortranRuntime/lib/Runtime/emit-encoded.h | 2 +-
FortranRuntime/lib/Runtime/environment.h | 4 +-
FortranRuntime/lib/Runtime/execute.cpp | 2 +-
FortranRuntime/lib/Runtime/extensions.cpp | 4 +-
FortranRuntime/lib/Runtime/extrema.cpp | 2 +-
FortranRuntime/lib/Runtime/file.cpp | 2 +-
FortranRuntime/lib/Runtime/file.h | 4 +-
FortranRuntime/lib/Runtime/findloc.cpp | 2 +-
.../lib/Runtime/format-implementation.h | 8 +-
FortranRuntime/lib/Runtime/format.h | 6 +-
FortranRuntime/lib/Runtime/inquiry.cpp | 2 +-
FortranRuntime/lib/Runtime/internal-unit.cpp | 2 +-
FortranRuntime/lib/Runtime/internal-unit.h | 6 +-
FortranRuntime/lib/Runtime/io-api-common.h | 12 +-
FortranRuntime/lib/Runtime/io-api-minimal.cpp | 2 +-
FortranRuntime/lib/Runtime/io-api.cpp | 6 +-
FortranRuntime/lib/Runtime/io-error.cpp | 2 +-
FortranRuntime/lib/Runtime/io-error.h | 4 +-
FortranRuntime/lib/Runtime/io-stmt.cpp | 2 +-
FortranRuntime/lib/Runtime/io-stmt.h | 8 +-
FortranRuntime/lib/Runtime/lock.h | 2 +-
.../lib/Runtime/matmul-transpose.cpp | 4 +-
FortranRuntime/lib/Runtime/matmul.cpp | 4 +-
FortranRuntime/lib/Runtime/memory.cpp | 2 +-
FortranRuntime/lib/Runtime/misc-intrinsic.cpp | 4 +-
FortranRuntime/lib/Runtime/namelist.cpp | 2 +-
FortranRuntime/lib/Runtime/namelist.h | 4 +-
FortranRuntime/lib/Runtime/non-tbp-dio.h | 2 +-
.../lib/Runtime/numeric-templates.h | 6 +-
FortranRuntime/lib/Runtime/numeric.cpp | 2 +-
FortranRuntime/lib/Runtime/product.cpp | 2 +-
FortranRuntime/lib/Runtime/random-templates.h | 6 +-
FortranRuntime/lib/Runtime/random.cpp | 6 +-
FortranRuntime/lib/Runtime/reduce.cpp | 2 +-
.../lib/Runtime/reduction-templates.h | 6 +-
FortranRuntime/lib/Runtime/reduction.cpp | 2 +-
FortranRuntime/lib/Runtime/stack.h | 8 +-
FortranRuntime/lib/Runtime/stat.cpp | 2 +-
FortranRuntime/lib/Runtime/stat.h | 4 +-
FortranRuntime/lib/Runtime/sum.cpp | 2 +-
FortranRuntime/lib/Runtime/support.cpp | 2 +-
.../lib/Runtime/temporary-stack.cpp | 2 +-
FortranRuntime/lib/Runtime/terminator.h | 2 +-
FortranRuntime/lib/Runtime/time-intrinsic.cpp | 4 +-
FortranRuntime/lib/Runtime/tools.h | 6 +-
.../lib/Runtime/transformational.cpp | 4 +-
FortranRuntime/lib/Runtime/type-info.h | 4 +-
FortranRuntime/lib/Runtime/unit-map.h | 6 +-
FortranRuntime/lib/Runtime/unit.h | 12 +-
FortranRuntime/lib/Runtime/utf.h | 2 +-
FortranRuntime/lib/Testing/fp-testing.cpp | 8 -
.../unittests/Common/FastIntSetTest.cpp | 2 +-
.../Evaluate/ISO-Fortran-binding.cpp | 2 +-
FortranRuntime/unittests/Evaluate/reshape.cpp | 2 +-
.../unittests/Runtime/AccessTest.cpp | 2 +-
.../unittests/Runtime/Allocatable.cpp | 2 +-
.../unittests/Runtime/ArrayConstructor.cpp | 4 +-
.../unittests/Runtime/CUDA/AllocatorCUF.cpp | 4 +-
.../unittests/Runtime/CharacterTest.cpp | 2 +-
.../unittests/Runtime/CommandTest.cpp | 4 +-
FortranRuntime/unittests/Runtime/Complex.cpp | 2 +-
.../unittests/Runtime/CrashHandlerFixture.h | 6 +-
FortranRuntime/unittests/Runtime/Derived.cpp | 4 +-
.../unittests/Runtime/ExternalIOTest.cpp | 2 +-
FortranRuntime/unittests/Runtime/Inquiry.cpp | 4 +-
.../unittests/Runtime/ListInputTest.cpp | 2 +-
FortranRuntime/unittests/Runtime/Matmul.cpp | 4 +-
.../unittests/Runtime/MatmulTranspose.cpp | 4 +-
.../unittests/Runtime/MiscIntrinsic.cpp | 4 +-
FortranRuntime/unittests/Runtime/Namelist.cpp | 2 +-
FortranRuntime/unittests/Runtime/Numeric.cpp | 2 +-
FortranRuntime/unittests/Runtime/Pointer.cpp | 4 +-
FortranRuntime/unittests/Runtime/Random.cpp | 2 +-
.../unittests/Runtime/Reduction.cpp | 4 +-
.../unittests/Runtime/RuntimeCrashTest.cpp | 4 +-
FortranRuntime/unittests/Runtime/Stop.cpp | 2 +-
FortranRuntime/unittests/Runtime/Support.cpp | 4 +-
.../unittests/Runtime/TemporaryStack.cpp | 4 +-
FortranRuntime/unittests/Runtime/Time.cpp | 2 +-
.../unittests/Runtime/Transformational.cpp | 4 +-
FortranRuntime/unittests/Runtime/tools.h | 4 +-
flang/CMakeLists.txt | 2 +
flang/include/flang/Evaluate/call.h | 4 +-
.../include/flang/Evaluate/characteristics.h | 6 +-
flang/include/flang/Evaluate/common.h | 16 +-
flang/include/flang/Evaluate/expression.h | 4 +-
flang/include/flang/Evaluate/intrinsics.h | 2 +-
flang/include/flang/Evaluate/shape.h | 2 +-
flang/include/flang/Evaluate/target.h | 2 +-
flang/include/flang/Evaluate/tools.h | 4 +-
flang/include/flang/Evaluate/traverse.h | 2 +-
flang/include/flang/Evaluate/type.h | 4 +-
flang/include/flang/Evaluate/variable.h | 2 +-
.../include/flang/Frontend/FrontendOptions.h | 2 +-
flang/include/flang/Lower/AbstractConverter.h | 2 +-
flang/include/flang/Lower/Bridge.h | 2 +-
flang/include/flang/Lower/CallInterface.h | 2 +-
flang/include/flang/Lower/ConvertType.h | 2 +-
flang/include/flang/Lower/PFTBuilder.h | 4 +-
flang/include/flang/Lower/Support/Utils.h | 2 +-
flang/include/flang/Lower/SymbolMap.h | 2 +-
.../flang/Optimizer/Builder/FIRBuilder.h | 2 +-
.../Optimizer/Builder/PPCIntrinsicCall.h | 2 +-
.../Optimizer/Builder/Runtime/RTBuilder.h | 2 +-
flang/include/flang/Optimizer/Support/Utils.h | 2 +-
flang/include/flang/Parser/dump-parse-tree.h | 2 +-
flang/include/flang/Parser/message.h | 2 +-
flang/include/flang/Parser/parse-state.h | 2 +-
flang/include/flang/Parser/parse-tree.h | 2 +-
flang/include/flang/Parser/parsing.h | 2 +-
flang/include/flang/Parser/user-state.h | 2 +-
flang/include/flang/Semantics/expression.h | 4 +-
.../flang/Semantics/runtime-type-info.h | 2 +-
flang/include/flang/Semantics/scope.h | 4 +-
flang/include/flang/Semantics/semantics.h | 2 +-
flang/include/flang/Semantics/symbol.h | 4 +-
flang/include/flang/Semantics/tools.h | 2 +-
flang/include/flang/Semantics/type.h | 2 +-
.../include/flang/Support/Fortran-features.h | 2 +-
flang/include/flang/Support/Fortran.h | 16 +-
flang/include/flang/Support/template.h | 2 +-
flang/include/flang/Tools/CrossToolHelpers.h | 2 +-
flang/lib/Common/CMakeLists.txt | 8 -
flang/lib/Evaluate/call.cpp | 2 +-
flang/lib/Evaluate/characteristics.cpp | 2 +-
flang/lib/Evaluate/common.cpp | 1 -
flang/lib/Evaluate/fold-implementation.h | 6 +-
flang/lib/Evaluate/formatting.cpp | 2 +-
flang/lib/Evaluate/intrinsics-library.cpp | 2 +-
flang/lib/Evaluate/intrinsics.cpp | 2 +-
flang/lib/Evaluate/real.cpp | 2 +-
flang/lib/Evaluate/shape.cpp | 2 +-
flang/lib/Evaluate/target.cpp | 2 +-
flang/lib/Frontend/CompilerInstance.cpp | 2 +-
flang/lib/Frontend/CompilerInvocation.cpp | 6 +-
flang/lib/Frontend/FrontendActions.cpp | 2 +-
flang/lib/Lower/Bridge.cpp | 2 +-
flang/lib/Lower/CallInterface.cpp | 2 +-
flang/lib/Lower/ConvertExpr.cpp | 4 +-
flang/lib/Lower/Mangler.cpp | 2 +-
flang/lib/Optimizer/Builder/IntrinsicCall.cpp | 8 +-
flang/lib/Optimizer/CodeGen/TypeConverter.cpp | 2 +-
.../lib/Optimizer/Transforms/AddDebugInfo.cpp | 2 +-
.../Transforms/AssumedRankOpConversion.cpp | 2 +-
.../Optimizer/Transforms/CufOpConversion.cpp | 2 +-
.../Transforms/ExternalNameConversion.cpp | 2 +-
.../Transforms/SimplifyIntrinsics.cpp | 2 +-
.../lib/Optimizer/Transforms/StackReclaim.cpp | 2 +-
flang/lib/Parser/basic-parsers.h | 4 +-
flang/lib/Parser/parse-tree.cpp | 2 +-
flang/lib/Parser/prescan.h | 2 +-
flang/lib/Parser/unparse.cpp | 4 +-
flang/lib/Semantics/assignment.h | 2 +-
flang/lib/Semantics/check-case.cpp | 4 +-
flang/lib/Semantics/check-coarray.cpp | 2 +-
flang/lib/Semantics/check-cuda.cpp | 2 +-
flang/lib/Semantics/check-data.h | 2 +-
flang/lib/Semantics/check-do-forall.cpp | 2 +-
flang/lib/Semantics/check-return.cpp | 2 +-
flang/lib/Semantics/check-select-rank.cpp | 2 +-
flang/lib/Semantics/check-select-type.cpp | 2 +-
flang/lib/Semantics/check-stop.cpp | 2 +-
flang/lib/Semantics/data-to-inits.h | 4 +-
flang/lib/Semantics/expression.cpp | 2 +-
flang/lib/Semantics/pointer-assignment.cpp | 2 +-
flang/lib/Semantics/resolve-labels.cpp | 2 +-
flang/lib/Semantics/resolve-names-utils.cpp | 6 +-
flang/lib/Semantics/resolve-names.cpp | 6 +-
flang/lib/Semantics/rewrite-parse-tree.cpp | 2 +-
flang/lib/Semantics/semantics.cpp | 2 +-
flang/lib/Semantics/tools.cpp | 4 +-
flang/lib/Support/Fortran-features.cpp | 2 +-
flang/lib/Support/big-radix-floating-point.h | 396 ------------------
flang/test/CMakeLists.txt | 1 -
flang/tools/bbc/bbc.cpp | 8 +-
flang/tools/f18-parse-demo/f18-parse-demo.cpp | 4 +-
flang/unittests/Evaluate/expression.cpp | 2 +-
flang/unittests/Evaluate/folding.cpp | 2 +-
flang/unittests/Evaluate/intrinsics.cpp | 2 +-
flang/unittests/Evaluate/logical.cpp | 2 +-
flang/unittests/Evaluate/real.cpp | 2 +-
lld/COFF/MinGW.cpp | 1 -
llvm/projects/CMakeLists.txt | 1 -
llvm/runtimes/CMakeLists.txt | 7 -
runtimes/CMakeLists.txt | 1 -
278 files changed, 441 insertions(+), 897 deletions(-)
delete mode 100644 flang/lib/Support/big-radix-floating-point.h
diff --git a/FortranRuntime/include/flang/Common/Fortran-consts.h b/FortranRuntime/include/flang/Common/Fortran-consts.h
index 3156c6c50c3b9a..eedcdae335c400 100644
--- a/FortranRuntime/include/flang/Common/Fortran-consts.h
+++ b/FortranRuntime/include/flang/Common/Fortran-consts.h
@@ -9,9 +9,6 @@
#ifndef FORTRAN_COMMON_FORTRAN_CONSTS_H_
#define FORTRAN_COMMON_FORTRAN_CONSTS_H_
-// Fortran language concepts that are used in many phases are defined
-// once here to avoid redundancy and needless translation.
-
#include "flang/Common/enum-class.h"
#include <cstdint>
@@ -21,7 +18,6 @@ namespace Fortran::common {
ENUM_CLASS(TypeCategory, Integer, Real, Complex, Character, Logical, Derived)
ENUM_CLASS(VectorElementCategory, Integer, Unsigned, Real)
-
ENUM_CLASS(IoStmtKind, None, Backspace, Close, Endfile, Flush, Inquire, Open,
Print, Read, Rewind, Wait, Write)
@@ -32,7 +28,6 @@ ENUM_CLASS(
// Fortran arrays may have up to 15 dimensions (See Fortran 2018 section 5.4.6).
static constexpr int maxRank{15};
-
// Floating-point rounding modes; these are packed into a byte to save
// room in the runtime's format processing context structure. These
// enumerators are defined with the corresponding values returned from
@@ -45,6 +40,5 @@ enum class RoundingMode : std::uint8_t {
TiesAwayFromZero, // ROUND=COMPATIBLE, RC - ties round away from zero
};
-
} // namespace Fortran::common
-#endif // FORTRAN_COMMON_FORTRAN_CONSTS_H_
+#endif /* FORTRAN_COMMON_FORTRAN_CONSTS_H_ */
diff --git a/FortranRuntime/include/flang/Common/ISO_Fortran_binding.h b/FortranRuntime/include/flang/Common/ISO_Fortran_binding.h
index 21247103bcc552..516355c01ec7d0 100644
--- a/FortranRuntime/include/flang/Common/ISO_Fortran_binding.h
+++ b/FortranRuntime/include/flang/Common/ISO_Fortran_binding.h
@@ -6,14 +6,14 @@
*
*===----------------------------------------------------------------------===*/
-#ifndef CFI_ISO_FORTRAN_BINDING_H_
-#define CFI_ISO_FORTRAN_BINDING_H_
+#ifndef FORTRAN_COMMON_ISO_FORTRAN_BINDING_H_
+#define FORTRAN_COMMON_ISO_FORTRAN_BINDING_H_
/* When this header is included into the compiler and runtime implementations,
* it does so by means of a wrapper header that establishes namespaces and
* a macro for extra function attributes (RT_API_ATTRS).
*/
-#ifndef FORTRAN_ISO_FORTRAN_BINDING_WRAPPER_H_
+#ifndef FORTRAN_COMMON_ISO_FORTRAN_BINDING_WRAPPER_H_
#include <stddef.h>
#define FORTRAN_ISO_NAMESPACE_
#endif
@@ -206,4 +206,4 @@ RT_API_ATTRS int CFI_setpointer(
} // extern "C"
#endif
-#endif /* CFI_ISO_FORTRAN_BINDING_H_ */
+#endif /* FORTRAN_COMMON_ISO_FORTRAN_BINDING_H_ */
diff --git a/FortranRuntime/include/flang/Common/ISO_Fortran_binding_wrapper.h b/FortranRuntime/include/flang/Common/ISO_Fortran_binding_wrapper.h
index ee02f6f129732e..d1bc9be34859a4 100644
--- a/FortranRuntime/include/flang/Common/ISO_Fortran_binding_wrapper.h
+++ b/FortranRuntime/include/flang/Common/ISO_Fortran_binding_wrapper.h
@@ -6,8 +6,8 @@
*
*===----------------------------------------------------------------------===*/
-#ifndef FORTRAN_ISO_FORTRAN_BINDING_WRAPPER_H_
-#define FORTRAN_ISO_FORTRAN_BINDING_WRAPPER_H_
+#ifndef FORTRAN_COMMON_ISO_FORTRAN_BINDING_WRAPPER_H_
+#define FORTRAN_COMMON_ISO_FORTRAN_BINDING_WRAPPER_H_
/* A thin wrapper around flang/include/ISO_Fortran_binding.h
* This header file must be included when ISO_Fortran_binding.h
@@ -22,7 +22,7 @@
/* clang-format off */
#include <stddef.h>
-#include "flang/Common/api-attrs.h"
+#include "flang/Common/api-attrs.h"
#ifdef __cplusplus
namespace Fortran {
namespace ISO {
@@ -35,4 +35,4 @@ namespace ISO {
#endif /* __cplusplus */
/* clang-format on */
-#endif /* FORTRAN_ISO_FORTRAN_BINDING_WRAPPER_H_ */
+#endif /* FORTRAN_COMMON_ISO_FORTRAN_BINDING_WRAPPER_H_ */
diff --git a/FortranRuntime/include/flang/Common/api-attrs.h b/FortranRuntime/include/flang/Common/api-attrs.h
index b56a3c8a047af6..9a3001fb255c11 100644
--- a/FortranRuntime/include/flang/Common/api-attrs.h
+++ b/FortranRuntime/include/flang/Common/api-attrs.h
@@ -12,8 +12,8 @@
* declared/defined/used in Flang runtime library.
*/
-#ifndef FORTRAN_RUNTIME_API_ATTRS_H_
-#define FORTRAN_RUNTIME_API_ATTRS_H_
+#ifndef FORTRAN_COMMON_API_ATTRS_H_
+#define FORTRAN_COMMON_API_ATTRS_H_
/*
* RT_EXT_API_GROUP_BEGIN/END pair is placed around definitions
@@ -177,4 +177,4 @@
#define RT_DEVICE_NOINLINE_HOST_INLINE inline
#endif
-#endif /* !FORTRAN_RUNTIME_API_ATTRS_H_ */
+#endif /* FORTRAN_COMMON_API_ATTRS_H_ */
diff --git a/FortranRuntime/include/flang/Common/binary-floating-point.h b/FortranRuntime/include/flang/Common/binary-floating-point.h
index 1409b94192740c..705acc31bdfb21 100644
--- a/FortranRuntime/include/flang/Common/binary-floating-point.h
+++ b/FortranRuntime/include/flang/Common/binary-floating-point.h
@@ -6,8 +6,8 @@
//
//===----------------------------------------------------------------------===//
-#ifndef FORTRAN_DECIMAL_BINARY_FLOATING_POINT_H_
-#define FORTRAN_DECIMAL_BINARY_FLOATING_POINT_H_
+#ifndef FORTRAN_COMMON_BINARY_FLOATING_POINT_H_
+#define FORTRAN_COMMON_BINARY_FLOATING_POINT_H_
// Access and manipulate the fields of an IEEE-754 binary
// floating-point value via a generalized template.
@@ -208,4 +208,4 @@ template <int BINARY_PRECISION> class BinaryFloatingPointNumber {
RawType raw_{0};
};
} // namespace Fortran::decimal
-#endif
+#endif /* FORTRAN_COMMON_BINARY_FLOATING_POINT_H_ */
diff --git a/FortranRuntime/include/flang/Common/bit-population-count.h b/FortranRuntime/include/flang/Common/bit-population-count.h
index e1aeb78f9a3765..59ade914d14d85 100644
--- a/FortranRuntime/include/flang/Common/bit-population-count.h
+++ b/FortranRuntime/include/flang/Common/bit-population-count.h
@@ -93,4 +93,4 @@ template <typename INT> inline constexpr int TrailingZeroBitCount(INT x) {
}
}
} // namespace Fortran::common
-#endif // FORTRAN_COMMON_BIT_POPULATION_COUNT_H_
+#endif /* FORTRAN_COMMON_BIT_POPULATION_COUNT_H_ */
diff --git a/FortranRuntime/include/flang/Common/constexpr-bitset.h b/FortranRuntime/include/flang/Common/constexpr-bitset.h
index 1aafb6eff84c61..093b247b5f4eff 100644
--- a/FortranRuntime/include/flang/Common/constexpr-bitset.h
+++ b/FortranRuntime/include/flang/Common/constexpr-bitset.h
@@ -144,4 +144,4 @@ template <int BITS> class BitSet {
Word bits_{0};
};
} // namespace Fortran::common
-#endif // FORTRAN_COMMON_CONSTEXPR_BITSET_H_
+#endif /* FORTRAN_COMMON_CONSTEXPR_BITSET_H_ */
diff --git a/FortranRuntime/include/flang/Common/decimal.h b/FortranRuntime/include/flang/Common/decimal.h
index 2a75b98c112225..c086f97129f6a5 100644
--- a/FortranRuntime/include/flang/Common/decimal.h
+++ b/FortranRuntime/include/flang/Common/decimal.h
@@ -8,8 +8,8 @@
/* C and C++ API for binary-to/from-decimal conversion package. */
-#ifndef FORTRAN_DECIMAL_DECIMAL_H_
-#define FORTRAN_DECIMAL_DECIMAL_H_
+#ifndef FORTRAN_COMMON_DECIMAL_H_
+#define FORTRAN_COMMON_DECIMAL_H_
#include "flang/Common/api-attrs.h"
#include <stddef.h>
@@ -136,4 +136,4 @@ RT_API_ATTRS enum NS(ConversionResultFlags) ConvertDecimalToLongDouble(
#ifdef __cplusplus
} // extern "C"
#endif
-#endif
+#endif /* FORTRAN_COMMON_DECIMAL_H_ */
diff --git a/FortranRuntime/include/flang/Common/enum-class.h b/FortranRuntime/include/flang/Common/enum-class.h
index 41575d45091a8d..787648ffec48e8 100644
--- a/FortranRuntime/include/flang/Common/enum-class.h
+++ b/FortranRuntime/include/flang/Common/enum-class.h
@@ -69,4 +69,4 @@ constexpr std::array<std::string_view, ITEMS> EnumNames(const char *p) {
}
} // namespace Fortran::common
-#endif // FORTRAN_COMMON_ENUM_CLASS_H_
+#endif /* FORTRAN_COMMON_ENUM_CLASS_H_ */
diff --git a/FortranRuntime/include/flang/Common/enum-set.h b/FortranRuntime/include/flang/Common/enum-set.h
index 5290b76debee88..6100fc5e2e31c5 100644
--- a/FortranRuntime/include/flang/Common/enum-set.h
+++ b/FortranRuntime/include/flang/Common/enum-set.h
@@ -228,4 +228,4 @@ struct std::hash<Fortran::common::EnumSet<ENUM, values>> {
return std::hash(x.bitset());
}
};
-#endif // FORTRAN_COMMON_ENUM_SET_H_
+#endif /* FORTRAN_COMMON_ENUM_SET_H_ */
diff --git a/FortranRuntime/include/flang/Common/fast-int-set.h b/FortranRuntime/include/flang/Common/fast-int-set.h
index 48209a773c4cd1..323ee4dc7e94d9 100644
--- a/FortranRuntime/include/flang/Common/fast-int-set.h
+++ b/FortranRuntime/include/flang/Common/fast-int-set.h
@@ -103,4 +103,4 @@ template <int N> class FastIntSet {
bool isFullyInitialized_{false}; // memory was cleared
};
} // namespace Fortran::common
-#endif // FORTRAN_COMMON_FAST_INT_SET_H_
+#endif /* FORTRAN_COMMON_FAST_INT_SET_H_ */
diff --git a/FortranRuntime/include/flang/Common/format.h b/FortranRuntime/include/flang/Common/format.h
index 138e84b72b733d..6f4dfc8d2376b7 100644
--- a/FortranRuntime/include/flang/Common/format.h
+++ b/FortranRuntime/include/flang/Common/format.h
@@ -901,4 +901,4 @@ template <typename CHAR> bool FormatValidator<CHAR>::Check() {
}
} // namespace Fortran::common
-#endif // FORTRAN_COMMON_FORMAT_H_
+#endif /* FORTRAN_COMMON_FORMAT_H_ */
diff --git a/FortranRuntime/include/flang/Common/idioms.h b/FortranRuntime/include/flang/Common/idioms.h
index 99f383ec75b999..1ae0c0b35112e9 100644
--- a/FortranRuntime/include/flang/Common/idioms.h
+++ b/FortranRuntime/include/flang/Common/idioms.h
@@ -150,4 +150,4 @@ template <typename A, typename... B>
using IfNoLvalue = std::enable_if_t<(... && !std::is_lvalue_reference_v<B>), A>;
template <typename... RVREF> using NoLvalue = IfNoLvalue<void, RVREF...>;
} // namespace Fortran::common
-#endif // FORTRAN_COMMON_IDIOMS_H_
+#endif /* FORTRAN_COMMON_IDIOMS_H_ */
diff --git a/FortranRuntime/include/flang/Common/leading-zero-bit-count.h b/FortranRuntime/include/flang/Common/leading-zero-bit-count.h
index a296e0b446917f..e788bfa9bcfd08 100644
--- a/FortranRuntime/include/flang/Common/leading-zero-bit-count.h
+++ b/FortranRuntime/include/flang/Common/leading-zero-bit-count.h
@@ -93,4 +93,4 @@ template <typename A> inline constexpr int BitsNeededFor(A x) {
return 8 * sizeof x - LeadingZeroBitCount(x);
}
} // namespace Fortran::common
-#endif // FORTRAN_COMMON_LEADING_ZERO_BIT_COUNT_H_
+#endif /* FORTRAN_COMMON_LEADING_ZERO_BIT_COUNT_H_ */
diff --git a/FortranRuntime/include/flang/Common/optional.h b/FortranRuntime/include/flang/Common/optional.h
index c0f4278009f40a..c3db3b1329a2fd 100644
--- a/FortranRuntime/include/flang/Common/optional.h
+++ b/FortranRuntime/include/flang/Common/optional.h
@@ -23,8 +23,8 @@
// * cuda:: namespace need to be forced for all std:: references.
//
//===----------------------------------------------------------------------===//
-#ifndef FORTRAN_COMMON_OPTIONAL_H
-#define FORTRAN_COMMON_OPTIONAL_H
+#ifndef FORTRAN_COMMON_OPTIONAL_H_
+#define FORTRAN_COMMON_OPTIONAL_H_
#include "flang/Common/api-attrs.h"
#include <optional>
@@ -240,4 +240,4 @@ using std::optional;
} // namespace Fortran::common
-#endif // FORTRAN_COMMON_OPTIONAL_H
+#endif /* FORTRAN_COMMON_OPTIONAL_H_ */
diff --git a/FortranRuntime/include/flang/Common/real.h b/FortranRuntime/include/flang/Common/real.h
index b527deda0e3b4f..dc9a2404731e70 100644
--- a/FortranRuntime/include/flang/Common/real.h
+++ b/FortranRuntime/include/flang/Common/real.h
@@ -141,4 +141,4 @@ class RealCharacteristics {
};
} // namespace Fortran::common
-#endif // FORTRAN_COMMON_REAL_H_
+#endif /* FORTRAN_COMMON_REAL_H_ */
diff --git a/FortranRuntime/include/flang/Common/reference-wrapper.h b/FortranRuntime/include/flang/Common/reference-wrapper.h
index 2983754108f95a..6822fb335f398c 100644
--- a/FortranRuntime/include/flang/Common/reference-wrapper.h
+++ b/FortranRuntime/include/flang/Common/reference-wrapper.h
@@ -22,8 +22,8 @@
//
// clang-format on
-#ifndef FORTRAN_COMMON_REFERENCE_WRAPPER_H
-#define FORTRAN_COMMON_REFERENCE_WRAPPER_H
+#ifndef FORTRAN_COMMON_REFERENCE_WRAPPER_H_
+#define FORTRAN_COMMON_REFERENCE_WRAPPER_H_
#include "flang/Common/api-attrs.h"
#include <functional>
@@ -111,4 +111,4 @@ using std::reference_wrapper;
} // namespace Fortran::common
-#endif // FORTRAN_COMMON_REFERENCE_WRAPPER_H
+#endif /* FORTRAN_COMMON_REFERENCE_WRAPPER_H_ */
diff --git a/FortranRuntime/include/flang/Common/restorer.h b/FortranRuntime/include/flang/Common/restorer.h
index 0f1bc48620d37e..a5c5ebe7344a1b 100644
--- a/FortranRuntime/include/flang/Common/restorer.h
+++ b/FortranRuntime/include/flang/Common/restorer.h
@@ -18,8 +18,8 @@
#ifndef FORTRAN_COMMON_RESTORER_H_
#define FORTRAN_COMMON_RESTORER_H_
-#include "idioms.h"
#include "flang/Common/api-attrs.h"
+#include "idioms.h"
namespace Fortran::common {
template <typename A> class Restorer {
public:
@@ -53,4 +53,4 @@ RT_API_ATTRS common::IfNoLvalue<Restorer<A>, B> ScopedSet(
return Restorer<A>{to, std::move(original)};
}
} // namespace Fortran::common
-#endif // FORTRAN_COMMON_RESTORER_H_
+#endif /* FORTRAN_COMMON_RESTORER_H_ */
diff --git a/FortranRuntime/include/flang/Common/target-rounding.h b/FortranRuntime/include/flang/Common/target-rounding.h
index 970d8fb61fbd1b..c0c9f6c49b26a2 100644
--- a/FortranRuntime/include/flang/Common/target-rounding.h
+++ b/FortranRuntime/include/flang/Common/target-rounding.h
@@ -9,11 +9,9 @@
#ifndef FORTRAN_COMMON_TARGET_ROUNDING_H_
#define FORTRAN_COMMON_TARGET_ROUNDING_H_
-
#include "flang/Common/Fortran-consts.h"
#include "flang/Common/enum-set.h"
-
namespace Fortran::common {
// Floating-point rounding control
@@ -30,11 +28,10 @@ struct Rounding {
#endif
};
-
// These are ordered like the bits in a common fenv.h header file.
ENUM_CLASS(RealFlag, InvalidArgument, Denorm, DivideByZero, Overflow, Underflow,
Inexact)
using RealFlags = common::EnumSet<RealFlag, RealFlag_enumSize>;
-}
-#endif // FORTRAN_COMMON_TARGET_ROUNDING_H_
+} // namespace Fortran::common
+#endif /* FORTRAN_COMMON_TARGET_ROUNDING_H_ */
diff --git a/FortranRuntime/include/flang/Common/uint128.h b/FortranRuntime/include/flang/Common/uint128.h
index 821c8c3b08a52f..1b2ee6a2c14b87 100644
--- a/FortranRuntime/include/flang/Common/uint128.h
+++ b/FortranRuntime/include/flang/Common/uint128.h
@@ -19,8 +19,8 @@
#define AVOID_NATIVE_UINT128_T 0
#endif
-#include "leading-zero-bit-count.h"
#include "flang/Common/api-attrs.h"
+#include "leading-zero-bit-count.h"
#include <cstdint>
#include <type_traits>
@@ -303,4 +303,4 @@ template <int BITS>
using HostSignedIntType = typename HostSignedIntTypeHelper<BITS>::type;
} // namespace Fortran::common
-#endif
+#endif /* FORTRAN_COMMON_UINT128_H_ */
diff --git a/FortranRuntime/include/flang/Common/variant.h b/FortranRuntime/include/flang/Common/variant.h
index 1af85876afac00..ff9b1aed4eba91 100644
--- a/FortranRuntime/include/flang/Common/variant.h
+++ b/FortranRuntime/include/flang/Common/variant.h
@@ -11,8 +11,8 @@
// and the related names become available, though, they may correspond
// to alternative definitions (e.g. from cuda::std namespace).
-#ifndef FORTRAN_COMMON_VARIANT_H
-#define FORTRAN_COMMON_VARIANT_H
+#ifndef FORTRAN_COMMON_VARIANT_H_
+#define FORTRAN_COMMON_VARIANT_H_
#if RT_USE_LIBCUDACXX
#include <cuda/std/variant>
@@ -27,4 +27,4 @@ using cuda::std::visit;
#include <variant>
#endif // !RT_USE_LIBCUDACXX
-#endif // FORTRAN_COMMON_VARIANT_H
+#endif /* FORTRAN_COMMON_VARIANT_H_ */
diff --git a/FortranRuntime/include/flang/Common/visit.h b/FortranRuntime/include/flang/Common/visit.h
index ad66297650b093..8030ac9be173c3 100644
--- a/FortranRuntime/include/flang/Common/visit.h
+++ b/FortranRuntime/include/flang/Common/visit.h
@@ -21,8 +21,8 @@
#ifndef FORTRAN_COMMON_VISIT_H_
#define FORTRAN_COMMON_VISIT_H_
-#include "variant.h"
#include "flang/Common/api-attrs.h"
+#include "variant.h"
#include <type_traits>
namespace Fortran::common {
@@ -100,4 +100,4 @@ using Fortran::common::log2visit::visit;
#endif
} // namespace Fortran::common
-#endif // FORTRAN_COMMON_VISIT_H_
+#endif /* FORTRAN_COMMON_VISIT_H_ */
diff --git a/FortranRuntime/include/flang/Common/windows-include.h b/FortranRuntime/include/flang/Common/windows-include.h
index 75ef4974251ff9..bee79d4fceb3ba 100644
--- a/FortranRuntime/include/flang/Common/windows-include.h
+++ b/FortranRuntime/include/flang/Common/windows-include.h
@@ -22,4 +22,4 @@
#endif // _WIN32
-#endif // FORTRAN_COMMON_WINDOWS_INCLUDE_H_
+#endif /* FORTRAN_COMMON_WINDOWS_INCLUDE_H_ */
diff --git a/FortranRuntime/include/flang/Runtime/CUDA/allocator.h b/FortranRuntime/include/flang/Runtime/CUDA/allocator.h
index 4527c9f18fa054..48185e8f34eaf6 100644
--- a/FortranRuntime/include/flang/Runtime/CUDA/allocator.h
+++ b/FortranRuntime/include/flang/Runtime/CUDA/allocator.h
@@ -43,4 +43,4 @@ void *CUFAllocUnified(std::size_t);
void CUFFreeUnified(void *);
} // namespace Fortran::runtime::cuda
-#endif // FORTRAN_RUNTIME_CUDA_ALLOCATOR_H_
+#endif /* FORTRAN_RUNTIME_CUDA_ALLOCATOR_H_ */
diff --git a/FortranRuntime/include/flang/Runtime/CUDA/descriptor.h b/FortranRuntime/include/flang/Runtime/CUDA/descriptor.h
index d593989420420f..68ad0987d9aecd 100644
--- a/FortranRuntime/include/flang/Runtime/CUDA/descriptor.h
+++ b/FortranRuntime/include/flang/Runtime/CUDA/descriptor.h
@@ -27,4 +27,4 @@ void RTDECL(CUFFreeDesciptor)(
} // extern "C"
} // namespace Fortran::runtime::cuda
-#endif // FORTRAN_RUNTIME_CUDA_DESCRIPTOR_H_
+#endif /* FORTRAN_RUNTIME_CUDA_DESCRIPTOR_H_ */
diff --git a/FortranRuntime/include/flang/Runtime/allocatable.h b/FortranRuntime/include/flang/Runtime/allocatable.h
index 58061d9862095e..d7f3910074a760 100644
--- a/FortranRuntime/include/flang/Runtime/allocatable.h
+++ b/FortranRuntime/include/flang/Runtime/allocatable.h
@@ -129,4 +129,4 @@ void RTDECL(AllocatableDeallocateNoFinal)(
Descriptor &, const char *sourceFile = nullptr, int sourceLine = 0);
} // extern "C"
} // namespace Fortran::runtime
-#endif // FORTRAN_RUNTIME_ALLOCATABLE_H_
+#endif /* FORTRAN_RUNTIME_ALLOCATABLE_H_ */
diff --git a/FortranRuntime/include/flang/Runtime/allocator-registry.h b/FortranRuntime/include/flang/Runtime/allocator-registry.h
index 411cc68f58ec33..4e7d9bcedfb375 100644
--- a/FortranRuntime/include/flang/Runtime/allocator-registry.h
+++ b/FortranRuntime/include/flang/Runtime/allocator-registry.h
@@ -6,8 +6,8 @@
//
//===----------------------------------------------------------------------===//
-#ifndef FORTRAN_RUNTIME_ALLOCATOR_H_
-#define FORTRAN_RUNTIME_ALLOCATOR_H_
+#ifndef FORTRAN_RUNTIME_ALLOCATOR_REGISTRY_H_
+#define FORTRAN_RUNTIME_ALLOCATOR_REGISTRY_H_
#include "flang/Common/api-attrs.h"
#include <cstdlib>
@@ -62,4 +62,4 @@ RT_OFFLOAD_VAR_GROUP_END
} // namespace Fortran::runtime
-#endif // FORTRAN_RUNTIME_ALLOCATOR_H_
+#endif /* FORTRAN_RUNTIME_ALLOCATOR_REGISTRY_H_ */
diff --git a/FortranRuntime/include/flang/Runtime/array-constructor.h b/FortranRuntime/include/flang/Runtime/array-constructor.h
index 46fc0418c7991e..82367756f5dc79 100644
--- a/FortranRuntime/include/flang/Runtime/array-constructor.h
+++ b/FortranRuntime/include/flang/Runtime/array-constructor.h
@@ -9,8 +9,8 @@
// External APIs to create temporary storage for array constructors when their
// final extents or length parameters cannot be pre-computed.
-#ifndef FORTRAN_RUNTIME_ARRAYCONSTRUCTOR_H_
-#define FORTRAN_RUNTIME_ARRAYCONSTRUCTOR_H_
+#ifndef FORTRAN_RUNTIME_ARRAY_CONSTRUCTOR_H_
+#define FORTRAN_RUNTIME_ARRAY_CONSTRUCTOR_H_
#include "flang/Runtime/descriptor.h"
#include "flang/Runtime/entry-names.h"
@@ -115,4 +115,4 @@ void RTDECL(PushArrayConstructorSimpleScalar)(
ArrayConstructorVector &vector, void *from);
} // extern "C"
} // namespace Fortran::runtime
-#endif // FORTRAN_RUNTIME_ARRAYCONSTRUCTOR_H_
+#endif /* FORTRAN_RUNTIME_ARRAY_CONSTRUCTOR_H_ */
diff --git a/FortranRuntime/include/flang/Runtime/assign.h b/FortranRuntime/include/flang/Runtime/assign.h
index a1cc9eaf4355f6..55d15a5c046868 100644
--- a/FortranRuntime/include/flang/Runtime/assign.h
+++ b/FortranRuntime/include/flang/Runtime/assign.h
@@ -58,4 +58,4 @@ void RTDECL(AssignPolymorphic)(Descriptor &to, const Descriptor &from,
const char *sourceFile = nullptr, int sourceLine = 0);
} // extern "C"
} // namespace Fortran::runtime
-#endif // FORTRAN_RUNTIME_ASSIGN_H_
+#endif /* FORTRAN_RUNTIME_ASSIGN_H_ */
diff --git a/FortranRuntime/include/flang/Runtime/c-or-cpp.h b/FortranRuntime/include/flang/Runtime/c-or-cpp.h
index 8bac523907750c..3c0c0be643cbc3 100644
--- a/FortranRuntime/include/flang/Runtime/c-or-cpp.h
+++ b/FortranRuntime/include/flang/Runtime/c-or-cpp.h
@@ -28,4 +28,4 @@
#define NORETURN IF_CPLUSPLUS([[noreturn]])
#define NO_ARGUMENTS IF_NOT_CPLUSPLUS(void)
-#endif // FORTRAN_RUNTIME_C_OR_CPP_H_
+#endif /* FORTRAN_RUNTIME_C_OR_CPP_H_ */
diff --git a/FortranRuntime/include/flang/Runtime/character.h b/FortranRuntime/include/flang/Runtime/character.h
index dd47686fe858fd..a842c30cd8120c 100644
--- a/FortranRuntime/include/flang/Runtime/character.h
+++ b/FortranRuntime/include/flang/Runtime/character.h
@@ -129,4 +129,4 @@ void RTDECL(Verify)(Descriptor &result, const Descriptor &string,
const char *sourceFile = nullptr, int sourceLine = 0);
}
} // namespace Fortran::runtime
-#endif // FORTRAN_RUNTIME_CHARACTER_H_
+#endif /* FORTRAN_RUNTIME_CHARACTER_H_ */
diff --git a/FortranRuntime/include/flang/Runtime/command.h b/FortranRuntime/include/flang/Runtime/command.h
index 7ab3f6442dcf92..2bbdfca7631163 100644
--- a/FortranRuntime/include/flang/Runtime/command.h
+++ b/FortranRuntime/include/flang/Runtime/command.h
@@ -62,4 +62,4 @@ std::int32_t RTNAME(GetCwd)(
}
} // namespace Fortran::runtime
-#endif // FORTRAN_RUNTIME_COMMAND_H_
+#endif /* FORTRAN_RUNTIME_COMMAND_H_ */
diff --git a/FortranRuntime/include/flang/Runtime/cpp-type.h b/FortranRuntime/include/flang/Runtime/cpp-type.h
index 27b43de7d0f0f6..7de1ea4f45f224 100644
--- a/FortranRuntime/include/flang/Runtime/cpp-type.h
+++ b/FortranRuntime/include/flang/Runtime/cpp-type.h
@@ -110,4 +110,4 @@ template <> struct CppTypeForHelper<TypeCategory::Logical, 1> {
};
} // namespace Fortran::runtime
-#endif // FORTRAN_RUNTIME_CPP_TYPE_H_
+#endif /* FORTRAN_RUNTIME_CPP_TYPE_H_ */
diff --git a/FortranRuntime/include/flang/Runtime/derived-api.h b/FortranRuntime/include/flang/Runtime/derived-api.h
index 79aa7d82de8819..ca1681e974051c 100644
--- a/FortranRuntime/include/flang/Runtime/derived-api.h
+++ b/FortranRuntime/include/flang/Runtime/derived-api.h
@@ -63,4 +63,4 @@ bool RTDECL(ExtendsTypeOf)(const Descriptor &, const Descriptor &);
} // extern "C"
} // namespace Fortran::runtime
-#endif // FORTRAN_RUNTIME_DERIVED_API_H_
+#endif /* FORTRAN_RUNTIME_DERIVED_API_H_ */
diff --git a/FortranRuntime/include/flang/Runtime/descriptor.h b/FortranRuntime/include/flang/Runtime/descriptor.h
index 2fe5b11200cf6d..867f4d4ee29ac0 100644
--- a/FortranRuntime/include/flang/Runtime/descriptor.h
+++ b/FortranRuntime/include/flang/Runtime/descriptor.h
@@ -492,4 +492,4 @@ class alignas(Descriptor) StaticDescriptor {
};
} // namespace Fortran::runtime
-#endif // FORTRAN_RUNTIME_DESCRIPTOR_H_
+#endif /* FORTRAN_RUNTIME_DESCRIPTOR_H_ */
diff --git a/FortranRuntime/include/flang/Runtime/entry-names.h b/FortranRuntime/include/flang/Runtime/entry-names.h
index 52de2496d9421d..25134771bf9185 100644
--- a/FortranRuntime/include/flang/Runtime/entry-names.h
+++ b/FortranRuntime/include/flang/Runtime/entry-names.h
@@ -15,8 +15,8 @@
* The value of REVISION should not be changed until/unless the API to the
* runtime library must change in some way that breaks backward compatibility.
*/
-#ifndef FORTRAN_RUNTIME_ENTRY_NAMES_H
-#define FORTRAN_RUNTIME_ENTRY_NAMES_H
+#ifndef FORTRAN_RUNTIME_ENTRY_NAMES_H_
+#define FORTRAN_RUNTIME_ENTRY_NAMES_H_
#include "flang/Common/api-attrs.h"
@@ -40,4 +40,4 @@
#define RTNAME_STRING(name) RTNAME_STRINGIFY(RTNAME(name))
#endif
-#endif /* !FORTRAN_RUNTIME_ENTRY_NAMES_H */
+#endif /* FORTRAN_RUNTIME_ENTRY_NAMES_H_ */
diff --git a/FortranRuntime/include/flang/Runtime/exceptions.h b/FortranRuntime/include/flang/Runtime/exceptions.h
index 1fb74e14e54d30..f2c67325b34d92 100644
--- a/FortranRuntime/include/flang/Runtime/exceptions.h
+++ b/FortranRuntime/include/flang/Runtime/exceptions.h
@@ -26,4 +26,4 @@ std::uint32_t RTNAME(MapException)(std::uint32_t excepts);
} // extern "C"
} // namespace Fortran::runtime
-#endif // FORTRAN_RUNTIME_EXCEPTIONS_H_
+#endif /* FORTRAN_RUNTIME_EXCEPTIONS_H_ */
diff --git a/FortranRuntime/include/flang/Runtime/execute.h b/FortranRuntime/include/flang/Runtime/execute.h
index ba3e950ca92941..d1958a82594ffd 100644
--- a/FortranRuntime/include/flang/Runtime/execute.h
+++ b/FortranRuntime/include/flang/Runtime/execute.h
@@ -26,4 +26,4 @@ void RTNAME(ExecuteCommandLine)(const Descriptor &command, bool wait = true,
}
} // namespace Fortran::runtime
-#endif // FORTRAN_RUNTIME_EXECUTE_H_
+#endif /* FORTRAN_RUNTIME_EXECUTE_H_ */
diff --git a/FortranRuntime/include/flang/Runtime/extensions.h b/FortranRuntime/include/flang/Runtime/extensions.h
index fef651f3b2eedb..f46ccdd7d9528d 100644
--- a/FortranRuntime/include/flang/Runtime/extensions.h
+++ b/FortranRuntime/include/flang/Runtime/extensions.h
@@ -52,4 +52,4 @@ std::int64_t FORTRAN_PROCEDURE_NAME(access)(const char *name,
#endif
} // extern "C"
-#endif // FORTRAN_RUNTIME_EXTENSIONS_H_
+#endif /* FORTRAN_RUNTIME_EXTENSIONS_H_ */
diff --git a/FortranRuntime/include/flang/Runtime/freestanding-tools.h b/FortranRuntime/include/flang/Runtime/freestanding-tools.h
index e94cb0a6c938cd..8aeef54ba0af3d 100644
--- a/FortranRuntime/include/flang/Runtime/freestanding-tools.h
+++ b/FortranRuntime/include/flang/Runtime/freestanding-tools.h
@@ -215,4 +215,4 @@ using std::toupper;
#endif // !STD_TOUPPER_UNSUPPORTED
} // namespace Fortran::runtime
-#endif // FORTRAN_RUNTIME_FREESTANDING_TOOLS_H_
+#endif /* FORTRAN_RUNTIME_FREESTANDING_TOOLS_H_ */
diff --git a/FortranRuntime/include/flang/Runtime/inquiry.h b/FortranRuntime/include/flang/Runtime/inquiry.h
index 36ef929ed5b2f1..83b07cf2f31a47 100644
--- a/FortranRuntime/include/flang/Runtime/inquiry.h
+++ b/FortranRuntime/include/flang/Runtime/inquiry.h
@@ -40,4 +40,4 @@ void RTDECL(Ubound)(void *result, const Descriptor &array, int kind,
} // extern "C"
} // namespace Fortran::runtime
-#endif // FORTRAN_RUNTIME_INQUIRY_H_
+#endif /* FORTRAN_RUNTIME_INQUIRY_H_ */
diff --git a/FortranRuntime/include/flang/Runtime/io-api.h b/FortranRuntime/include/flang/Runtime/io-api.h
index 328afc715a3f1e..367146a4925c53 100644
--- a/FortranRuntime/include/flang/Runtime/io-api.h
+++ b/FortranRuntime/include/flang/Runtime/io-api.h
@@ -369,4 +369,4 @@ enum Iostat IODECL(EndIoStatement)(Cookie);
} // extern "C"
} // namespace Fortran::runtime::io
-#endif
+#endif /* FORTRAN_RUNTIME_IO_API_H_ */
diff --git a/FortranRuntime/include/flang/Runtime/iostat.h b/FortranRuntime/include/flang/Runtime/iostat.h
index 6ce7c82b424eb7..a5a2a560f05f8d 100644
--- a/FortranRuntime/include/flang/Runtime/iostat.h
+++ b/FortranRuntime/include/flang/Runtime/iostat.h
@@ -92,4 +92,4 @@ enum Iostat {
RT_API_ATTRS const char *IostatErrorString(int);
} // namespace Fortran::runtime::io
-#endif // FORTRAN_RUNTIME_IOSTAT_H_
+#endif /* FORTRAN_RUNTIME_IOSTAT_H_ */
diff --git a/FortranRuntime/include/flang/Runtime/main.h b/FortranRuntime/include/flang/Runtime/main.h
index 88232ea64fa6ab..98fcf1250d0ad6 100644
--- a/FortranRuntime/include/flang/Runtime/main.h
+++ b/FortranRuntime/include/flang/Runtime/main.h
@@ -20,4 +20,4 @@ void RTNAME(ProgramStart)(
void RTNAME(ByteswapOption)(void); // -byteswapio
FORTRAN_EXTERN_C_END
-#endif // FORTRAN_RUNTIME_MAIN_H_
+#endif /* FORTRAN_RUNTIME_MAIN_H_ */
diff --git a/FortranRuntime/include/flang/Runtime/matmul-transpose.h b/FortranRuntime/include/flang/Runtime/matmul-transpose.h
index 2d79ca10e08958..077277fae2da86 100644
--- a/FortranRuntime/include/flang/Runtime/matmul-transpose.h
+++ b/FortranRuntime/include/flang/Runtime/matmul-transpose.h
@@ -46,4 +46,4 @@ void RTDECL(MatmulTransposeDirect)(const Descriptor &, const Descriptor &,
} // extern "C"
} // namespace Fortran::runtime
-#endif // FORTRAN_RUNTIME_MATMUL_TRANSPOSE_H_
+#endif /* FORTRAN_RUNTIME_MATMUL_TRANSPOSE_H_ */
diff --git a/FortranRuntime/include/flang/Runtime/matmul.h b/FortranRuntime/include/flang/Runtime/matmul.h
index a72d4a06ee4594..cd375ac43d77f2 100644
--- a/FortranRuntime/include/flang/Runtime/matmul.h
+++ b/FortranRuntime/include/flang/Runtime/matmul.h
@@ -45,4 +45,4 @@ void RTDECL(MatmulDirect)(const Descriptor &, const Descriptor &,
} // extern "C"
} // namespace Fortran::runtime
-#endif // FORTRAN_RUNTIME_MATMUL_H_
+#endif /* FORTRAN_RUNTIME_MATMUL_H_ */
diff --git a/FortranRuntime/include/flang/Runtime/memory.h b/FortranRuntime/include/flang/Runtime/memory.h
index 98412a989f890b..84af4d7189c074 100644
--- a/FortranRuntime/include/flang/Runtime/memory.h
+++ b/FortranRuntime/include/flang/Runtime/memory.h
@@ -170,4 +170,4 @@ template <typename A> struct Allocator {
};
} // namespace Fortran::runtime
-#endif // FORTRAN_RUNTIME_MEMORY_H_
+#endif /* FORTRAN_RUNTIME_MEMORY_H_ */
diff --git a/FortranRuntime/include/flang/Runtime/misc-intrinsic.h b/FortranRuntime/include/flang/Runtime/misc-intrinsic.h
index 3fb3aaed49c0fb..1d4163c2e1e751 100644
--- a/FortranRuntime/include/flang/Runtime/misc-intrinsic.h
+++ b/FortranRuntime/include/flang/Runtime/misc-intrinsic.h
@@ -28,4 +28,4 @@ void RTDECL(TransferSize)(Descriptor &result, const Descriptor &source,
std::int64_t size);
} // extern "C"
} // namespace Fortran::runtime
-#endif // FORTRAN_RUNTIME_MISC_INTRINSIC_H_
+#endif /* FORTRAN_RUNTIME_MISC_INTRINSIC_H_ */
diff --git a/FortranRuntime/include/flang/Runtime/numeric.h b/FortranRuntime/include/flang/Runtime/numeric.h
index 84a5a7cd7a361c..5fbab2e069b739 100644
--- a/FortranRuntime/include/flang/Runtime/numeric.h
+++ b/FortranRuntime/include/flang/Runtime/numeric.h
@@ -455,4 +455,4 @@ CppTypeFor<TypeCategory::Real, 16> RTDECL(FPow16k)(
} // extern "C"
} // namespace Fortran::runtime
-#endif // FORTRAN_RUNTIME_NUMERIC_H_
+#endif /* FORTRAN_RUNTIME_NUMERIC_H_ */
diff --git a/FortranRuntime/include/flang/Runtime/pointer.h b/FortranRuntime/include/flang/Runtime/pointer.h
index 704144f08114f2..b7322ad92bd583 100644
--- a/FortranRuntime/include/flang/Runtime/pointer.h
+++ b/FortranRuntime/include/flang/Runtime/pointer.h
@@ -122,4 +122,4 @@ RT_API_ATTRS bool ValidatePointerPayload(const ISO::CFI_cdesc_t &);
} // extern "C"
} // namespace Fortran::runtime
-#endif // FORTRAN_RUNTIME_POINTER_H_
+#endif /* FORTRAN_RUNTIME_POINTER_H_ */
diff --git a/FortranRuntime/include/flang/Runtime/ragged.h b/FortranRuntime/include/flang/Runtime/ragged.h
index ff157ea16f081e..8574bc1fa110c8 100644
--- a/FortranRuntime/include/flang/Runtime/ragged.h
+++ b/FortranRuntime/include/flang/Runtime/ragged.h
@@ -57,4 +57,4 @@ void RTDECL(RaggedArrayDeallocate)(void *raggedArrayHeader);
} // extern "C"
} // namespace Fortran::runtime
-#endif // FORTRAN_RUNTIME_RAGGED_H_
+#endif /* FORTRAN_RUNTIME_RAGGED_H_ */
diff --git a/FortranRuntime/include/flang/Runtime/random.h b/FortranRuntime/include/flang/Runtime/random.h
index 269297dff47dba..bb6dcb3873f21d 100644
--- a/FortranRuntime/include/flang/Runtime/random.h
+++ b/FortranRuntime/include/flang/Runtime/random.h
@@ -8,6 +8,9 @@
// Intrinsic subroutines RANDOM_INIT, RANDOM_NUMBER, and RANDOM_SEED.
+#ifndef FORTRAN_RUNTIME_RANDOM_H_
+#define FORTRAN_RUNTIME_RANDOM_H_
+
#include "flang/Runtime/entry-names.h"
#include <cstdint>
@@ -35,3 +38,5 @@ void RTNAME(RandomSeed)(const Descriptor *size, const Descriptor *put,
} // extern "C"
} // namespace Fortran::runtime
+
+#endif /* FORTRAN_RUNTIME_RANDOM_H_ */
diff --git a/FortranRuntime/include/flang/Runtime/reduce.h b/FortranRuntime/include/flang/Runtime/reduce.h
index 60f54c393b4bbd..ae2828f04bf7c0 100644
--- a/FortranRuntime/include/flang/Runtime/reduce.h
+++ b/FortranRuntime/include/flang/Runtime/reduce.h
@@ -435,4 +435,4 @@ void RTDECL(ReduceDerivedTypeDim)(Descriptor &result, const Descriptor &array,
} // extern "C"
} // namespace Fortran::runtime
-#endif // FORTRAN_RUNTIME_REDUCE_H_
+#endif /* FORTRAN_RUNTIME_REDUCE_H_ */
diff --git a/FortranRuntime/include/flang/Runtime/reduction.h b/FortranRuntime/include/flang/Runtime/reduction.h
index 97986c12e8a10e..e00593fbc9f75e 100644
--- a/FortranRuntime/include/flang/Runtime/reduction.h
+++ b/FortranRuntime/include/flang/Runtime/reduction.h
@@ -444,4 +444,4 @@ bool RTDECL(DotProductLogical)(const Descriptor &, const Descriptor &,
} // extern "C"
} // namespace Fortran::runtime
-#endif // FORTRAN_RUNTIME_REDUCTION_H_
+#endif /* FORTRAN_RUNTIME_REDUCTION_H_ */
diff --git a/FortranRuntime/include/flang/Runtime/stop.h b/FortranRuntime/include/flang/Runtime/stop.h
index f7c4ffe7403e8e..9ba41343c6f964 100644
--- a/FortranRuntime/include/flang/Runtime/stop.h
+++ b/FortranRuntime/include/flang/Runtime/stop.h
@@ -37,4 +37,4 @@ NORETURN void RTNAME(ReportFatalUserError)(
FORTRAN_EXTERN_C_END
-#endif // FORTRAN_RUNTIME_STOP_H_
+#endif /* FORTRAN_RUNTIME_STOP_H_ */
diff --git a/FortranRuntime/include/flang/Runtime/support.h b/FortranRuntime/include/flang/Runtime/support.h
index 4a6d4357e87103..9c9b067a18f2e4 100644
--- a/FortranRuntime/include/flang/Runtime/support.h
+++ b/FortranRuntime/include/flang/Runtime/support.h
@@ -47,4 +47,4 @@ void RTDECL(CopyAndUpdateDescriptor)(Descriptor &to, const Descriptor &from,
} // extern "C"
} // namespace Fortran::runtime
-#endif // FORTRAN_RUNTIME_SUPPORT_H_
+#endif /* FORTRAN_RUNTIME_SUPPORT_H_ */
diff --git a/FortranRuntime/include/flang/Runtime/temporary-stack.h b/FortranRuntime/include/flang/Runtime/temporary-stack.h
index 3c1a4ea11a4352..f83fab7b0ac811 100644
--- a/FortranRuntime/include/flang/Runtime/temporary-stack.h
+++ b/FortranRuntime/include/flang/Runtime/temporary-stack.h
@@ -64,4 +64,4 @@ void RTNAME(DestroyDescriptorStack)(void *opaquePtr);
} // extern "C"
} // namespace Fortran::runtime
-#endif // FORTRAN_RUNTIME_TEMPORARY_STACK_H_
+#endif /* FORTRAN_RUNTIME_TEMPORARY_STACK_H_ */
diff --git a/FortranRuntime/include/flang/Runtime/time-intrinsic.h b/FortranRuntime/include/flang/Runtime/time-intrinsic.h
index 80490a17e45597..0e63fc6a4647a4 100644
--- a/FortranRuntime/include/flang/Runtime/time-intrinsic.h
+++ b/FortranRuntime/include/flang/Runtime/time-intrinsic.h
@@ -48,4 +48,4 @@ void RTNAME(Etime)(const Descriptor *values, const Descriptor *time,
} // extern "C"
} // namespace Fortran::runtime
-#endif // FORTRAN_RUNTIME_TIME_INTRINSIC_H_
+#endif /* FORTRAN_RUNTIME_TIME_INTRINSIC_H_ */
diff --git a/FortranRuntime/include/flang/Runtime/transformational.h b/FortranRuntime/include/flang/Runtime/transformational.h
index a39b872f376a69..266dd9d7aebc24 100644
--- a/FortranRuntime/include/flang/Runtime/transformational.h
+++ b/FortranRuntime/include/flang/Runtime/transformational.h
@@ -154,4 +154,4 @@ void RTDECL(Unpack)(Descriptor &result, const Descriptor &vector,
} // extern "C"
} // namespace Fortran::runtime
-#endif // FORTRAN_RUNTIME_TRANSFORMATIONAL_H_
+#endif /* FORTRAN_RUNTIME_TRANSFORMATIONAL_H_ */
diff --git a/FortranRuntime/include/flang/Runtime/type-code.h b/FortranRuntime/include/flang/Runtime/type-code.h
index 3c1b03dfaa1140..ec359f25dbdd12 100644
--- a/FortranRuntime/include/flang/Runtime/type-code.h
+++ b/FortranRuntime/include/flang/Runtime/type-code.h
@@ -10,8 +10,8 @@
#define FORTRAN_RUNTIME_TYPE_CODE_H_
#include "flang/Common/Fortran-consts.h"
-#include "flang/Common/optional.h"
#include "flang/Common/ISO_Fortran_binding_wrapper.h"
+#include "flang/Common/optional.h"
#include <utility>
namespace Fortran::runtime {
@@ -75,4 +75,4 @@ class TypeCode {
ISO::CFI_type_t raw_{CFI_type_other};
};
} // namespace Fortran::runtime
-#endif // FORTRAN_RUNTIME_TYPE_CODE_H_
+#endif /* FORTRAN_RUNTIME_TYPE_CODE_H_ */
diff --git a/FortranRuntime/include/flang/Testing/fp-testing.h b/FortranRuntime/include/flang/Testing/fp-testing.h
index 16c6017e8529d5..e223d2ef7d1b8b 100644
--- a/FortranRuntime/include/flang/Testing/fp-testing.h
+++ b/FortranRuntime/include/flang/Testing/fp-testing.h
@@ -6,15 +6,15 @@
//
//===----------------------------------------------------------------------===//
-#ifndef FORTRAN_TEST_EVALUATE_FP_TESTING_H_
-#define FORTRAN_TEST_EVALUATE_FP_TESTING_H_
+#ifndef FORTRAN_TESTING_FP_TESTING_H_
+#define FORTRAN_TESTING_FP_TESTING_H_
#include "flang/Common/target-rounding.h"
#include <fenv.h>
-using Fortran::common::RoundingMode;
using Fortran::common::RealFlags;
using Fortran::common::Rounding;
+using Fortran::common::RoundingMode;
class ScopedHostFloatingPointEnvironment {
public:
@@ -32,4 +32,4 @@ class ScopedHostFloatingPointEnvironment {
#endif
};
-#endif // FORTRAN_TEST_EVALUATE_FP_TESTING_H_
+#endif /* FORTRAN_TESTING_FP_TESTING_H_ */
diff --git a/FortranRuntime/include/flang/Testing/testing.h b/FortranRuntime/include/flang/Testing/testing.h
index d763109d62d373..404650c9a89f2c 100644
--- a/FortranRuntime/include/flang/Testing/testing.h
+++ b/FortranRuntime/include/flang/Testing/testing.h
@@ -6,8 +6,8 @@
//
//===----------------------------------------------------------------------===//
-#ifndef FORTRAN_EVALUATE_TESTING_H_
-#define FORTRAN_EVALUATE_TESTING_H_
+#ifndef FORTRAN_TESTING_TESTING_H_
+#define FORTRAN_TESTING_TESTING_H_
#include <cinttypes>
#include <string>
@@ -41,4 +41,4 @@ FailureDetailPrinter Match(const char *file, int line, const std::string &want,
FailureDetailPrinter Compare(const char *file, int line, const char *xs,
const char *rel, const char *ys, std::uint64_t x, std::uint64_t y);
} // namespace testing
-#endif // FORTRAN_EVALUATE_TESTING_H_
+#endif /* FORTRAN_TESTING_TESTING_H_ */
diff --git a/FortranRuntime/lib/Common/big-radix-floating-point.h b/FortranRuntime/lib/Common/big-radix-floating-point.h
index 7b8fb03710a3d4..6d247f3796eea5 100644
--- a/FortranRuntime/lib/Common/big-radix-floating-point.h
+++ b/FortranRuntime/lib/Common/big-radix-floating-point.h
@@ -6,8 +6,8 @@
//
//===----------------------------------------------------------------------===//
-#ifndef FORTRAN_DECIMAL_BIG_RADIX_FLOATING_POINT_H_
-#define FORTRAN_DECIMAL_BIG_RADIX_FLOATING_POINT_H_
+#ifndef FORTRAN_COMMON_BIG_RADIX_FLOATING_POINT_H_
+#define FORTRAN_COMMON_BIG_RADIX_FLOATING_POINT_H_
// This is a helper class for use in floating-point conversions between
// binary and decimal representations. It holds a multiple-precision
@@ -21,11 +21,11 @@
// for conversions between binary and decimal representations; it is not
// a general-purpose facility.
+#include "flang/Common/binary-floating-point.h"
#include "flang/Common/bit-population-count.h"
+#include "flang/Common/decimal.h"
#include "flang/Common/leading-zero-bit-count.h"
#include "flang/Common/uint128.h"
-#include "flang/Common/binary-floating-point.h"
-#include "flang/Common/decimal.h"
#include <cinttypes>
#include <limits>
#include <type_traits>
@@ -393,4 +393,4 @@ template <int PREC, int LOG10RADIX = 16> class BigRadixFloatingPointNumber {
enum FortranRounding rounding_ { RoundNearest };
};
} // namespace Fortran::decimal
-#endif
+#endif /* FORTRAN_COMMON_BIG_RADIX_FLOATING_POINT_H_ */
diff --git a/FortranRuntime/lib/Common/decimal-to-binary.cpp b/FortranRuntime/lib/Common/decimal-to-binary.cpp
index 0ef24d3bcfecfc..cbf1664e9c240d 100644
--- a/FortranRuntime/lib/Common/decimal-to-binary.cpp
+++ b/FortranRuntime/lib/Common/decimal-to-binary.cpp
@@ -7,10 +7,10 @@
//===----------------------------------------------------------------------===//
#include "big-radix-floating-point.h"
-#include "flang/Common/bit-population-count.h"
-#include "flang/Common/leading-zero-bit-count.h"
#include "flang/Common/binary-floating-point.h"
+#include "flang/Common/bit-population-count.h"
#include "flang/Common/decimal.h"
+#include "flang/Common/leading-zero-bit-count.h"
#include "flang/Runtime/freestanding-tools.h"
#include <cinttypes>
#include <cstring>
diff --git a/FortranRuntime/lib/Runtime/CMakeLists.txt b/FortranRuntime/lib/Runtime/CMakeLists.txt
index 3402dd5fe6af8f..9ccbc9ea78b0fc 100644
--- a/FortranRuntime/lib/Runtime/CMakeLists.txt
+++ b/FortranRuntime/lib/Runtime/CMakeLists.txt
@@ -139,21 +139,12 @@ set(supported_files
"${FLANGRUNTIME_SOURCE_DIR}/include/flang/Common/*.h"
)
-
set(private_headers "")
file(GLOB_RECURSE private_headers
"${FLANGRUNTIME_SOURCE_DIR}/lib/Runtime/*.h"
"${FLANGRUNTIME_SOURCE_DIR}/lib/Common/*.h"
)
-
-
-
-
-
-
-
-
get_target_property(f128_sources
FortranFloat128MathILib INTERFACE_SOURCES
)
@@ -170,17 +161,6 @@ if (f128_sources)
list(APPEND sources ${f128_sources})
endif()
-
-
-
-
-
-
-
-
-
-
-
if (NOT DEFINED WIN32)
add_fortranruntime_library(FortranRuntime STATIC
${sources}
diff --git a/FortranRuntime/lib/Runtime/CUDA/CMakeLists.txt b/FortranRuntime/lib/Runtime/CUDA/CMakeLists.txt
index f75b854d1eb3ba..81055b2737c0f1 100644
--- a/FortranRuntime/lib/Runtime/CUDA/CMakeLists.txt
+++ b/FortranRuntime/lib/Runtime/CUDA/CMakeLists.txt
@@ -1,4 +1,4 @@
-#===-- lib/Runtime/CUDA/CMakeLists.txt -------------------------------------===#
+#===-- runtime/CUDA/CMakeLists.txt -----------------------------------------===#
#
# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
# See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/CUDA/allocator.cpp b/FortranRuntime/lib/Runtime/CUDA/allocator.cpp
index 379f52b45057a0..2efd6bf0a95249 100644
--- a/FortranRuntime/lib/Runtime/CUDA/allocator.cpp
+++ b/FortranRuntime/lib/Runtime/CUDA/allocator.cpp
@@ -11,9 +11,9 @@
#include "../stat.h"
#include "../terminator.h"
#include "../type-info.h"
-#include "flang/Support/Fortran.h"
#include "flang/ISO_Fortran_binding_wrapper.h"
#include "flang/Runtime/allocator-registry.h"
+#include "flang/Support/Fortran.h"
#include "cuda_runtime.h"
diff --git a/FortranRuntime/lib/Runtime/Float128Math/CMakeLists.txt b/FortranRuntime/lib/Runtime/Float128Math/CMakeLists.txt
index 1ff158c401855f..a5f5bec1e7e4b8 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/CMakeLists.txt
+++ b/FortranRuntime/lib/Runtime/Float128Math/CMakeLists.txt
@@ -1,4 +1,4 @@
-#===-- lib/Runtime/Float128Math/CMakeLists.txt -----------------------------===#
+#===-- runtime/Float128Math/CMakeLists.txt ---------------------------------===#
#
# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
# See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/Float128Math/math-entries.h b/FortranRuntime/lib/Runtime/Float128Math/math-entries.h
index 798efdfb1e120c..cb1e0130602260 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/math-entries.h
+++ b/FortranRuntime/lib/Runtime/Float128Math/math-entries.h
@@ -8,10 +8,10 @@
#ifndef FORTRAN_RUNTIME_FLOAT128MATH_MATH_ENTRIES_H_
#define FORTRAN_RUNTIME_FLOAT128MATH_MATH_ENTRIES_H_
-#include "terminator.h"
-#include "tools.h"
#include "flang/Common/float128.h"
#include "flang/Runtime/entry-names.h"
+#include "terminator.h"
+#include "tools.h"
#include <cfloat>
#include <cmath>
#include <type_traits>
@@ -222,4 +222,4 @@ DEFINE_SIMPLE_ALIAS(Yn, ynl)
} // namespace Fortran::runtime
-#endif // FORTRAN_RUNTIME_FLOAT128MATH_MATH_ENTRIES_H_
+#endif /* FORTRAN_RUNTIME_FLOAT128MATH_MATH_ENTRIES_H_ */
diff --git a/FortranRuntime/lib/Runtime/Float128Math/numeric-template-specs.h b/FortranRuntime/lib/Runtime/Float128Math/numeric-template-specs.h
index ca9696e18f6a92..2a843df2d1d861 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/numeric-template-specs.h
+++ b/FortranRuntime/lib/Runtime/Float128Math/numeric-template-specs.h
@@ -52,4 +52,4 @@ template <> struct SQRTTy<F128Type> {
};
} // namespace Fortran::runtime
-#endif // FORTRAN_RUNTIME_FLOAT128MATH_NUMERIC_TEMPLATE_SPECS_H_
+#endif /* FORTRAN_RUNTIME_FLOAT128MATH_NUMERIC_TEMPLATE_SPECS_H_ */
diff --git a/FortranRuntime/lib/Runtime/ISO_Fortran_binding.cpp b/FortranRuntime/lib/Runtime/ISO_Fortran_binding.cpp
index d2fab4bbc30b4d..9711b2bcf49757 100644
--- a/FortranRuntime/lib/Runtime/ISO_Fortran_binding.cpp
+++ b/FortranRuntime/lib/Runtime/ISO_Fortran_binding.cpp
@@ -10,11 +10,11 @@
// as specified in section 18.5.5 of Fortran 2018.
#include "ISO_Fortran_util.h"
-#include "terminator.h"
#include "flang/Common/ISO_Fortran_binding_wrapper.h"
#include "flang/Runtime/descriptor.h"
#include "flang/Runtime/pointer.h"
#include "flang/Runtime/type-code.h"
+#include "terminator.h"
#include <cstdlib>
namespace Fortran::ISO {
diff --git a/FortranRuntime/lib/Runtime/ISO_Fortran_util.h b/FortranRuntime/lib/Runtime/ISO_Fortran_util.h
index c45e8fc7a8d253..7ab280733028af 100644
--- a/FortranRuntime/lib/Runtime/ISO_Fortran_util.h
+++ b/FortranRuntime/lib/Runtime/ISO_Fortran_util.h
@@ -11,10 +11,10 @@
// Internal utils for establishing CFI_cdesc_t descriptors.
-#include "terminator.h"
#include "flang/Common/ISO_Fortran_binding_wrapper.h"
#include "flang/Runtime/descriptor.h"
#include "flang/Runtime/type-code.h"
+#include "terminator.h"
#include <cstdlib>
namespace Fortran::ISO {
@@ -99,4 +99,4 @@ static inline RT_API_ATTRS void EstablishDescriptor(CFI_cdesc_t *descriptor,
}
}
} // namespace Fortran::ISO
-#endif // FORTRAN_RUNTIME_ISO_FORTRAN_UTIL_H_
+#endif /* FORTRAN_RUNTIME_ISO_FORTRAN_UTIL_H_ */
diff --git a/FortranRuntime/lib/Runtime/allocatable.cpp b/FortranRuntime/lib/Runtime/allocatable.cpp
index e3b43a5f813935..8b6c1a4c1477eb 100644
--- a/FortranRuntime/lib/Runtime/allocatable.cpp
+++ b/FortranRuntime/lib/Runtime/allocatable.cpp
@@ -9,12 +9,12 @@
#include "flang/Runtime/allocatable.h"
#include "assign-impl.h"
#include "derived.h"
-#include "stat.h"
-#include "terminator.h"
-#include "type-info.h"
#include "flang/Common/ISO_Fortran_binding_wrapper.h"
#include "flang/Runtime/assign.h"
#include "flang/Runtime/descriptor.h"
+#include "stat.h"
+#include "terminator.h"
+#include "type-info.h"
namespace Fortran::runtime {
extern "C" {
diff --git a/FortranRuntime/lib/Runtime/array-constructor.cpp b/FortranRuntime/lib/Runtime/array-constructor.cpp
index 287d054887abf0..db57d4fc4c3f68 100644
--- a/FortranRuntime/lib/Runtime/array-constructor.cpp
+++ b/FortranRuntime/lib/Runtime/array-constructor.cpp
@@ -8,12 +8,12 @@
#include "flang/Runtime/array-constructor.h"
#include "derived.h"
-#include "terminator.h"
-#include "tools.h"
-#include "type-info.h"
#include "flang/Runtime/allocatable.h"
#include "flang/Runtime/assign.h"
#include "flang/Runtime/descriptor.h"
+#include "terminator.h"
+#include "tools.h"
+#include "type-info.h"
namespace Fortran::runtime {
diff --git a/FortranRuntime/lib/Runtime/assign-impl.h b/FortranRuntime/lib/Runtime/assign-impl.h
index 6bc8ef78c38a90..d5538fab18b6b5 100644
--- a/FortranRuntime/lib/Runtime/assign-impl.h
+++ b/FortranRuntime/lib/Runtime/assign-impl.h
@@ -21,4 +21,4 @@ RT_API_ATTRS void DoFromSourceAssign(
Descriptor &, const Descriptor &, Terminator &);
} // namespace Fortran::runtime
-#endif // FORTRAN_RUNTIME_ASSIGN_IMPL_H_
+#endif /* FORTRAN_RUNTIME_ASSIGN_IMPL_H_ */
diff --git a/FortranRuntime/lib/Runtime/assign.cpp b/FortranRuntime/lib/Runtime/assign.cpp
index 7c5eb135d4cfdf..cc38e55e3a9e1e 100644
--- a/FortranRuntime/lib/Runtime/assign.cpp
+++ b/FortranRuntime/lib/Runtime/assign.cpp
@@ -9,11 +9,11 @@
#include "flang/Runtime/assign.h"
#include "assign-impl.h"
#include "derived.h"
+#include "flang/Runtime/descriptor.h"
#include "stat.h"
#include "terminator.h"
#include "tools.h"
#include "type-info.h"
-#include "flang/Runtime/descriptor.h"
namespace Fortran::runtime {
diff --git a/FortranRuntime/lib/Runtime/buffer.h b/FortranRuntime/lib/Runtime/buffer.h
index 24e43734552e99..dd3c19fa14392f 100644
--- a/FortranRuntime/lib/Runtime/buffer.h
+++ b/FortranRuntime/lib/Runtime/buffer.h
@@ -11,9 +11,9 @@
#ifndef FORTRAN_RUNTIME_BUFFER_H_
#define FORTRAN_RUNTIME_BUFFER_H_
-#include "io-error.h"
#include "flang/Runtime/freestanding-tools.h"
#include "flang/Runtime/memory.h"
+#include "io-error.h"
#include <algorithm>
#include <cinttypes>
#include <cstring>
@@ -221,4 +221,4 @@ template <typename STORE, std::size_t minBuffer = 65536> class FileFrame {
bool dirty_{false};
};
} // namespace Fortran::runtime::io
-#endif // FORTRAN_RUNTIME_BUFFER_H_
+#endif /* FORTRAN_RUNTIME_BUFFER_H_ */
diff --git a/FortranRuntime/lib/Runtime/character.cpp b/FortranRuntime/lib/Runtime/character.cpp
index 73d3d93c5015f6..32fc010c6c04dd 100644
--- a/FortranRuntime/lib/Runtime/character.cpp
+++ b/FortranRuntime/lib/Runtime/character.cpp
@@ -7,13 +7,13 @@
//===----------------------------------------------------------------------===//
#include "flang/Runtime/character.h"
-#include "terminator.h"
-#include "tools.h"
#include "flang/Common/bit-population-count.h"
#include "flang/Common/uint128.h"
#include "flang/Runtime/character.h"
#include "flang/Runtime/cpp-type.h"
#include "flang/Runtime/descriptor.h"
+#include "terminator.h"
+#include "tools.h"
#include <algorithm>
#include <cstring>
diff --git a/FortranRuntime/lib/Runtime/command.cpp b/FortranRuntime/lib/Runtime/command.cpp
index 50a084714e69a4..dc57758d4f7955 100644
--- a/FortranRuntime/lib/Runtime/command.cpp
+++ b/FortranRuntime/lib/Runtime/command.cpp
@@ -8,10 +8,10 @@
#include "flang/Runtime/command.h"
#include "environment.h"
+#include "flang/Runtime/descriptor.h"
#include "stat.h"
#include "terminator.h"
#include "tools.h"
-#include "flang/Runtime/descriptor.h"
#include <cstdlib>
#include <limits>
diff --git a/FortranRuntime/lib/Runtime/complex-reduction.h b/FortranRuntime/lib/Runtime/complex-reduction.h
index 1ca5b9a33c4640..e8e287215b7d97 100644
--- a/FortranRuntime/lib/Runtime/complex-reduction.h
+++ b/FortranRuntime/lib/Runtime/complex-reduction.h
@@ -155,4 +155,4 @@ void RTNAME(ReduceComplex16DimValue)(
REDUCE_DIM_ARGS(CFloat128ComplexType, CFloat128ComplexType_value_op));
#endif
-#endif // FORTRAN_RUNTIME_COMPLEX_REDUCTION_H_
+#endif /* FORTRAN_RUNTIME_COMPLEX_REDUCTION_H_ */
diff --git a/FortranRuntime/lib/Runtime/connection.h b/FortranRuntime/lib/Runtime/connection.h
index f74e94ff6fb4a3..92a3a9c3860a3e 100644
--- a/FortranRuntime/lib/Runtime/connection.h
+++ b/FortranRuntime/lib/Runtime/connection.h
@@ -8,11 +8,11 @@
// Fortran I/O connection state (abstracted over internal & external units)
-#ifndef FORTRAN_RUNTIME_IO_CONNECTION_H_
-#define FORTRAN_RUNTIME_IO_CONNECTION_H_
+#ifndef FORTRAN_RUNTIME_CONNECTION_H_
+#define FORTRAN_RUNTIME_CONNECTION_H_
-#include "format.h"
#include "flang/Common/optional.h"
+#include "format.h"
#include <cinttypes>
namespace Fortran::runtime::io {
@@ -124,4 +124,4 @@ class SavedPosition {
};
} // namespace Fortran::runtime::io
-#endif // FORTRAN_RUNTIME_IO_CONNECTION_H_
+#endif /* FORTRAN_RUNTIME_CONNECTION_H_ */
diff --git a/FortranRuntime/lib/Runtime/copy.cpp b/FortranRuntime/lib/Runtime/copy.cpp
index 72a86e3b80a7d5..39c7da45172a43 100644
--- a/FortranRuntime/lib/Runtime/copy.cpp
+++ b/FortranRuntime/lib/Runtime/copy.cpp
@@ -7,11 +7,11 @@
//===----------------------------------------------------------------------===//
#include "copy.h"
+#include "flang/Runtime/allocatable.h"
+#include "flang/Runtime/descriptor.h"
#include "stack.h"
#include "terminator.h"
#include "type-info.h"
-#include "flang/Runtime/allocatable.h"
-#include "flang/Runtime/descriptor.h"
#include <cstring>
namespace Fortran::runtime {
diff --git a/FortranRuntime/lib/Runtime/copy.h b/FortranRuntime/lib/Runtime/copy.h
index 6d37b075e74504..f2c5b41718b71c 100644
--- a/FortranRuntime/lib/Runtime/copy.h
+++ b/FortranRuntime/lib/Runtime/copy.h
@@ -22,4 +22,4 @@ RT_API_ATTRS void CopyElement(const Descriptor &to, const SubscriptValue toAt[],
const Descriptor &from, const SubscriptValue fromAt[], Terminator &);
} // namespace Fortran::runtime
-#endif // FORTRAN_RUNTIME_COPY_H_
+#endif /* FORTRAN_RUNTIME_COPY_H_ */
diff --git a/FortranRuntime/lib/Runtime/derived-api.cpp b/FortranRuntime/lib/Runtime/derived-api.cpp
index 0bcdd45ddbbaec..4b68cdbbed7b2c 100644
--- a/FortranRuntime/lib/Runtime/derived-api.cpp
+++ b/FortranRuntime/lib/Runtime/derived-api.cpp
@@ -8,10 +8,10 @@
#include "flang/Runtime/derived-api.h"
#include "derived.h"
+#include "flang/Runtime/descriptor.h"
#include "terminator.h"
#include "tools.h"
#include "type-info.h"
-#include "flang/Runtime/descriptor.h"
namespace Fortran::runtime {
diff --git a/FortranRuntime/lib/Runtime/derived.cpp b/FortranRuntime/lib/Runtime/derived.cpp
index 04d765211db63b..52bf54d62c8599 100644
--- a/FortranRuntime/lib/Runtime/derived.cpp
+++ b/FortranRuntime/lib/Runtime/derived.cpp
@@ -7,11 +7,11 @@
//===----------------------------------------------------------------------===//
#include "derived.h"
+#include "flang/Runtime/descriptor.h"
#include "stat.h"
#include "terminator.h"
#include "tools.h"
#include "type-info.h"
-#include "flang/Runtime/descriptor.h"
namespace Fortran::runtime {
diff --git a/FortranRuntime/lib/Runtime/derived.h b/FortranRuntime/lib/Runtime/derived.h
index 27c04c7cc56969..e03e657f01cee9 100644
--- a/FortranRuntime/lib/Runtime/derived.h
+++ b/FortranRuntime/lib/Runtime/derived.h
@@ -40,4 +40,4 @@ RT_API_ATTRS void Destroy(const Descriptor &, bool finalize,
RT_API_ATTRS bool HasDynamicComponent(const Descriptor &);
} // namespace Fortran::runtime
-#endif // FORTRAN_RUNTIME_DERIVED_H_
+#endif /* FORTRAN_RUNTIME_DERIVED_H_ */
diff --git a/FortranRuntime/lib/Runtime/descriptor-io.h b/FortranRuntime/lib/Runtime/descriptor-io.h
index 58cb091f852596..2ccad0cea70a29 100644
--- a/FortranRuntime/lib/Runtime/descriptor-io.h
+++ b/FortranRuntime/lib/Runtime/descriptor-io.h
@@ -16,15 +16,15 @@
#include "edit-input.h"
#include "edit-output.h"
+#include "flang/Common/optional.h"
+#include "flang/Common/uint128.h"
+#include "flang/Runtime/cpp-type.h"
+#include "flang/Runtime/descriptor.h"
#include "io-stmt.h"
#include "namelist.h"
#include "terminator.h"
#include "type-info.h"
#include "unit.h"
-#include "flang/Common/optional.h"
-#include "flang/Common/uint128.h"
-#include "flang/Runtime/cpp-type.h"
-#include "flang/Runtime/descriptor.h"
namespace Fortran::runtime::io::descr {
template <typename A>
@@ -608,4 +608,4 @@ static RT_API_ATTRS bool DescriptorIO(IoStatementState &io,
return false;
}
} // namespace Fortran::runtime::io::descr
-#endif // FORTRAN_RUNTIME_DESCRIPTOR_IO_H_
+#endif /* FORTRAN_RUNTIME_DESCRIPTOR_IO_H_ */
diff --git a/FortranRuntime/lib/Runtime/descriptor.cpp b/FortranRuntime/lib/Runtime/descriptor.cpp
index f064fe3dcc32e9..6756134b06e7b1 100644
--- a/FortranRuntime/lib/Runtime/descriptor.cpp
+++ b/FortranRuntime/lib/Runtime/descriptor.cpp
@@ -9,12 +9,12 @@
#include "flang/Runtime/descriptor.h"
#include "ISO_Fortran_util.h"
#include "derived.h"
+#include "flang/Runtime/allocator-registry.h"
#include "memory.h"
#include "stat.h"
#include "terminator.h"
#include "tools.h"
#include "type-info.h"
-#include "flang/Runtime/allocator-registry.h"
#include <cassert>
#include <cstdlib>
#include <cstring>
diff --git a/FortranRuntime/lib/Runtime/dot-product.cpp b/FortranRuntime/lib/Runtime/dot-product.cpp
index 9eb22790e38a69..ab1cfa58ef3d02 100644
--- a/FortranRuntime/lib/Runtime/dot-product.cpp
+++ b/FortranRuntime/lib/Runtime/dot-product.cpp
@@ -6,13 +6,13 @@
//
//===----------------------------------------------------------------------===//
-#include "float.h"
-#include "terminator.h"
-#include "tools.h"
#include "flang/Common/float128.h"
#include "flang/Runtime/cpp-type.h"
#include "flang/Runtime/descriptor.h"
#include "flang/Runtime/reduction.h"
+#include "float.h"
+#include "terminator.h"
+#include "tools.h"
#include <cfloat>
#include <cinttypes>
diff --git a/FortranRuntime/lib/Runtime/edit-input.cpp b/FortranRuntime/lib/Runtime/edit-input.cpp
index 6ebb0e7aca4ade..eaa9d0d7e641e7 100644
--- a/FortranRuntime/lib/Runtime/edit-input.cpp
+++ b/FortranRuntime/lib/Runtime/edit-input.cpp
@@ -7,12 +7,12 @@
//===----------------------------------------------------------------------===//
#include "edit-input.h"
-#include "namelist.h"
-#include "utf.h"
#include "flang/Common/optional.h"
#include "flang/Common/real.h"
#include "flang/Common/uint128.h"
#include "flang/Runtime/freestanding-tools.h"
+#include "namelist.h"
+#include "utf.h"
#include <algorithm>
#include <cfenv>
diff --git a/FortranRuntime/lib/Runtime/edit-input.h b/FortranRuntime/lib/Runtime/edit-input.h
index 96dc3f561c22a7..2eda81a6d4e11d 100644
--- a/FortranRuntime/lib/Runtime/edit-input.h
+++ b/FortranRuntime/lib/Runtime/edit-input.h
@@ -9,9 +9,9 @@
#ifndef FORTRAN_RUNTIME_EDIT_INPUT_H_
#define FORTRAN_RUNTIME_EDIT_INPUT_H_
+#include "flang/Common/decimal.h"
#include "format.h"
#include "io-stmt.h"
-#include "flang/Common/decimal.h"
namespace Fortran::runtime::io {
@@ -50,4 +50,4 @@ extern template RT_API_ATTRS bool EditCharacterInput(
IoStatementState &, const DataEdit &, char32_t *, std::size_t);
} // namespace Fortran::runtime::io
-#endif // FORTRAN_RUNTIME_EDIT_INPUT_H_
+#endif /* FORTRAN_RUNTIME_EDIT_INPUT_H_ */
diff --git a/FortranRuntime/lib/Runtime/edit-output.cpp b/FortranRuntime/lib/Runtime/edit-output.cpp
index ccaf8085f016fd..1fab7db6d3b187 100644
--- a/FortranRuntime/lib/Runtime/edit-output.cpp
+++ b/FortranRuntime/lib/Runtime/edit-output.cpp
@@ -8,9 +8,9 @@
#include "edit-output.h"
#include "emit-encoded.h"
-#include "utf.h"
#include "flang/Common/real.h"
#include "flang/Common/uint128.h"
+#include "utf.h"
#include <algorithm>
namespace Fortran::runtime::io {
diff --git a/FortranRuntime/lib/Runtime/edit-output.h b/FortranRuntime/lib/Runtime/edit-output.h
index 7f303020a83a84..cb25b68a35f05b 100644
--- a/FortranRuntime/lib/Runtime/edit-output.h
+++ b/FortranRuntime/lib/Runtime/edit-output.h
@@ -18,10 +18,10 @@
// Drives the same fast binary-to-decimal formatting templates used
// in the f18 front-end.
+#include "flang/Common/decimal.h"
+#include "flang/Common/uint128.h"
#include "format.h"
#include "io-stmt.h"
-#include "flang/Common/uint128.h"
-#include "flang/Common/decimal.h"
namespace Fortran::runtime::io {
@@ -138,4 +138,4 @@ extern template class RealOutputEditing<10>;
extern template class RealOutputEditing<16>;
} // namespace Fortran::runtime::io
-#endif // FORTRAN_RUNTIME_EDIT_OUTPUT_H_
+#endif /* FORTRAN_RUNTIME_EDIT_OUTPUT_H_ */
diff --git a/FortranRuntime/lib/Runtime/emit-encoded.h b/FortranRuntime/lib/Runtime/emit-encoded.h
index f07fcced488435..11163a41720795 100644
--- a/FortranRuntime/lib/Runtime/emit-encoded.h
+++ b/FortranRuntime/lib/Runtime/emit-encoded.h
@@ -114,4 +114,4 @@ RT_API_ATTRS bool EmitRepeated(CONTEXT &to, char ch, std::size_t n) {
}
} // namespace Fortran::runtime::io
-#endif // FORTRAN_RUNTIME_EMIT_ENCODED_H_
+#endif /* FORTRAN_RUNTIME_EMIT_ENCODED_H_ */
diff --git a/FortranRuntime/lib/Runtime/environment.h b/FortranRuntime/lib/Runtime/environment.h
index 71526d2b85d74c..7d10b3a2b934bf 100644
--- a/FortranRuntime/lib/Runtime/environment.h
+++ b/FortranRuntime/lib/Runtime/environment.h
@@ -9,8 +9,8 @@
#ifndef FORTRAN_RUNTIME_ENVIRONMENT_H_
#define FORTRAN_RUNTIME_ENVIRONMENT_H_
-#include "flang/Common/optional.h"
#include "flang/Common/decimal.h"
+#include "flang/Common/optional.h"
struct EnvironmentDefaultList;
@@ -64,4 +64,4 @@ RT_OFFLOAD_VAR_GROUP_END
} // namespace Fortran::runtime
-#endif // FORTRAN_RUNTIME_ENVIRONMENT_H_
+#endif /* FORTRAN_RUNTIME_ENVIRONMENT_H_ */
diff --git a/FortranRuntime/lib/Runtime/execute.cpp b/FortranRuntime/lib/Runtime/execute.cpp
index 77aac164242612..54f28d052873b4 100644
--- a/FortranRuntime/lib/Runtime/execute.cpp
+++ b/FortranRuntime/lib/Runtime/execute.cpp
@@ -8,10 +8,10 @@
#include "flang/Runtime/execute.h"
#include "environment.h"
+#include "flang/Runtime/descriptor.h"
#include "stat.h"
#include "terminator.h"
#include "tools.h"
-#include "flang/Runtime/descriptor.h"
#include <cstdlib>
#include <errno.h>
#include <future>
diff --git a/FortranRuntime/lib/Runtime/extensions.cpp b/FortranRuntime/lib/Runtime/extensions.cpp
index e75fa75893a82b..94bfa3059e6b45 100644
--- a/FortranRuntime/lib/Runtime/extensions.cpp
+++ b/FortranRuntime/lib/Runtime/extensions.cpp
@@ -10,12 +10,12 @@
// extensions that will eventually be implemented in Fortran.
#include "flang/Runtime/extensions.h"
-#include "terminator.h"
-#include "tools.h"
#include "flang/Runtime/command.h"
#include "flang/Runtime/descriptor.h"
#include "flang/Runtime/entry-names.h"
#include "flang/Runtime/io-api.h"
+#include "terminator.h"
+#include "tools.h"
#include <chrono>
#include <cstring>
#include <ctime>
diff --git a/FortranRuntime/lib/Runtime/extrema.cpp b/FortranRuntime/lib/Runtime/extrema.cpp
index be9da63d7bd6b8..0809cb1d5f2ae2 100644
--- a/FortranRuntime/lib/Runtime/extrema.cpp
+++ b/FortranRuntime/lib/Runtime/extrema.cpp
@@ -10,10 +10,10 @@
// and shapes and (for MAXLOC & MINLOC) result integer kinds. Also implements
// NORM2 using common infrastructure.
-#include "reduction-templates.h"
#include "flang/Common/float128.h"
#include "flang/Runtime/character.h"
#include "flang/Runtime/reduction.h"
+#include "reduction-templates.h"
#include <algorithm>
#include <cfloat>
#include <cinttypes>
diff --git a/FortranRuntime/lib/Runtime/file.cpp b/FortranRuntime/lib/Runtime/file.cpp
index 44e3850cdfcb13..b82f1c63e397f9 100644
--- a/FortranRuntime/lib/Runtime/file.cpp
+++ b/FortranRuntime/lib/Runtime/file.cpp
@@ -7,9 +7,9 @@
//===----------------------------------------------------------------------===//
#include "file.h"
-#include "tools.h"
#include "flang/Runtime/magic-numbers.h"
#include "flang/Runtime/memory.h"
+#include "tools.h"
#include <algorithm>
#include <cerrno>
#include <cstring>
diff --git a/FortranRuntime/lib/Runtime/file.h b/FortranRuntime/lib/Runtime/file.h
index 6890cb62d66652..66d62756634b24 100644
--- a/FortranRuntime/lib/Runtime/file.h
+++ b/FortranRuntime/lib/Runtime/file.h
@@ -11,9 +11,9 @@
#ifndef FORTRAN_RUNTIME_FILE_H_
#define FORTRAN_RUNTIME_FILE_H_
-#include "io-error.h"
#include "flang/Common/optional.h"
#include "flang/Runtime/memory.h"
+#include "io-error.h"
#include <cinttypes>
namespace Fortran::runtime::io {
@@ -113,4 +113,4 @@ RT_API_ATTRS bool MayWrite(const char *path);
RT_API_ATTRS bool MayReadAndWrite(const char *path);
RT_API_ATTRS std::int64_t SizeInBytes(const char *path);
} // namespace Fortran::runtime::io
-#endif // FORTRAN_RUNTIME_FILE_H_
+#endif /* FORTRAN_RUNTIME_FILE_H_ */
diff --git a/FortranRuntime/lib/Runtime/findloc.cpp b/FortranRuntime/lib/Runtime/findloc.cpp
index da5fe0c0a0a467..47c51fbcef4939 100644
--- a/FortranRuntime/lib/Runtime/findloc.cpp
+++ b/FortranRuntime/lib/Runtime/findloc.cpp
@@ -9,9 +9,9 @@
// Implements FINDLOC for all required operand types and shapes and result
// integer kinds.
-#include "reduction-templates.h"
#include "flang/Runtime/character.h"
#include "flang/Runtime/reduction.h"
+#include "reduction-templates.h"
#include <cinttypes>
#include <complex>
diff --git a/FortranRuntime/lib/Runtime/format-implementation.h b/FortranRuntime/lib/Runtime/format-implementation.h
index 2ed6006c3b2fa0..8d0d0f3376eafc 100644
--- a/FortranRuntime/lib/Runtime/format-implementation.h
+++ b/FortranRuntime/lib/Runtime/format-implementation.h
@@ -12,12 +12,12 @@
#define FORTRAN_RUNTIME_FORMAT_IMPLEMENTATION_H_
#include "emit-encoded.h"
+#include "flang/Common/decimal.h"
+#include "flang/Common/format.h"
+#include "flang/Runtime/main.h"
#include "format.h"
#include "io-stmt.h"
#include "memory.h"
-#include "flang/Common/format.h"
-#include "flang/Common/decimal.h"
-#include "flang/Runtime/main.h"
#include <algorithm>
#include <cstring>
#include <limits>
@@ -601,4 +601,4 @@ RT_API_ATTRS void FormatControl<CONTEXT>::Finish(Context &context) {
}
}
} // namespace Fortran::runtime::io
-#endif // FORTRAN_RUNTIME_FORMAT_IMPLEMENTATION_H_
+#endif /* FORTRAN_RUNTIME_FORMAT_IMPLEMENTATION_H_ */
diff --git a/FortranRuntime/lib/Runtime/format.h b/FortranRuntime/lib/Runtime/format.h
index b9c6979d1c2c98..3e0807ee452a7e 100644
--- a/FortranRuntime/lib/Runtime/format.h
+++ b/FortranRuntime/lib/Runtime/format.h
@@ -12,11 +12,11 @@
#define FORTRAN_RUNTIME_FORMAT_H_
#include "environment.h"
-#include "io-error.h"
#include "flang/Common/Fortran-consts.h"
-#include "flang/Common/optional.h"
#include "flang/Common/decimal.h"
+#include "flang/Common/optional.h"
#include "flang/Runtime/freestanding-tools.h"
+#include "io-error.h"
#include <cinttypes>
namespace Fortran::runtime {
@@ -201,4 +201,4 @@ template <typename CONTEXT> class FormatControl {
Iteration stack_[maxMaxHeight];
};
} // namespace Fortran::runtime::io
-#endif // FORTRAN_RUNTIME_FORMAT_H_
+#endif /* FORTRAN_RUNTIME_FORMAT_H_ */
diff --git a/FortranRuntime/lib/Runtime/inquiry.cpp b/FortranRuntime/lib/Runtime/inquiry.cpp
index 9a5ef0cea210db..172b46037d6c4b 100644
--- a/FortranRuntime/lib/Runtime/inquiry.cpp
+++ b/FortranRuntime/lib/Runtime/inquiry.cpp
@@ -11,9 +11,9 @@
#include "flang/Runtime/inquiry.h"
#include "copy.h"
+#include "flang/Runtime/descriptor.h"
#include "terminator.h"
#include "tools.h"
-#include "flang/Runtime/descriptor.h"
#include <algorithm>
namespace Fortran::runtime {
diff --git a/FortranRuntime/lib/Runtime/internal-unit.cpp b/FortranRuntime/lib/Runtime/internal-unit.cpp
index 95d371a49ac187..81b937ba63d4b8 100644
--- a/FortranRuntime/lib/Runtime/internal-unit.cpp
+++ b/FortranRuntime/lib/Runtime/internal-unit.cpp
@@ -7,9 +7,9 @@
//===----------------------------------------------------------------------===//
#include "internal-unit.h"
-#include "io-error.h"
#include "flang/Runtime/descriptor.h"
#include "flang/Runtime/freestanding-tools.h"
+#include "io-error.h"
#include <algorithm>
#include <type_traits>
diff --git a/FortranRuntime/lib/Runtime/internal-unit.h b/FortranRuntime/lib/Runtime/internal-unit.h
index 444bc9ab515994..c4107696810f2b 100644
--- a/FortranRuntime/lib/Runtime/internal-unit.h
+++ b/FortranRuntime/lib/Runtime/internal-unit.h
@@ -8,8 +8,8 @@
// Fortran internal I/O "units"
-#ifndef FORTRAN_RUNTIME_IO_INTERNAL_UNIT_H_
-#define FORTRAN_RUNTIME_IO_INTERNAL_UNIT_H_
+#ifndef FORTRAN_RUNTIME_INTERNAL_UNIT_H_
+#define FORTRAN_RUNTIME_INTERNAL_UNIT_H_
#include "connection.h"
#include "flang/Runtime/descriptor.h"
@@ -56,4 +56,4 @@ template <Direction DIR> class InternalDescriptorUnit : public ConnectionState {
extern template class InternalDescriptorUnit<Direction::Output>;
extern template class InternalDescriptorUnit<Direction::Input>;
} // namespace Fortran::runtime::io
-#endif // FORTRAN_RUNTIME_IO_INTERNAL_UNIT_H_
+#endif /* FORTRAN_RUNTIME_INTERNAL_UNIT_H_ */
diff --git a/FortranRuntime/lib/Runtime/io-api-common.h b/FortranRuntime/lib/Runtime/io-api-common.h
index 9b4c3405b0991e..427666723501a2 100644
--- a/FortranRuntime/lib/Runtime/io-api-common.h
+++ b/FortranRuntime/lib/Runtime/io-api-common.h
@@ -6,15 +6,15 @@
//
//===----------------------------------------------------------------------===//
-#ifndef FLANG_RUNTIME_IO_API_COMMON_H_
-#define FLANG_RUNTIME_IO_API_COMMON_H_
+#ifndef FORTRAN_RUNTIME_IO_API_COMMON_H_
+#define FORTRAN_RUNTIME_IO_API_COMMON_H_
-#include "io-stmt.h"
-#include "terminator.h"
-#include "unit.h"
#include "flang/Common/api-attrs.h"
#include "flang/Common/optional.h"
#include "flang/Runtime/io-api.h"
+#include "io-stmt.h"
+#include "terminator.h"
+#include "unit.h"
namespace Fortran::runtime::io {
@@ -94,4 +94,4 @@ RT_API_ATTRS Cookie BeginExternalListIO(
}
} // namespace Fortran::runtime::io
-#endif // FLANG_RUNTIME_IO_API_COMMON_H_
+#endif /* FORTRAN_RUNTIME_IO_API_COMMON_H_ */
diff --git a/FortranRuntime/lib/Runtime/io-api-minimal.cpp b/FortranRuntime/lib/Runtime/io-api-minimal.cpp
index 6bc262cae78458..683694bd63c068 100644
--- a/FortranRuntime/lib/Runtime/io-api-minimal.cpp
+++ b/FortranRuntime/lib/Runtime/io-api-minimal.cpp
@@ -10,13 +10,13 @@
// list-directed output (PRINT *) of intrinsic types.
#include "edit-output.h"
+#include "flang/Runtime/io-api.h"
#include "format.h"
#include "io-api-common.h"
#include "io-stmt.h"
#include "terminator.h"
#include "tools.h"
#include "unit.h"
-#include "flang/Runtime/io-api.h"
namespace Fortran::runtime::io {
RT_EXT_API_GROUP_BEGIN
diff --git a/FortranRuntime/lib/Runtime/io-api.cpp b/FortranRuntime/lib/Runtime/io-api.cpp
index f4a396d4c49a45..102ea26b359111 100644
--- a/FortranRuntime/lib/Runtime/io-api.cpp
+++ b/FortranRuntime/lib/Runtime/io-api.cpp
@@ -18,15 +18,15 @@
#include "edit-input.h"
#include "edit-output.h"
#include "environment.h"
+#include "flang/Common/optional.h"
+#include "flang/Runtime/descriptor.h"
+#include "flang/Runtime/memory.h"
#include "format.h"
#include "io-api-common.h"
#include "io-stmt.h"
#include "terminator.h"
#include "tools.h"
#include "unit.h"
-#include "flang/Common/optional.h"
-#include "flang/Runtime/descriptor.h"
-#include "flang/Runtime/memory.h"
#include <cstdlib>
#include <memory>
diff --git a/FortranRuntime/lib/Runtime/io-error.cpp b/FortranRuntime/lib/Runtime/io-error.cpp
index 053667462058de..b14a30354d2347 100644
--- a/FortranRuntime/lib/Runtime/io-error.cpp
+++ b/FortranRuntime/lib/Runtime/io-error.cpp
@@ -8,8 +8,8 @@
#include "io-error.h"
#include "config.h"
-#include "tools.h"
#include "flang/Runtime/magic-numbers.h"
+#include "tools.h"
#include <cerrno>
#include <cstdarg>
#include <cstdio>
diff --git a/FortranRuntime/lib/Runtime/io-error.h b/FortranRuntime/lib/Runtime/io-error.h
index b03e07567a0607..7388a2134ed0d3 100644
--- a/FortranRuntime/lib/Runtime/io-error.h
+++ b/FortranRuntime/lib/Runtime/io-error.h
@@ -15,9 +15,9 @@
#ifndef FORTRAN_RUNTIME_IO_ERROR_H_
#define FORTRAN_RUNTIME_IO_ERROR_H_
-#include "terminator.h"
#include "flang/Runtime/iostat.h"
#include "flang/Runtime/memory.h"
+#include "terminator.h"
#include <cinttypes>
namespace Fortran::runtime::io {
@@ -78,4 +78,4 @@ class IoErrorHandler : public Terminator {
};
} // namespace Fortran::runtime::io
-#endif // FORTRAN_RUNTIME_IO_ERROR_H_
+#endif /* FORTRAN_RUNTIME_IO_ERROR_H_ */
diff --git a/FortranRuntime/lib/Runtime/io-stmt.cpp b/FortranRuntime/lib/Runtime/io-stmt.cpp
index 80c96710eb49ca..5be5d98ace0d8a 100644
--- a/FortranRuntime/lib/Runtime/io-stmt.cpp
+++ b/FortranRuntime/lib/Runtime/io-stmt.cpp
@@ -9,11 +9,11 @@
#include "io-stmt.h"
#include "connection.h"
#include "emit-encoded.h"
+#include "flang/Runtime/memory.h"
#include "format.h"
#include "tools.h"
#include "unit.h"
#include "utf.h"
-#include "flang/Runtime/memory.h"
#include <algorithm>
#include <cstdio>
#include <cstring>
diff --git a/FortranRuntime/lib/Runtime/io-stmt.h b/FortranRuntime/lib/Runtime/io-stmt.h
index e90e64c8fd1ff3..79a8b28c8aa19f 100644
--- a/FortranRuntime/lib/Runtime/io-stmt.h
+++ b/FortranRuntime/lib/Runtime/io-stmt.h
@@ -13,14 +13,14 @@
#include "connection.h"
#include "file.h"
-#include "format.h"
-#include "internal-unit.h"
-#include "io-error.h"
#include "flang/Common/optional.h"
#include "flang/Common/reference-wrapper.h"
#include "flang/Common/visit.h"
#include "flang/Runtime/descriptor.h"
#include "flang/Runtime/io-api.h"
+#include "format.h"
+#include "internal-unit.h"
+#include "io-error.h"
#include <flang/Common/variant.h>
#include <functional>
#include <type_traits>
@@ -789,4 +789,4 @@ class ErroneousIoStatementState : public IoStatementBase {
};
} // namespace Fortran::runtime::io
-#endif // FORTRAN_RUNTIME_IO_STMT_H_
+#endif /* FORTRAN_RUNTIME_IO_STMT_H_ */
diff --git a/FortranRuntime/lib/Runtime/lock.h b/FortranRuntime/lib/Runtime/lock.h
index 75c1adb12a8c62..69ff6403736dae 100644
--- a/FortranRuntime/lib/Runtime/lock.h
+++ b/FortranRuntime/lib/Runtime/lock.h
@@ -113,4 +113,4 @@ class CriticalSection {
};
} // namespace Fortran::runtime
-#endif // FORTRAN_RUNTIME_LOCK_H_
+#endif /* FORTRAN_RUNTIME_LOCK_H_ */
diff --git a/FortranRuntime/lib/Runtime/matmul-transpose.cpp b/FortranRuntime/lib/Runtime/matmul-transpose.cpp
index d493333dfa9877..3b4b487daa335e 100644
--- a/FortranRuntime/lib/Runtime/matmul-transpose.cpp
+++ b/FortranRuntime/lib/Runtime/matmul-transpose.cpp
@@ -21,12 +21,12 @@
// to use the faster BLAS routines.
#include "flang/Runtime/matmul-transpose.h"
-#include "terminator.h"
-#include "tools.h"
#include "flang/Common/optional.h"
#include "flang/Runtime/c-or-cpp.h"
#include "flang/Runtime/cpp-type.h"
#include "flang/Runtime/descriptor.h"
+#include "terminator.h"
+#include "tools.h"
#include <cstring>
namespace {
diff --git a/FortranRuntime/lib/Runtime/matmul.cpp b/FortranRuntime/lib/Runtime/matmul.cpp
index 124369e72886c5..62674316bc6a57 100644
--- a/FortranRuntime/lib/Runtime/matmul.cpp
+++ b/FortranRuntime/lib/Runtime/matmul.cpp
@@ -20,12 +20,12 @@
// Places where BLAS routines could be called are marked as TODO items.
#include "flang/Runtime/matmul.h"
-#include "terminator.h"
-#include "tools.h"
#include "flang/Common/optional.h"
#include "flang/Runtime/c-or-cpp.h"
#include "flang/Runtime/cpp-type.h"
#include "flang/Runtime/descriptor.h"
+#include "terminator.h"
+#include "tools.h"
#include <cstring>
namespace {
diff --git a/FortranRuntime/lib/Runtime/memory.cpp b/FortranRuntime/lib/Runtime/memory.cpp
index 4a811107ca220a..bf2c4cd4a35470 100644
--- a/FortranRuntime/lib/Runtime/memory.cpp
+++ b/FortranRuntime/lib/Runtime/memory.cpp
@@ -7,9 +7,9 @@
//===----------------------------------------------------------------------===//
#include "flang/Runtime/memory.h"
+#include "flang/Runtime/freestanding-tools.h"
#include "terminator.h"
#include "tools.h"
-#include "flang/Runtime/freestanding-tools.h"
#include <cstdlib>
namespace Fortran::runtime {
diff --git a/FortranRuntime/lib/Runtime/misc-intrinsic.cpp b/FortranRuntime/lib/Runtime/misc-intrinsic.cpp
index b942d762e76ab3..a0f41e4e3f156c 100644
--- a/FortranRuntime/lib/Runtime/misc-intrinsic.cpp
+++ b/FortranRuntime/lib/Runtime/misc-intrinsic.cpp
@@ -7,10 +7,10 @@
//===----------------------------------------------------------------------===//
#include "flang/Runtime/misc-intrinsic.h"
-#include "terminator.h"
-#include "tools.h"
#include "flang/Common/optional.h"
#include "flang/Runtime/descriptor.h"
+#include "terminator.h"
+#include "tools.h"
#include <algorithm>
#include <cstdio>
#include <cstring>
diff --git a/FortranRuntime/lib/Runtime/namelist.cpp b/FortranRuntime/lib/Runtime/namelist.cpp
index e6229d56577568..1c8942fc375c43 100644
--- a/FortranRuntime/lib/Runtime/namelist.cpp
+++ b/FortranRuntime/lib/Runtime/namelist.cpp
@@ -9,8 +9,8 @@
#include "namelist.h"
#include "descriptor-io.h"
#include "emit-encoded.h"
-#include "io-stmt.h"
#include "flang/Runtime/io-api.h"
+#include "io-stmt.h"
#include <algorithm>
#include <cstring>
#include <limits>
diff --git a/FortranRuntime/lib/Runtime/namelist.h b/FortranRuntime/lib/Runtime/namelist.h
index 4694b3104a9c75..2c4d331ae05e85 100644
--- a/FortranRuntime/lib/Runtime/namelist.h
+++ b/FortranRuntime/lib/Runtime/namelist.h
@@ -11,8 +11,8 @@
#ifndef FORTRAN_RUNTIME_NAMELIST_H_
#define FORTRAN_RUNTIME_NAMELIST_H_
-#include "non-tbp-dio.h"
#include "flang/Common/api-attrs.h"
+#include "non-tbp-dio.h"
#include <cstddef>
@@ -51,4 +51,4 @@ class NamelistGroup {
RT_API_ATTRS bool IsNamelistNameOrSlash(IoStatementState &);
} // namespace Fortran::runtime::io
-#endif // FORTRAN_RUNTIME_NAMELIST_H_
+#endif /* FORTRAN_RUNTIME_NAMELIST_H_ */
diff --git a/FortranRuntime/lib/Runtime/non-tbp-dio.h b/FortranRuntime/lib/Runtime/non-tbp-dio.h
index 0a45c96a3f2e25..426d5a92fd37d4 100644
--- a/FortranRuntime/lib/Runtime/non-tbp-dio.h
+++ b/FortranRuntime/lib/Runtime/non-tbp-dio.h
@@ -53,4 +53,4 @@ struct NonTbpDefinedIoTable {
};
} // namespace Fortran::runtime::io
-#endif // FORTRAN_RUNTIME_NON_TBP_DIO_H_
+#endif /* FORTRAN_RUNTIME_NON_TBP_DIO_H_ */
diff --git a/FortranRuntime/lib/Runtime/numeric-templates.h b/FortranRuntime/lib/Runtime/numeric-templates.h
index 640c6d17c4b580..f0045e8ee36e20 100644
--- a/FortranRuntime/lib/Runtime/numeric-templates.h
+++ b/FortranRuntime/lib/Runtime/numeric-templates.h
@@ -18,10 +18,10 @@
#ifndef FORTRAN_RUNTIME_NUMERIC_TEMPLATES_H_
#define FORTRAN_RUNTIME_NUMERIC_TEMPLATES_H_
-#include "terminator.h"
-#include "tools.h"
#include "flang/Common/api-attrs.h"
#include "flang/Common/float128.h"
+#include "terminator.h"
+#include "tools.h"
#include <cstdint>
#include <limits>
@@ -465,4 +465,4 @@ template <typename T> inline RT_API_ATTRS T ErfcScaled(T arg) {
} // namespace Fortran::runtime
-#endif // FORTRAN_RUNTIME_NUMERIC_TEMPLATES_H_
+#endif /* FORTRAN_RUNTIME_NUMERIC_TEMPLATES_H_ */
diff --git a/FortranRuntime/lib/Runtime/numeric.cpp b/FortranRuntime/lib/Runtime/numeric.cpp
index b0f68a7fc81d29..a3fcfeaa9ee266 100644
--- a/FortranRuntime/lib/Runtime/numeric.cpp
+++ b/FortranRuntime/lib/Runtime/numeric.cpp
@@ -7,10 +7,10 @@
//===----------------------------------------------------------------------===//
#include "flang/Runtime/numeric.h"
+#include "flang/Common/float128.h"
#include "numeric-templates.h"
#include "terminator.h"
#include "tools.h"
-#include "flang/Common/float128.h"
#include <cfloat>
#include <climits>
#include <cmath>
diff --git a/FortranRuntime/lib/Runtime/product.cpp b/FortranRuntime/lib/Runtime/product.cpp
index e4a6e81bd0c508..8c11bf4144919e 100644
--- a/FortranRuntime/lib/Runtime/product.cpp
+++ b/FortranRuntime/lib/Runtime/product.cpp
@@ -8,9 +8,9 @@
// Implements PRODUCT for all required operand types and shapes.
-#include "reduction-templates.h"
#include "flang/Common/float128.h"
#include "flang/Runtime/reduction.h"
+#include "reduction-templates.h"
#include <cfloat>
#include <cinttypes>
#include <complex>
diff --git a/FortranRuntime/lib/Runtime/random-templates.h b/FortranRuntime/lib/Runtime/random-templates.h
index 4faca63ba34b9d..801484225bc211 100644
--- a/FortranRuntime/lib/Runtime/random-templates.h
+++ b/FortranRuntime/lib/Runtime/random-templates.h
@@ -9,10 +9,10 @@
#ifndef FORTRAN_RUNTIME_RANDOM_TEMPLATES_H_
#define FORTRAN_RUNTIME_RANDOM_TEMPLATES_H_
-#include "lock.h"
-#include "numeric-templates.h"
#include "flang/Common/optional.h"
#include "flang/Runtime/descriptor.h"
+#include "lock.h"
+#include "numeric-templates.h"
#include <algorithm>
#include <random>
@@ -85,4 +85,4 @@ inline void Generate(const Descriptor &harvest) {
} // namespace Fortran::runtime::random
-#endif // FORTRAN_RUNTIME_RANDOM_TEMPLATES_H_
+#endif /* FORTRAN_RUNTIME_RANDOM_TEMPLATES_H_ */
diff --git a/FortranRuntime/lib/Runtime/random.cpp b/FortranRuntime/lib/Runtime/random.cpp
index 343b0a389fcaf6..8e1561960d48be 100644
--- a/FortranRuntime/lib/Runtime/random.cpp
+++ b/FortranRuntime/lib/Runtime/random.cpp
@@ -10,14 +10,14 @@
// RANDOM_SEED.
#include "flang/Runtime/random.h"
-#include "lock.h"
-#include "random-templates.h"
-#include "terminator.h"
#include "flang/Common/float128.h"
#include "flang/Common/leading-zero-bit-count.h"
#include "flang/Common/uint128.h"
#include "flang/Runtime/cpp-type.h"
#include "flang/Runtime/descriptor.h"
+#include "lock.h"
+#include "random-templates.h"
+#include "terminator.h"
#include <cmath>
#include <cstdint>
#include <limits>
diff --git a/FortranRuntime/lib/Runtime/reduce.cpp b/FortranRuntime/lib/Runtime/reduce.cpp
index c3e7ef74363431..4d33c2a714e5af 100644
--- a/FortranRuntime/lib/Runtime/reduce.cpp
+++ b/FortranRuntime/lib/Runtime/reduce.cpp
@@ -9,10 +9,10 @@
// REDUCE() implementation
#include "flang/Runtime/reduce.h"
+#include "flang/Runtime/descriptor.h"
#include "reduction-templates.h"
#include "terminator.h"
#include "tools.h"
-#include "flang/Runtime/descriptor.h"
namespace Fortran::runtime {
diff --git a/FortranRuntime/lib/Runtime/reduction-templates.h b/FortranRuntime/lib/Runtime/reduction-templates.h
index ba193a9f0e3b9d..30ae641ba7b3ac 100644
--- a/FortranRuntime/lib/Runtime/reduction-templates.h
+++ b/FortranRuntime/lib/Runtime/reduction-templates.h
@@ -21,11 +21,11 @@
#ifndef FORTRAN_RUNTIME_REDUCTION_TEMPLATES_H_
#define FORTRAN_RUNTIME_REDUCTION_TEMPLATES_H_
+#include "flang/Runtime/cpp-type.h"
+#include "flang/Runtime/descriptor.h"
#include "numeric-templates.h"
#include "terminator.h"
#include "tools.h"
-#include "flang/Runtime/cpp-type.h"
-#include "flang/Runtime/descriptor.h"
#include <algorithm>
namespace Fortran::runtime {
@@ -412,4 +412,4 @@ template <int KIND> struct Norm2Helper {
};
} // namespace Fortran::runtime
-#endif // FORTRAN_RUNTIME_REDUCTION_TEMPLATES_H_
+#endif /* FORTRAN_RUNTIME_REDUCTION_TEMPLATES_H_ */
diff --git a/FortranRuntime/lib/Runtime/reduction.cpp b/FortranRuntime/lib/Runtime/reduction.cpp
index 0de7dd07b17a5b..f4e1f2aa6818d5 100644
--- a/FortranRuntime/lib/Runtime/reduction.cpp
+++ b/FortranRuntime/lib/Runtime/reduction.cpp
@@ -14,8 +14,8 @@
// NORM2, MAXLOC, MINLOC, MAXVAL, and MINVAL are in extrema.cpp.
#include "flang/Runtime/reduction.h"
-#include "reduction-templates.h"
#include "flang/Runtime/descriptor.h"
+#include "reduction-templates.h"
#include <cinttypes>
namespace Fortran::runtime {
diff --git a/FortranRuntime/lib/Runtime/stack.h b/FortranRuntime/lib/Runtime/stack.h
index 974ccb9d30b0eb..dc5b6101d3da0f 100644
--- a/FortranRuntime/lib/Runtime/stack.h
+++ b/FortranRuntime/lib/Runtime/stack.h
@@ -10,11 +10,11 @@
// It is a list based stack with dynamic allocation/deallocation
// of the list nodes.
-#ifndef FORTRAN_RUNTIME_STACK_H
-#define FORTRAN_RUNTIME_STACK_H
+#ifndef FORTRAN_RUNTIME_STACK_H_
+#define FORTRAN_RUNTIME_STACK_H_
-#include "terminator.h"
#include "flang/Runtime/memory.h"
+#include "terminator.h"
namespace Fortran::runtime {
// Storage for the Stack elements of type T.
@@ -133,4 +133,4 @@ template <typename T, unsigned N = 0> class Stack : public StackStorage<T, N> {
Terminator &terminator_;
};
} // namespace Fortran::runtime
-#endif // FORTRAN_RUNTIME_STACK_H
+#endif /* FORTRAN_RUNTIME_STACK_H_ */
diff --git a/FortranRuntime/lib/Runtime/stat.cpp b/FortranRuntime/lib/Runtime/stat.cpp
index d483f75998a746..01ae922e080865 100644
--- a/FortranRuntime/lib/Runtime/stat.cpp
+++ b/FortranRuntime/lib/Runtime/stat.cpp
@@ -7,9 +7,9 @@
//===----------------------------------------------------------------------===//
#include "stat.h"
+#include "flang/Runtime/descriptor.h"
#include "terminator.h"
#include "tools.h"
-#include "flang/Runtime/descriptor.h"
namespace Fortran::runtime {
RT_OFFLOAD_API_GROUP_BEGIN
diff --git a/FortranRuntime/lib/Runtime/stat.h b/FortranRuntime/lib/Runtime/stat.h
index 9f56d88f588a1e..eccd69024d726b 100644
--- a/FortranRuntime/lib/Runtime/stat.h
+++ b/FortranRuntime/lib/Runtime/stat.h
@@ -11,8 +11,8 @@
#ifndef FORTRAN_RUNTIME_STAT_H_
#define FORTRAN_RUNTIME_STAT_H_
-#include "flang/Common/api-attrs.h"
#include "flang/Common/ISO_Fortran_binding_wrapper.h"
+#include "flang/Common/api-attrs.h"
#include "flang/Runtime/magic-numbers.h"
namespace Fortran::runtime {
@@ -60,4 +60,4 @@ RT_API_ATTRS int ToErrmsg(const Descriptor *errmsg, int stat); // returns stat
RT_API_ATTRS int ReturnError(Terminator &, int stat,
const Descriptor *errmsg = nullptr, bool hasStat = false);
} // namespace Fortran::runtime
-#endif // FORTRAN_RUNTIME_STAT_H
+#endif /* FORTRAN_RUNTIME_STAT_H_ */
diff --git a/FortranRuntime/lib/Runtime/sum.cpp b/FortranRuntime/lib/Runtime/sum.cpp
index 64982b9fd53690..e33b77e20f0f11 100644
--- a/FortranRuntime/lib/Runtime/sum.cpp
+++ b/FortranRuntime/lib/Runtime/sum.cpp
@@ -12,9 +12,9 @@
// cancellation on intermediate results by using "Kahan summation"
// (basically the same as manual "double-double").
-#include "reduction-templates.h"
#include "flang/Common/float128.h"
#include "flang/Runtime/reduction.h"
+#include "reduction-templates.h"
#include <cfloat>
#include <cinttypes>
#include <complex>
diff --git a/FortranRuntime/lib/Runtime/support.cpp b/FortranRuntime/lib/Runtime/support.cpp
index 1dffa99191bae1..0a39ff24b0cafc 100644
--- a/FortranRuntime/lib/Runtime/support.cpp
+++ b/FortranRuntime/lib/Runtime/support.cpp
@@ -8,8 +8,8 @@
#include "flang/Runtime/support.h"
#include "ISO_Fortran_util.h"
-#include "type-info.h"
#include "flang/Runtime/descriptor.h"
+#include "type-info.h"
namespace Fortran::runtime {
extern "C" {
diff --git a/FortranRuntime/lib/Runtime/temporary-stack.cpp b/FortranRuntime/lib/Runtime/temporary-stack.cpp
index 12fa18586b7421..f944dfb7aa1471 100644
--- a/FortranRuntime/lib/Runtime/temporary-stack.cpp
+++ b/FortranRuntime/lib/Runtime/temporary-stack.cpp
@@ -10,11 +10,11 @@
// temporaries. For use in HLFIR lowering.
#include "flang/Runtime/temporary-stack.h"
-#include "terminator.h"
#include "flang/Common/ISO_Fortran_binding_wrapper.h"
#include "flang/Runtime/assign.h"
#include "flang/Runtime/descriptor.h"
#include "flang/Runtime/memory.h"
+#include "terminator.h"
namespace {
diff --git a/FortranRuntime/lib/Runtime/terminator.h b/FortranRuntime/lib/Runtime/terminator.h
index 02b3a4c4f066f8..f475658b0eab3d 100644
--- a/FortranRuntime/lib/Runtime/terminator.h
+++ b/FortranRuntime/lib/Runtime/terminator.h
@@ -121,4 +121,4 @@ namespace Fortran::runtime::io {
RT_API_ATTRS void FlushOutputOnCrash(const Terminator &);
}
-#endif // FORTRAN_RUNTIME_TERMINATOR_H_
+#endif /* FORTRAN_RUNTIME_TERMINATOR_H_ */
diff --git a/FortranRuntime/lib/Runtime/time-intrinsic.cpp b/FortranRuntime/lib/Runtime/time-intrinsic.cpp
index 05f7e4f80f18b6..4b362c90c52f25 100644
--- a/FortranRuntime/lib/Runtime/time-intrinsic.cpp
+++ b/FortranRuntime/lib/Runtime/time-intrinsic.cpp
@@ -9,10 +9,10 @@
// Implements time-related intrinsic subroutines.
#include "flang/Runtime/time-intrinsic.h"
-#include "terminator.h"
-#include "tools.h"
#include "flang/Runtime/cpp-type.h"
#include "flang/Runtime/descriptor.h"
+#include "terminator.h"
+#include "tools.h"
#include <algorithm>
#include <cstdint>
#include <cstdio>
diff --git a/FortranRuntime/lib/Runtime/tools.h b/FortranRuntime/lib/Runtime/tools.h
index b57c7996135913..4058767ca283a9 100644
--- a/FortranRuntime/lib/Runtime/tools.h
+++ b/FortranRuntime/lib/Runtime/tools.h
@@ -9,13 +9,13 @@
#ifndef FORTRAN_RUNTIME_TOOLS_H_
#define FORTRAN_RUNTIME_TOOLS_H_
-#include "stat.h"
-#include "terminator.h"
#include "flang/Common/optional.h"
#include "flang/Runtime/cpp-type.h"
#include "flang/Runtime/descriptor.h"
#include "flang/Runtime/freestanding-tools.h"
#include "flang/Runtime/memory.h"
+#include "stat.h"
+#include "terminator.h"
#include <cstring>
#include <functional>
#include <map>
@@ -535,4 +535,4 @@ RT_API_ATTRS void CreatePartialReductionResult(Descriptor &result,
const char *intrinsic, TypeCode);
} // namespace Fortran::runtime
-#endif // FORTRAN_RUNTIME_TOOLS_H_
+#endif /* FORTRAN_RUNTIME_TOOLS_H_ */
diff --git a/FortranRuntime/lib/Runtime/transformational.cpp b/FortranRuntime/lib/Runtime/transformational.cpp
index 8c244fc296f3b9..66dc5bd4939bae 100644
--- a/FortranRuntime/lib/Runtime/transformational.cpp
+++ b/FortranRuntime/lib/Runtime/transformational.cpp
@@ -18,10 +18,10 @@
#include "flang/Runtime/transformational.h"
#include "copy.h"
-#include "terminator.h"
-#include "tools.h"
#include "flang/Common/float128.h"
#include "flang/Runtime/descriptor.h"
+#include "terminator.h"
+#include "tools.h"
namespace Fortran::runtime {
diff --git a/FortranRuntime/lib/Runtime/type-info.h b/FortranRuntime/lib/Runtime/type-info.h
index 28e7c4696613b3..ff3523bcb2b8eb 100644
--- a/FortranRuntime/lib/Runtime/type-info.h
+++ b/FortranRuntime/lib/Runtime/type-info.h
@@ -12,11 +12,11 @@
// A C++ perspective of the derived type description schemata in
// flang/module/__fortran_type_info.f90.
-#include "terminator.h"
#include "flang/Common/Fortran-consts.h"
#include "flang/Common/bit-population-count.h"
#include "flang/Common/optional.h"
#include "flang/Runtime/descriptor.h"
+#include "terminator.h"
#include <cinttypes>
#include <memory>
@@ -321,4 +321,4 @@ class DerivedType {
};
} // namespace Fortran::runtime::typeInfo
-#endif // FORTRAN_RUNTIME_TYPE_INFO_H_
+#endif /* FORTRAN_RUNTIME_TYPE_INFO_H_ */
diff --git a/FortranRuntime/lib/Runtime/unit-map.h b/FortranRuntime/lib/Runtime/unit-map.h
index f9f0d34d4f0193..4e61246f9a2d86 100644
--- a/FortranRuntime/lib/Runtime/unit-map.h
+++ b/FortranRuntime/lib/Runtime/unit-map.h
@@ -12,10 +12,10 @@
#ifndef FORTRAN_RUNTIME_UNIT_MAP_H_
#define FORTRAN_RUNTIME_UNIT_MAP_H_
-#include "lock.h"
-#include "unit.h"
#include "flang/Common/fast-int-set.h"
#include "flang/Runtime/memory.h"
+#include "lock.h"
+#include "unit.h"
#include <cstdint>
#include <cstdlib>
@@ -100,4 +100,4 @@ class UnitMap {
int emergencyNewUnit_{maxNewUnits_}; // not recycled
};
} // namespace Fortran::runtime::io
-#endif // FORTRAN_RUNTIME_UNIT_MAP_H_
+#endif /* FORTRAN_RUNTIME_UNIT_MAP_H_ */
diff --git a/FortranRuntime/lib/Runtime/unit.h b/FortranRuntime/lib/Runtime/unit.h
index 608f3a28ef687d..993fbf2977cebf 100644
--- a/FortranRuntime/lib/Runtime/unit.h
+++ b/FortranRuntime/lib/Runtime/unit.h
@@ -8,21 +8,21 @@
// Fortran external I/O units
-#ifndef FORTRAN_RUNTIME_IO_UNIT_H_
-#define FORTRAN_RUNTIME_IO_UNIT_H_
+#ifndef FORTRAN_RUNTIME_UNIT_H_
+#define FORTRAN_RUNTIME_UNIT_H_
#include "buffer.h"
#include "connection.h"
#include "environment.h"
#include "file.h"
+#include "flang/Common/constexpr-bitset.h"
+#include "flang/Common/optional.h"
+#include "flang/Runtime/memory.h"
#include "format.h"
#include "io-error.h"
#include "io-stmt.h"
#include "lock.h"
#include "terminator.h"
-#include "flang/Common/constexpr-bitset.h"
-#include "flang/Common/optional.h"
-#include "flang/Runtime/memory.h"
#include <cstdlib>
#include <cstring>
#include <flang/Common/variant.h>
@@ -291,4 +291,4 @@ class ChildIo {
};
} // namespace Fortran::runtime::io
-#endif // FORTRAN_RUNTIME_IO_UNIT_H_
+#endif /* FORTRAN_RUNTIME_UNIT_H_ */
diff --git a/FortranRuntime/lib/Runtime/utf.h b/FortranRuntime/lib/Runtime/utf.h
index 5ba40437ea0c95..35c03fd4cdded5 100644
--- a/FortranRuntime/lib/Runtime/utf.h
+++ b/FortranRuntime/lib/Runtime/utf.h
@@ -70,4 +70,4 @@ RT_API_ATTRS Fortran::common::optional<char32_t> DecodeUTF8(const char *);
RT_API_ATTRS std::size_t EncodeUTF8(char *, char32_t);
} // namespace Fortran::runtime
-#endif // FORTRAN_RUNTIME_UTF_H_
+#endif /* FORTRAN_RUNTIME_UTF_H_ */
diff --git a/FortranRuntime/lib/Testing/fp-testing.cpp b/FortranRuntime/lib/Testing/fp-testing.cpp
index 8541b1406334d3..3301d2d8efb15f 100644
--- a/FortranRuntime/lib/Testing/fp-testing.cpp
+++ b/FortranRuntime/lib/Testing/fp-testing.cpp
@@ -1,11 +1,3 @@
-//===-- lib/Testing/fp-testing.cpp ------------------------------*- C++ -*-===//
-//
-// 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
-//
-//===----------------------------------------------------------------------===//
-
#include "flang/Testing/fp-testing.h"
#include "llvm/Support/Errno.h"
#include <cstdio>
diff --git a/FortranRuntime/unittests/Common/FastIntSetTest.cpp b/FortranRuntime/unittests/Common/FastIntSetTest.cpp
index f19359f4097ab8..a36a334e370eb9 100644
--- a/FortranRuntime/unittests/Common/FastIntSetTest.cpp
+++ b/FortranRuntime/unittests/Common/FastIntSetTest.cpp
@@ -6,8 +6,8 @@
//
//===----------------------------------------------------------------------===//
-#include "gtest/gtest.h"
#include "flang/Common/fast-int-set.h"
+#include "gtest/gtest.h"
#include <optional>
TEST(FastIntSetTests, Sanity) {
diff --git a/FortranRuntime/unittests/Evaluate/ISO-Fortran-binding.cpp b/FortranRuntime/unittests/Evaluate/ISO-Fortran-binding.cpp
index 97d23ca90e5022..d2546e0c22d2d6 100644
--- a/FortranRuntime/unittests/Evaluate/ISO-Fortran-binding.cpp
+++ b/FortranRuntime/unittests/Evaluate/ISO-Fortran-binding.cpp
@@ -6,9 +6,9 @@
//
//===----------------------------------------------------------------------===//
-#include "flang/Testing/testing.h"
#include "flang/Common/ISO_Fortran_binding_wrapper.h"
#include "flang/Runtime/descriptor.h"
+#include "flang/Testing/testing.h"
#include "llvm/Support/raw_ostream.h"
#include <type_traits>
diff --git a/FortranRuntime/unittests/Evaluate/reshape.cpp b/FortranRuntime/unittests/Evaluate/reshape.cpp
index 82caebe081fcd2..a93afd2a3c90cd 100644
--- a/FortranRuntime/unittests/Evaluate/reshape.cpp
+++ b/FortranRuntime/unittests/Evaluate/reshape.cpp
@@ -6,9 +6,9 @@
//
//===----------------------------------------------------------------------===//
-#include "flang/Testing/testing.h"
#include "flang/Runtime/descriptor.h"
#include "flang/Runtime/transformational.h"
+#include "flang/Testing/testing.h"
#include <cinttypes>
using namespace Fortran::common;
diff --git a/FortranRuntime/unittests/Runtime/AccessTest.cpp b/FortranRuntime/unittests/Runtime/AccessTest.cpp
index e72386cc9ac247..3e9feaf945b66d 100644
--- a/FortranRuntime/unittests/Runtime/AccessTest.cpp
+++ b/FortranRuntime/unittests/Runtime/AccessTest.cpp
@@ -10,9 +10,9 @@
#ifndef _WIN32
#include "CrashHandlerFixture.h"
-#include "gtest/gtest.h"
#include "flang/Runtime/extensions.h"
#include "llvm/ADT/Twine.h"
+#include "gtest/gtest.h"
#include <fcntl.h>
#include <sys/stat.h>
diff --git a/FortranRuntime/unittests/Runtime/Allocatable.cpp b/FortranRuntime/unittests/Runtime/Allocatable.cpp
index 8e10dc408ceae8..c01f85598d21ed 100644
--- a/FortranRuntime/unittests/Runtime/Allocatable.cpp
+++ b/FortranRuntime/unittests/Runtime/Allocatable.cpp
@@ -7,8 +7,8 @@
//===----------------------------------------------------------------------===//
#include "flang/Runtime/allocatable.h"
-#include "gtest/gtest.h"
#include "tools.h"
+#include "gtest/gtest.h"
using namespace Fortran::runtime;
diff --git a/FortranRuntime/unittests/Runtime/ArrayConstructor.cpp b/FortranRuntime/unittests/Runtime/ArrayConstructor.cpp
index 8c7fce3e4fb5f7..9011da304b6bc3 100644
--- a/FortranRuntime/unittests/Runtime/ArrayConstructor.cpp
+++ b/FortranRuntime/unittests/Runtime/ArrayConstructor.cpp
@@ -6,13 +6,13 @@
//
//===----------------------------------------------------------------------===//
-#include "gtest/gtest.h"
-#include "tools.h"
#include "flang/Runtime/allocatable.h"
#include "flang/Runtime/array-constructor.h"
#include "flang/Runtime/cpp-type.h"
#include "flang/Runtime/descriptor.h"
#include "flang/Runtime/type-code.h"
+#include "tools.h"
+#include "gtest/gtest.h"
#include <memory>
diff --git a/FortranRuntime/unittests/Runtime/CUDA/AllocatorCUF.cpp b/FortranRuntime/unittests/Runtime/CUDA/AllocatorCUF.cpp
index 5bafb484236340..d2c1600af8c631 100644
--- a/FortranRuntime/unittests/Runtime/CUDA/AllocatorCUF.cpp
+++ b/FortranRuntime/unittests/Runtime/CUDA/AllocatorCUF.cpp
@@ -6,13 +6,13 @@
//
//===----------------------------------------------------------------------===//
-#include "gtest/gtest.h"
#include "../../../runtime/terminator.h"
-#include "flang/Support/Fortran.h"
#include "flang/Runtime/CUDA/allocator.h"
#include "flang/Runtime/CUDA/descriptor.h"
#include "flang/Runtime/allocatable.h"
#include "flang/Runtime/allocator-registry.h"
+#include "flang/Support/Fortran.h"
+#include "gtest/gtest.h"
#include "cuda_runtime.h"
diff --git a/FortranRuntime/unittests/Runtime/CharacterTest.cpp b/FortranRuntime/unittests/Runtime/CharacterTest.cpp
index 710c1ca0eee817..8829f5e43265b0 100644
--- a/FortranRuntime/unittests/Runtime/CharacterTest.cpp
+++ b/FortranRuntime/unittests/Runtime/CharacterTest.cpp
@@ -10,8 +10,8 @@
// in Fortran.
#include "flang/Runtime/character.h"
-#include "gtest/gtest.h"
#include "flang/Runtime/descriptor.h"
+#include "gtest/gtest.h"
#include <cstring>
#include <functional>
#include <tuple>
diff --git a/FortranRuntime/unittests/Runtime/CommandTest.cpp b/FortranRuntime/unittests/Runtime/CommandTest.cpp
index 03a31ceab8030b..aa79ce381ba8d0 100644
--- a/FortranRuntime/unittests/Runtime/CommandTest.cpp
+++ b/FortranRuntime/unittests/Runtime/CommandTest.cpp
@@ -7,12 +7,12 @@
//===----------------------------------------------------------------------===//
#include "flang/Runtime/command.h"
-#include "gmock/gmock.h"
-#include "gtest/gtest.h"
#include "flang/Runtime/descriptor.h"
#include "flang/Runtime/execute.h"
#include "flang/Runtime/extensions.h"
#include "flang/Runtime/main.h"
+#include "gmock/gmock.h"
+#include "gtest/gtest.h"
#include <cstddef>
#include <cstdlib>
diff --git a/FortranRuntime/unittests/Runtime/Complex.cpp b/FortranRuntime/unittests/Runtime/Complex.cpp
index daa4b5c7960842..d714da24dc4e58 100644
--- a/FortranRuntime/unittests/Runtime/Complex.cpp
+++ b/FortranRuntime/unittests/Runtime/Complex.cpp
@@ -1,4 +1,4 @@
-//===-- unittests/Runtime/Complex.cpp ---------------------------*- C++ -*-===//
+//===-- flang/unittests/Runtime/Complex.cpp ---------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/unittests/Runtime/CrashHandlerFixture.h b/FortranRuntime/unittests/Runtime/CrashHandlerFixture.h
index af6d8e4cc7d525..46805775af0b39 100644
--- a/FortranRuntime/unittests/Runtime/CrashHandlerFixture.h
+++ b/FortranRuntime/unittests/Runtime/CrashHandlerFixture.h
@@ -10,12 +10,12 @@
/// with expected message.
//
//===----------------------------------------------------------------------===//
-#ifndef LLVM_FLANG_UNITTESTS_RUNTIMEGTEST_CRASHHANDLERFIXTURE_H
-#define LLVM_FLANG_UNITTESTS_RUNTIMEGTEST_CRASHHANDLERFIXTURE_H
+#ifndef FORTRAN_UNITTESTS_RUNTIME_CRASHHANDLERFIXTURE_H_
+#define FORTRAN_UNITTESTS_RUNTIME_CRASHHANDLERFIXTURE_H_
#include <gtest/gtest.h>
struct CrashHandlerFixture : testing::Test {
void SetUp();
};
-#endif
+#endif /* FORTRAN_UNITTESTS_RUNTIME_CRASHHANDLERFIXTURE_H_ */
diff --git a/FortranRuntime/unittests/Runtime/Derived.cpp b/FortranRuntime/unittests/Runtime/Derived.cpp
index 8d5471e3e0bcf3..11b732fe10b790 100644
--- a/FortranRuntime/unittests/Runtime/Derived.cpp
+++ b/FortranRuntime/unittests/Runtime/Derived.cpp
@@ -6,10 +6,10 @@
//
//===----------------------------------------------------------------------===//
-#include "gtest/gtest.h"
-#include "tools.h"
#include "flang/Runtime/derived-api.h"
#include "flang/Runtime/descriptor.h"
+#include "tools.h"
+#include "gtest/gtest.h"
using namespace Fortran::runtime;
diff --git a/FortranRuntime/unittests/Runtime/ExternalIOTest.cpp b/FortranRuntime/unittests/Runtime/ExternalIOTest.cpp
index 23c1e9992c101e..00c2fd76ce0c04 100644
--- a/FortranRuntime/unittests/Runtime/ExternalIOTest.cpp
+++ b/FortranRuntime/unittests/Runtime/ExternalIOTest.cpp
@@ -11,12 +11,12 @@
//===----------------------------------------------------------------------===//
#include "CrashHandlerFixture.h"
-#include "gtest/gtest.h"
#include "flang/Runtime/descriptor.h"
#include "flang/Runtime/io-api.h"
#include "flang/Runtime/main.h"
#include "flang/Runtime/stop.h"
#include "llvm/Support/raw_ostream.h"
+#include "gtest/gtest.h"
#include <cstring>
#include <string_view>
diff --git a/FortranRuntime/unittests/Runtime/Inquiry.cpp b/FortranRuntime/unittests/Runtime/Inquiry.cpp
index 39303b7c809002..204a97a1088ac0 100644
--- a/FortranRuntime/unittests/Runtime/Inquiry.cpp
+++ b/FortranRuntime/unittests/Runtime/Inquiry.cpp
@@ -7,9 +7,9 @@
//===----------------------------------------------------------------------===//
#include "flang/Runtime/inquiry.h"
-#include "gtest/gtest.h"
-#include "tools.h"
#include "flang/Runtime/type-code.h"
+#include "tools.h"
+#include "gtest/gtest.h"
using namespace Fortran::runtime;
using Fortran::common::TypeCategory;
diff --git a/FortranRuntime/unittests/Runtime/ListInputTest.cpp b/FortranRuntime/unittests/Runtime/ListInputTest.cpp
index 472838c25841c9..4c30d6ed750141 100644
--- a/FortranRuntime/unittests/Runtime/ListInputTest.cpp
+++ b/FortranRuntime/unittests/Runtime/ListInputTest.cpp
@@ -6,8 +6,8 @@
//
//===----------------------------------------------------------------------===//
-#include "CrashHandlerFixture.h"
#include "../../lib/Runtime/io-error.h"
+#include "CrashHandlerFixture.h"
#include "flang/Runtime/descriptor.h"
#include "flang/Runtime/io-api.h"
diff --git a/FortranRuntime/unittests/Runtime/Matmul.cpp b/FortranRuntime/unittests/Runtime/Matmul.cpp
index a37b618d3ab11a..cfa5d18cc36d33 100644
--- a/FortranRuntime/unittests/Runtime/Matmul.cpp
+++ b/FortranRuntime/unittests/Runtime/Matmul.cpp
@@ -7,12 +7,12 @@
//===----------------------------------------------------------------------===//
#include "flang/Runtime/matmul.h"
-#include "gtest/gtest.h"
-#include "tools.h"
#include "flang/Runtime/allocatable.h"
#include "flang/Runtime/cpp-type.h"
#include "flang/Runtime/descriptor.h"
#include "flang/Runtime/type-code.h"
+#include "tools.h"
+#include "gtest/gtest.h"
using namespace Fortran::runtime;
using Fortran::common::TypeCategory;
diff --git a/FortranRuntime/unittests/Runtime/MatmulTranspose.cpp b/FortranRuntime/unittests/Runtime/MatmulTranspose.cpp
index 3483d1896e8bf6..146c2283fb1aca 100644
--- a/FortranRuntime/unittests/Runtime/MatmulTranspose.cpp
+++ b/FortranRuntime/unittests/Runtime/MatmulTranspose.cpp
@@ -6,13 +6,13 @@
//
//===----------------------------------------------------------------------===//
-#include "gtest/gtest.h"
-#include "tools.h"
#include "flang/Runtime/allocatable.h"
#include "flang/Runtime/cpp-type.h"
#include "flang/Runtime/descriptor.h"
#include "flang/Runtime/matmul-transpose.h"
#include "flang/Runtime/type-code.h"
+#include "tools.h"
+#include "gtest/gtest.h"
using namespace Fortran::runtime;
using Fortran::common::TypeCategory;
diff --git a/FortranRuntime/unittests/Runtime/MiscIntrinsic.cpp b/FortranRuntime/unittests/Runtime/MiscIntrinsic.cpp
index 5672440c0e1b95..08229b5e48f0dd 100644
--- a/FortranRuntime/unittests/Runtime/MiscIntrinsic.cpp
+++ b/FortranRuntime/unittests/Runtime/MiscIntrinsic.cpp
@@ -6,12 +6,12 @@
//
//===----------------------------------------------------------------------===//
-#include "gtest/gtest.h"
-#include "tools.h"
#include "flang/Runtime//misc-intrinsic.h"
#include "flang/Runtime/allocatable.h"
#include "flang/Runtime/cpp-type.h"
#include "flang/Runtime/descriptor.h"
+#include "tools.h"
+#include "gtest/gtest.h"
using namespace Fortran::runtime;
diff --git a/FortranRuntime/unittests/Runtime/Namelist.cpp b/FortranRuntime/unittests/Runtime/Namelist.cpp
index 729f9ffa5c7c10..7b834dec49c3c4 100644
--- a/FortranRuntime/unittests/Runtime/Namelist.cpp
+++ b/FortranRuntime/unittests/Runtime/Namelist.cpp
@@ -8,9 +8,9 @@
#include "../../lib/Runtime/namelist.h"
#include "CrashHandlerFixture.h"
-#include "tools.h"
#include "flang/Runtime/descriptor.h"
#include "flang/Runtime/io-api.h"
+#include "tools.h"
#include <algorithm>
#include <cinttypes>
#include <complex>
diff --git a/FortranRuntime/unittests/Runtime/Numeric.cpp b/FortranRuntime/unittests/Runtime/Numeric.cpp
index d15919b972bca7..fb595ae262c324 100644
--- a/FortranRuntime/unittests/Runtime/Numeric.cpp
+++ b/FortranRuntime/unittests/Runtime/Numeric.cpp
@@ -7,8 +7,8 @@
//===----------------------------------------------------------------------===//
#include "flang/Runtime/numeric.h"
-#include "gtest/gtest.h"
#include "flang/Common/float128.h"
+#include "gtest/gtest.h"
#include <cmath>
#include <limits>
diff --git a/FortranRuntime/unittests/Runtime/Pointer.cpp b/FortranRuntime/unittests/Runtime/Pointer.cpp
index aa8545cdf951d1..a05bd70a64bb9f 100644
--- a/FortranRuntime/unittests/Runtime/Pointer.cpp
+++ b/FortranRuntime/unittests/Runtime/Pointer.cpp
@@ -7,9 +7,9 @@
//===----------------------------------------------------------------------===//
#include "flang/Runtime/pointer.h"
-#include "gtest/gtest.h"
-#include "tools.h"
#include "flang/Runtime/descriptor.h"
+#include "tools.h"
+#include "gtest/gtest.h"
using namespace Fortran::runtime;
diff --git a/FortranRuntime/unittests/Runtime/Random.cpp b/FortranRuntime/unittests/Runtime/Random.cpp
index c2300a478832ab..4e4b59cbcf40e7 100644
--- a/FortranRuntime/unittests/Runtime/Random.cpp
+++ b/FortranRuntime/unittests/Runtime/Random.cpp
@@ -7,9 +7,9 @@
//===----------------------------------------------------------------------===//
#include "flang/Runtime//random.h"
-#include "gtest/gtest.h"
#include "flang/Runtime/descriptor.h"
#include "flang/Runtime/type-code.h"
+#include "gtest/gtest.h"
#include <cmath>
using namespace Fortran::runtime;
diff --git a/FortranRuntime/unittests/Runtime/Reduction.cpp b/FortranRuntime/unittests/Runtime/Reduction.cpp
index e8b5ac878871fd..c35f6e2fa6a41b 100644
--- a/FortranRuntime/unittests/Runtime/Reduction.cpp
+++ b/FortranRuntime/unittests/Runtime/Reduction.cpp
@@ -7,14 +7,14 @@
//===----------------------------------------------------------------------===//
#include "flang/Runtime/reduction.h"
-#include "gtest/gtest.h"
-#include "tools.h"
#include "flang/Common/float128.h"
#include "flang/Runtime/allocatable.h"
#include "flang/Runtime/cpp-type.h"
#include "flang/Runtime/descriptor.h"
#include "flang/Runtime/reduce.h"
#include "flang/Runtime/type-code.h"
+#include "tools.h"
+#include "gtest/gtest.h"
#include <cstdint>
#include <cstring>
#include <string>
diff --git a/FortranRuntime/unittests/Runtime/RuntimeCrashTest.cpp b/FortranRuntime/unittests/Runtime/RuntimeCrashTest.cpp
index 7ce1ee796d739b..61580a8d46792f 100644
--- a/FortranRuntime/unittests/Runtime/RuntimeCrashTest.cpp
+++ b/FortranRuntime/unittests/Runtime/RuntimeCrashTest.cpp
@@ -10,11 +10,11 @@
/// runtime components and ensure the test fixture handles crashes as we expect.
//
//===----------------------------------------------------------------------===//
-#include "CrashHandlerFixture.h"
-#include "tools.h"
#include "../../lib/Runtime/terminator.h"
+#include "CrashHandlerFixture.h"
#include "flang/Runtime/io-api.h"
#include "flang/Runtime/transformational.h"
+#include "tools.h"
#include <gtest/gtest.h>
using namespace Fortran::runtime;
diff --git a/FortranRuntime/unittests/Runtime/Stop.cpp b/FortranRuntime/unittests/Runtime/Stop.cpp
index c12ec097068438..5fd8deaad21d6b 100644
--- a/FortranRuntime/unittests/Runtime/Stop.cpp
+++ b/FortranRuntime/unittests/Runtime/Stop.cpp
@@ -10,8 +10,8 @@
//
//===----------------------------------------------------------------------===//
#include "flang/Runtime/stop.h"
-#include "CrashHandlerFixture.h"
#include "../../lib/Runtime/environment.h"
+#include "CrashHandlerFixture.h"
#include <cstdlib>
#include <gtest/gtest.h>
diff --git a/FortranRuntime/unittests/Runtime/Support.cpp b/FortranRuntime/unittests/Runtime/Support.cpp
index b7aa39ef5523ba..38c0d6efaf9db7 100644
--- a/FortranRuntime/unittests/Runtime/Support.cpp
+++ b/FortranRuntime/unittests/Runtime/Support.cpp
@@ -7,9 +7,9 @@
//===----------------------------------------------------------------------===//
#include "flang/Runtime/support.h"
-#include "gtest/gtest.h"
-#include "tools.h"
#include "flang/Runtime/descriptor.h"
+#include "tools.h"
+#include "gtest/gtest.h"
using namespace Fortran::runtime;
using Fortran::common::TypeCategory;
diff --git a/FortranRuntime/unittests/Runtime/TemporaryStack.cpp b/FortranRuntime/unittests/Runtime/TemporaryStack.cpp
index 495c693b0493ef..63d99416ea64cb 100644
--- a/FortranRuntime/unittests/Runtime/TemporaryStack.cpp
+++ b/FortranRuntime/unittests/Runtime/TemporaryStack.cpp
@@ -6,14 +6,14 @@
//
//===----------------------------------------------------------------------===//
-#include "gtest/gtest.h"
-#include "tools.h"
#include "flang/Common/ISO_Fortran_binding_wrapper.h"
#include "flang/Runtime/allocatable.h"
#include "flang/Runtime/cpp-type.h"
#include "flang/Runtime/descriptor.h"
#include "flang/Runtime/temporary-stack.h"
#include "flang/Runtime/type-code.h"
+#include "tools.h"
+#include "gtest/gtest.h"
#include <vector>
using namespace Fortran::runtime;
diff --git a/FortranRuntime/unittests/Runtime/Time.cpp b/FortranRuntime/unittests/Runtime/Time.cpp
index 548c0834e34a36..6fd00d669a9575 100644
--- a/FortranRuntime/unittests/Runtime/Time.cpp
+++ b/FortranRuntime/unittests/Runtime/Time.cpp
@@ -6,8 +6,8 @@
//
//===----------------------------------------------------------------------===//
-#include "gtest/gtest.h"
#include "flang/Runtime/time-intrinsic.h"
+#include "gtest/gtest.h"
#include <algorithm>
#include <cctype>
#include <cerrno>
diff --git a/FortranRuntime/unittests/Runtime/Transformational.cpp b/FortranRuntime/unittests/Runtime/Transformational.cpp
index 2dcab5a2aa8974..b5a4e0e8e9588b 100644
--- a/FortranRuntime/unittests/Runtime/Transformational.cpp
+++ b/FortranRuntime/unittests/Runtime/Transformational.cpp
@@ -7,10 +7,10 @@
//===----------------------------------------------------------------------===//
#include "flang/Runtime/transformational.h"
-#include "gtest/gtest.h"
-#include "tools.h"
#include "flang/Common/float128.h"
#include "flang/Runtime/type-code.h"
+#include "tools.h"
+#include "gtest/gtest.h"
#include <vector>
using namespace Fortran::runtime;
diff --git a/FortranRuntime/unittests/Runtime/tools.h b/FortranRuntime/unittests/Runtime/tools.h
index a8e2096a90572e..702103d225ab72 100644
--- a/FortranRuntime/unittests/Runtime/tools.h
+++ b/FortranRuntime/unittests/Runtime/tools.h
@@ -9,11 +9,11 @@
#ifndef FORTRAN_UNITTESTS_RUNTIME_TOOLS_H_
#define FORTRAN_UNITTESTS_RUNTIME_TOOLS_H_
-#include "gtest/gtest.h"
#include "flang/Runtime/allocatable.h"
#include "flang/Runtime/cpp-type.h"
#include "flang/Runtime/descriptor.h"
#include "flang/Runtime/type-code.h"
+#include "gtest/gtest.h"
#include <cstdint>
#include <cstring>
#include <vector>
@@ -54,4 +54,4 @@ static OwningPtr<Descriptor> MakeArray(const std::vector<int> &shape,
}
} // namespace Fortran::runtime
-#endif // FORTRAN_UNITTESTS_RUNTIME_TOOLS_H_
+#endif /* FORTRAN_UNITTESTS_RUNTIME_TOOLS_H_ */
diff --git a/flang/CMakeLists.txt b/flang/CMakeLists.txt
index 00e570798bb412..47517c5e7ab82f 100644
--- a/flang/CMakeLists.txt
+++ b/flang/CMakeLists.txt
@@ -160,6 +160,7 @@ if (FLANG_STANDALONE_BUILD)
link_directories("${LLVM_LIBRARY_DIR}")
+ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY
${CMAKE_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX})
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY
@@ -238,6 +239,7 @@ include_directories(SYSTEM ${CLANG_INCLUDE_DIR})
# tco tool and FIR lib output directories
if(FLANG_STANDALONE_BUILD)
+ set(LLVM_RUNTIME_OUTPUT_INTDIR ${CMAKE_BINARY_DIR}/bin)
set(LLVM_LIBRARY_OUTPUT_INTDIR ${CMAKE_BINARY_DIR}/lib)
endif()
# Always build tco tool
diff --git a/flang/include/flang/Evaluate/call.h b/flang/include/flang/Evaluate/call.h
index 8137185da61442..080f78c4e80fc0 100644
--- a/flang/include/flang/Evaluate/call.h
+++ b/flang/include/flang/Evaluate/call.h
@@ -13,11 +13,11 @@
#include "constant.h"
#include "formatting.h"
#include "type.h"
+#include "flang/Parser/char-block.h"
+#include "flang/Semantics/attr.h"
#include "flang/Support/Fortran.h"
#include "flang/Support/indirection.h"
#include "flang/Support/reference.h"
-#include "flang/Parser/char-block.h"
-#include "flang/Semantics/attr.h"
#include <optional>
#include <vector>
diff --git a/flang/include/flang/Evaluate/characteristics.h b/flang/include/flang/Evaluate/characteristics.h
index 8f1e6876d88d58..e40155fb287b62 100644
--- a/flang/include/flang/Evaluate/characteristics.h
+++ b/flang/include/flang/Evaluate/characteristics.h
@@ -18,13 +18,13 @@
#include "shape.h"
#include "tools.h"
#include "type.h"
-#include "flang/Support/Fortran-features.h"
-#include "flang/Support/Fortran.h"
#include "flang/Common/enum-set.h"
#include "flang/Common/idioms.h"
-#include "flang/Support/indirection.h"
#include "flang/Parser/char-block.h"
#include "flang/Semantics/symbol.h"
+#include "flang/Support/Fortran-features.h"
+#include "flang/Support/Fortran.h"
+#include "flang/Support/indirection.h"
#include <optional>
#include <string>
#include <variant>
diff --git a/flang/include/flang/Evaluate/common.h b/flang/include/flang/Evaluate/common.h
index 69f09a930dc604..91d38748f5a575 100644
--- a/flang/include/flang/Evaluate/common.h
+++ b/flang/include/flang/Evaluate/common.h
@@ -9,17 +9,16 @@
#ifndef FORTRAN_EVALUATE_COMMON_H_
#define FORTRAN_EVALUATE_COMMON_H_
-#include "flang/Support/Fortran-features.h"
-#include "flang/Support/Fortran.h"
-#include "flang/Support/default-kinds.h"
#include "flang/Common/enum-set.h"
#include "flang/Common/idioms.h"
-#include "flang/Support/indirection.h"
-#include "flang/Common/Fortran-consts.h"
#include "flang/Common/restorer.h"
+#include "flang/Common/target-rounding.h"
#include "flang/Parser/char-block.h"
#include "flang/Parser/message.h"
-#include "flang/Common/target-rounding.h"
+#include "flang/Support/Fortran-features.h"
+#include "flang/Support/Fortran.h"
+#include "flang/Support/default-kinds.h"
+#include "flang/Support/indirection.h"
#include <cinttypes>
#include <map>
#include <set>
@@ -34,10 +33,9 @@ class IntrinsicProcTable;
class TargetCharacteristics;
using common::ConstantSubscript;
-using common::RelationalOperator;
-using common::RoundingMode;
-using common::RealFlags;
using common::RealFlag;
+using common::RealFlags;
+using common::RelationalOperator;
// Integers are always ordered; reals may not be.
ENUM_CLASS(Ordering, Less, Equal, Greater)
diff --git a/flang/include/flang/Evaluate/expression.h b/flang/include/flang/Evaluate/expression.h
index a582a2ea1a6989..20e8725f91d5e5 100644
--- a/flang/include/flang/Evaluate/expression.h
+++ b/flang/include/flang/Evaluate/expression.h
@@ -21,11 +21,11 @@
#include "formatting.h"
#include "type.h"
#include "variable.h"
-#include "flang/Support/Fortran.h"
#include "flang/Common/idioms.h"
+#include "flang/Parser/char-block.h"
+#include "flang/Support/Fortran.h"
#include "flang/Support/indirection.h"
#include "flang/Support/template.h"
-#include "flang/Parser/char-block.h"
#include <algorithm>
#include <list>
#include <tuple>
diff --git a/flang/include/flang/Evaluate/intrinsics.h b/flang/include/flang/Evaluate/intrinsics.h
index 17f555445f6f79..dbe1ba7fe7ec1b 100644
--- a/flang/include/flang/Evaluate/intrinsics.h
+++ b/flang/include/flang/Evaluate/intrinsics.h
@@ -12,9 +12,9 @@
#include "call.h"
#include "characteristics.h"
#include "type.h"
-#include "flang/Support/default-kinds.h"
#include "flang/Parser/char-block.h"
#include "flang/Parser/message.h"
+#include "flang/Support/default-kinds.h"
#include <memory>
#include <optional>
#include <string>
diff --git a/flang/include/flang/Evaluate/shape.h b/flang/include/flang/Evaluate/shape.h
index f3eeea7984bba7..8e8d89ffd8d108 100644
--- a/flang/include/flang/Evaluate/shape.h
+++ b/flang/include/flang/Evaluate/shape.h
@@ -15,8 +15,8 @@
#include "expression.h"
#include "traverse.h"
#include "variable.h"
-#include "flang/Support/indirection.h"
#include "flang/Evaluate/type.h"
+#include "flang/Support/indirection.h"
#include <optional>
#include <variant>
diff --git a/flang/include/flang/Evaluate/target.h b/flang/include/flang/Evaluate/target.h
index 8f52b29bec6654..11ac41a5deb69f 100644
--- a/flang/include/flang/Evaluate/target.h
+++ b/flang/include/flang/Evaluate/target.h
@@ -12,11 +12,11 @@
#ifndef FORTRAN_EVALUATE_TARGET_H_
#define FORTRAN_EVALUATE_TARGET_H_
-#include "flang/Support/Fortran.h"
#include "flang/Common/enum-class.h"
#include "flang/Common/enum-set.h"
#include "flang/Common/target-rounding.h"
#include "flang/Evaluate/common.h"
+#include "flang/Support/Fortran.h"
#include <cstdint>
namespace Fortran::evaluate {
diff --git a/flang/include/flang/Evaluate/tools.h b/flang/include/flang/Evaluate/tools.h
index 29d19bff44c79c..9e1c25a3529380 100644
--- a/flang/include/flang/Evaluate/tools.h
+++ b/flang/include/flang/Evaluate/tools.h
@@ -11,8 +11,6 @@
#include "traverse.h"
#include "flang/Common/idioms.h"
-#include "flang/Support/template.h"
-#include "flang/Support/unwrap.h"
#include "flang/Evaluate/constant.h"
#include "flang/Evaluate/expression.h"
#include "flang/Evaluate/shape.h"
@@ -21,6 +19,8 @@
#include "flang/Semantics/attr.h"
#include "flang/Semantics/scope.h"
#include "flang/Semantics/symbol.h"
+#include "flang/Support/template.h"
+#include "flang/Support/unwrap.h"
#include <array>
#include <optional>
#include <set>
diff --git a/flang/include/flang/Evaluate/traverse.h b/flang/include/flang/Evaluate/traverse.h
index e04888f395c013..508d4ca76b30f6 100644
--- a/flang/include/flang/Evaluate/traverse.h
+++ b/flang/include/flang/Evaluate/traverse.h
@@ -38,9 +38,9 @@
// expression of an ASSOCIATE (or related) construct entity.
#include "expression.h"
-#include "flang/Support/indirection.h"
#include "flang/Semantics/symbol.h"
#include "flang/Semantics/type.h"
+#include "flang/Support/indirection.h"
#include <set>
#include <type_traits>
diff --git a/flang/include/flang/Evaluate/type.h b/flang/include/flang/Evaluate/type.h
index b68a5790c810fd..93311e3d2e5ae0 100644
--- a/flang/include/flang/Evaluate/type.h
+++ b/flang/include/flang/Evaluate/type.h
@@ -22,10 +22,10 @@
#include "integer.h"
#include "logical.h"
#include "real.h"
-#include "flang/Support/Fortran-features.h"
-#include "flang/Support/Fortran.h"
#include "flang/Common/idioms.h"
#include "flang/Common/real.h"
+#include "flang/Support/Fortran-features.h"
+#include "flang/Support/Fortran.h"
#include "flang/Support/template.h"
#include <cinttypes>
#include <optional>
diff --git a/flang/include/flang/Evaluate/variable.h b/flang/include/flang/Evaluate/variable.h
index 8d0da5b24277cd..161625b6887189 100644
--- a/flang/include/flang/Evaluate/variable.h
+++ b/flang/include/flang/Evaluate/variable.h
@@ -21,9 +21,9 @@
#include "static-data.h"
#include "type.h"
#include "flang/Common/idioms.h"
+#include "flang/Parser/char-block.h"
#include "flang/Support/reference.h"
#include "flang/Support/template.h"
-#include "flang/Parser/char-block.h"
#include <optional>
#include <variant>
#include <vector>
diff --git a/flang/include/flang/Frontend/FrontendOptions.h b/flang/include/flang/Frontend/FrontendOptions.h
index b69ffe83de1707..c436eb4cbac6f3 100644
--- a/flang/include/flang/Frontend/FrontendOptions.h
+++ b/flang/include/flang/Frontend/FrontendOptions.h
@@ -13,10 +13,10 @@
#ifndef FORTRAN_FRONTEND_FRONTENDOPTIONS_H
#define FORTRAN_FRONTEND_FRONTENDOPTIONS_H
-#include "flang/Support/Fortran-features.h"
#include "flang/Lower/EnvironmentDefault.h"
#include "flang/Parser/characters.h"
#include "flang/Parser/unparse.h"
+#include "flang/Support/Fortran-features.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/Support/MemoryBuffer.h"
#include <cstdint>
diff --git a/flang/include/flang/Lower/AbstractConverter.h b/flang/include/flang/Lower/AbstractConverter.h
index 56646c196a7de5..6c8d77db2202b5 100644
--- a/flang/include/flang/Lower/AbstractConverter.h
+++ b/flang/include/flang/Lower/AbstractConverter.h
@@ -13,12 +13,12 @@
#ifndef FORTRAN_LOWER_ABSTRACTCONVERTER_H
#define FORTRAN_LOWER_ABSTRACTCONVERTER_H
-#include "flang/Support/Fortran.h"
#include "flang/Lower/LoweringOptions.h"
#include "flang/Lower/PFTDefs.h"
#include "flang/Optimizer/Builder/BoxValue.h"
#include "flang/Optimizer/Dialect/FIRAttr.h"
#include "flang/Semantics/symbol.h"
+#include "flang/Support/Fortran.h"
#include "mlir/IR/Builders.h"
#include "mlir/IR/BuiltinOps.h"
#include "mlir/IR/Operation.h"
diff --git a/flang/include/flang/Lower/Bridge.h b/flang/include/flang/Lower/Bridge.h
index 0c2c7abc324952..f07207c5026ebd 100644
--- a/flang/include/flang/Lower/Bridge.h
+++ b/flang/include/flang/Lower/Bridge.h
@@ -13,13 +13,13 @@
#ifndef FORTRAN_LOWER_BRIDGE_H
#define FORTRAN_LOWER_BRIDGE_H
-#include "flang/Support/Fortran.h"
#include "flang/Lower/AbstractConverter.h"
#include "flang/Lower/EnvironmentDefault.h"
#include "flang/Lower/LoweringOptions.h"
#include "flang/Lower/StatementContext.h"
#include "flang/Optimizer/Builder/FIRBuilder.h"
#include "flang/Optimizer/Dialect/Support/KindMapping.h"
+#include "flang/Support/Fortran.h"
#include "mlir/IR/BuiltinOps.h"
#include <set>
diff --git a/flang/include/flang/Lower/CallInterface.h b/flang/include/flang/Lower/CallInterface.h
index df01eafe679d7d..b16ad7a91afd0a 100644
--- a/flang/include/flang/Lower/CallInterface.h
+++ b/flang/include/flang/Lower/CallInterface.h
@@ -27,8 +27,8 @@
#ifndef FORTRAN_LOWER_CALLINTERFACE_H
#define FORTRAN_LOWER_CALLINTERFACE_H
-#include "flang/Support/reference.h"
#include "flang/Evaluate/characteristics.h"
+#include "flang/Support/reference.h"
#include "mlir/Dialect/Func/IR/FuncOps.h"
#include "mlir/IR/BuiltinOps.h"
#include <memory>
diff --git a/flang/include/flang/Lower/ConvertType.h b/flang/include/flang/Lower/ConvertType.h
index b889d2bb279de2..179a6825840464 100644
--- a/flang/include/flang/Lower/ConvertType.h
+++ b/flang/include/flang/Lower/ConvertType.h
@@ -21,8 +21,8 @@
#ifndef FORTRAN_LOWER_CONVERT_TYPE_H
#define FORTRAN_LOWER_CONVERT_TYPE_H
-#include "flang/Support/Fortran.h"
#include "flang/Evaluate/type.h"
+#include "flang/Support/Fortran.h"
#include "mlir/IR/BuiltinTypes.h"
namespace mlir {
diff --git a/flang/include/flang/Lower/PFTBuilder.h b/flang/include/flang/Lower/PFTBuilder.h
index 7ee61e630581fe..b2e0d776a228b1 100644
--- a/flang/include/flang/Lower/PFTBuilder.h
+++ b/flang/include/flang/Lower/PFTBuilder.h
@@ -17,8 +17,6 @@
#ifndef FORTRAN_LOWER_PFTBUILDER_H
#define FORTRAN_LOWER_PFTBUILDER_H
-#include "flang/Support/reference.h"
-#include "flang/Support/template.h"
#include "flang/Lower/HostAssociations.h"
#include "flang/Lower/PFTDefs.h"
#include "flang/Parser/parse-tree.h"
@@ -26,6 +24,8 @@
#include "flang/Semantics/scope.h"
#include "flang/Semantics/semantics.h"
#include "flang/Semantics/symbol.h"
+#include "flang/Support/reference.h"
+#include "flang/Support/template.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/raw_ostream.h"
diff --git a/flang/include/flang/Lower/Support/Utils.h b/flang/include/flang/Lower/Support/Utils.h
index a09cfb16f7805a..08a872b228691d 100644
--- a/flang/include/flang/Lower/Support/Utils.h
+++ b/flang/include/flang/Lower/Support/Utils.h
@@ -13,9 +13,9 @@
#ifndef FORTRAN_LOWER_SUPPORT_UTILS_H
#define FORTRAN_LOWER_SUPPORT_UTILS_H
-#include "flang/Support/indirection.h"
#include "flang/Parser/char-block.h"
#include "flang/Semantics/tools.h"
+#include "flang/Support/indirection.h"
#include "mlir/Dialect/Arith/IR/Arith.h"
#include "mlir/Dialect/Func/IR/FuncOps.h"
#include "mlir/IR/BuiltinAttributes.h"
diff --git a/flang/include/flang/Lower/SymbolMap.h b/flang/include/flang/Lower/SymbolMap.h
index 7bba02e41a3bdf..fb64db407708ad 100644
--- a/flang/include/flang/Lower/SymbolMap.h
+++ b/flang/include/flang/Lower/SymbolMap.h
@@ -13,12 +13,12 @@
#ifndef FORTRAN_LOWER_SYMBOLMAP_H
#define FORTRAN_LOWER_SYMBOLMAP_H
-#include "flang/Support/reference.h"
#include "flang/Optimizer/Builder/BoxValue.h"
#include "flang/Optimizer/Dialect/FIRType.h"
#include "flang/Optimizer/Dialect/FortranVariableInterface.h"
#include "flang/Optimizer/Support/Matcher.h"
#include "flang/Semantics/symbol.h"
+#include "flang/Support/reference.h"
#include "mlir/IR/Value.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/DenseMap.h"
diff --git a/flang/include/flang/Optimizer/Builder/FIRBuilder.h b/flang/include/flang/Optimizer/Builder/FIRBuilder.h
index 90279417b5c939..14c1d5033fab40 100644
--- a/flang/include/flang/Optimizer/Builder/FIRBuilder.h
+++ b/flang/include/flang/Optimizer/Builder/FIRBuilder.h
@@ -16,12 +16,12 @@
#ifndef FORTRAN_OPTIMIZER_BUILDER_FIRBUILDER_H
#define FORTRAN_OPTIMIZER_BUILDER_FIRBUILDER_H
-#include "flang/Support/MathOptionsBase.h"
#include "flang/Optimizer/Dialect/FIROps.h"
#include "flang/Optimizer/Dialect/FIROpsSupport.h"
#include "flang/Optimizer/Dialect/FIRType.h"
#include "flang/Optimizer/Dialect/Support/FIRContext.h"
#include "flang/Optimizer/Dialect/Support/KindMapping.h"
+#include "flang/Support/MathOptionsBase.h"
#include "mlir/IR/Builders.h"
#include "mlir/IR/BuiltinOps.h"
#include "llvm/ADT/DenseMap.h"
diff --git a/flang/include/flang/Optimizer/Builder/PPCIntrinsicCall.h b/flang/include/flang/Optimizer/Builder/PPCIntrinsicCall.h
index 26cf34188eb568..2a3e85988184b4 100644
--- a/flang/include/flang/Optimizer/Builder/PPCIntrinsicCall.h
+++ b/flang/include/flang/Optimizer/Builder/PPCIntrinsicCall.h
@@ -9,8 +9,8 @@
#ifndef FORTRAN_LOWER_PPCINTRINSICCALL_H
#define FORTRAN_LOWER_PPCINTRINSICCALL_H
-#include "flang/Support/static-multimap-view.h"
#include "flang/Optimizer/Builder/IntrinsicCall.h"
+#include "flang/Support/static-multimap-view.h"
#include "mlir/Dialect/Math/IR/Math.h"
namespace fir {
diff --git a/flang/include/flang/Optimizer/Builder/Runtime/RTBuilder.h b/flang/include/flang/Optimizer/Builder/Runtime/RTBuilder.h
index 104e363e689857..e9fb177d311c01 100644
--- a/flang/include/flang/Optimizer/Builder/Runtime/RTBuilder.h
+++ b/flang/include/flang/Optimizer/Builder/Runtime/RTBuilder.h
@@ -17,12 +17,12 @@
#ifndef FORTRAN_OPTIMIZER_BUILDER_RUNTIME_RTBUILDER_H
#define FORTRAN_OPTIMIZER_BUILDER_RUNTIME_RTBUILDER_H
-#include "flang/Support/Fortran.h"
#include "flang/Common/uint128.h"
#include "flang/Optimizer/Builder/FIRBuilder.h"
#include "flang/Optimizer/Dialect/FIRDialect.h"
#include "flang/Optimizer/Dialect/FIRType.h"
#include "flang/Runtime/reduce.h"
+#include "flang/Support/Fortran.h"
#include "mlir/IR/BuiltinTypes.h"
#include "mlir/IR/MLIRContext.h"
#include "llvm/ADT/SmallVector.h"
diff --git a/flang/include/flang/Optimizer/Support/Utils.h b/flang/include/flang/Optimizer/Support/Utils.h
index 631322b34c49e5..88d38cb7574813 100644
--- a/flang/include/flang/Optimizer/Support/Utils.h
+++ b/flang/include/flang/Optimizer/Support/Utils.h
@@ -13,13 +13,13 @@
#ifndef FORTRAN_OPTIMIZER_SUPPORT_UTILS_H
#define FORTRAN_OPTIMIZER_SUPPORT_UTILS_H
-#include "flang/Support/default-kinds.h"
#include "flang/Optimizer/Builder/FIRBuilder.h"
#include "flang/Optimizer/Builder/Todo.h"
#include "flang/Optimizer/Dialect/CUF/Attributes/CUFAttr.h"
#include "flang/Optimizer/Dialect/FIROps.h"
#include "flang/Optimizer/Dialect/FIRType.h"
#include "flang/Optimizer/Support/FatalError.h"
+#include "flang/Support/default-kinds.h"
#include "mlir/Dialect/Arith/IR/Arith.h"
#include "mlir/Dialect/Func/IR/FuncOps.h"
#include "mlir/IR/BuiltinAttributes.h"
diff --git a/flang/include/flang/Parser/dump-parse-tree.h b/flang/include/flang/Parser/dump-parse-tree.h
index f98ac17b6ecba7..30ea08806430a9 100644
--- a/flang/include/flang/Parser/dump-parse-tree.h
+++ b/flang/include/flang/Parser/dump-parse-tree.h
@@ -14,8 +14,8 @@
#include "parse-tree.h"
#include "tools.h"
#include "unparse.h"
-#include "flang/Support/Fortran.h"
#include "flang/Common/idioms.h"
+#include "flang/Support/Fortran.h"
#include "flang/Support/indirection.h"
#include "llvm/Support/raw_ostream.h"
#include <string>
diff --git a/flang/include/flang/Parser/message.h b/flang/include/flang/Parser/message.h
index 70746bf551f2d7..c3d4a78c2c0023 100644
--- a/flang/include/flang/Parser/message.h
+++ b/flang/include/flang/Parser/message.h
@@ -16,8 +16,8 @@
#include "char-set.h"
#include "provenance.h"
#include "flang/Common/idioms.h"
-#include "flang/Support/reference-counted.h"
#include "flang/Common/restorer.h"
+#include "flang/Support/reference-counted.h"
#include <cstddef>
#include <cstring>
#include <forward_list>
diff --git a/flang/include/flang/Parser/parse-state.h b/flang/include/flang/Parser/parse-state.h
index 20d339aeeccccf..36d70b81b79236 100644
--- a/flang/include/flang/Parser/parse-state.h
+++ b/flang/include/flang/Parser/parse-state.h
@@ -16,11 +16,11 @@
// and recovery during parsing!
#include "user-state.h"
-#include "flang/Support/Fortran-features.h"
#include "flang/Common/idioms.h"
#include "flang/Parser/characters.h"
#include "flang/Parser/message.h"
#include "flang/Parser/provenance.h"
+#include "flang/Support/Fortran-features.h"
#include <cstddef>
#include <cstring>
#include <list>
diff --git a/flang/include/flang/Parser/parse-tree.h b/flang/include/flang/Parser/parse-tree.h
index a6d19dd6435966..de869f8200a261 100644
--- a/flang/include/flang/Parser/parse-tree.h
+++ b/flang/include/flang/Parser/parse-tree.h
@@ -22,8 +22,8 @@
#include "format-specification.h"
#include "message.h"
#include "provenance.h"
-#include "flang/Support/Fortran.h"
#include "flang/Common/idioms.h"
+#include "flang/Support/Fortran.h"
#include "flang/Support/indirection.h"
#include "llvm/Frontend/OpenACC/ACC.h.inc"
#include "llvm/Frontend/OpenMP/OMPConstants.h"
diff --git a/flang/include/flang/Parser/parsing.h b/flang/include/flang/Parser/parsing.h
index b0de98737f536e..0e608cb220d2c5 100644
--- a/flang/include/flang/Parser/parsing.h
+++ b/flang/include/flang/Parser/parsing.h
@@ -14,8 +14,8 @@
#include "message.h"
#include "parse-tree.h"
#include "provenance.h"
-#include "flang/Support/Fortran-features.h"
#include "flang/Parser/preprocessor.h"
+#include "flang/Support/Fortran-features.h"
#include "llvm/Support/raw_ostream.h"
#include <optional>
#include <string>
diff --git a/flang/include/flang/Parser/user-state.h b/flang/include/flang/Parser/user-state.h
index fff651208e0e52..129f9fb8fee058 100644
--- a/flang/include/flang/Parser/user-state.h
+++ b/flang/include/flang/Parser/user-state.h
@@ -14,10 +14,10 @@
// parse tree construction so as to avoid any need for representing
// state in static data.
-#include "flang/Support/Fortran-features.h"
#include "flang/Common/idioms.h"
#include "flang/Parser/char-block.h"
#include "flang/Parser/parse-tree.h"
+#include "flang/Support/Fortran-features.h"
#include "llvm/Support/raw_ostream.h"
#include <cinttypes>
#include <optional>
diff --git a/flang/include/flang/Semantics/expression.h b/flang/include/flang/Semantics/expression.h
index 77e26ffb834dd9..194cb746ff8a84 100644
--- a/flang/include/flang/Semantics/expression.h
+++ b/flang/include/flang/Semantics/expression.h
@@ -10,8 +10,6 @@
#define FORTRAN_SEMANTICS_EXPRESSION_H_
#include "semantics.h"
-#include "flang/Support/Fortran.h"
-#include "flang/Support/indirection.h"
#include "flang/Common/restorer.h"
#include "flang/Common/visit.h"
#include "flang/Evaluate/characteristics.h"
@@ -24,6 +22,8 @@
#include "flang/Parser/parse-tree-visitor.h"
#include "flang/Parser/parse-tree.h"
#include "flang/Parser/tools.h"
+#include "flang/Support/Fortran.h"
+#include "flang/Support/indirection.h"
#include <map>
#include <optional>
#include <type_traits>
diff --git a/flang/include/flang/Semantics/runtime-type-info.h b/flang/include/flang/Semantics/runtime-type-info.h
index 3f9f776797d782..94c50aab696816 100644
--- a/flang/include/flang/Semantics/runtime-type-info.h
+++ b/flang/include/flang/Semantics/runtime-type-info.h
@@ -14,8 +14,8 @@
#ifndef FORTRAN_SEMANTICS_RUNTIME_TYPE_INFO_H_
#define FORTRAN_SEMANTICS_RUNTIME_TYPE_INFO_H_
-#include "flang/Support/reference.h"
#include "flang/Semantics/symbol.h"
+#include "flang/Support/reference.h"
#include <map>
#include <set>
#include <string>
diff --git a/flang/include/flang/Semantics/scope.h b/flang/include/flang/Semantics/scope.h
index 8b416dcffb5245..72e8bab71b6c70 100644
--- a/flang/include/flang/Semantics/scope.h
+++ b/flang/include/flang/Semantics/scope.h
@@ -11,11 +11,11 @@
#include "attr.h"
#include "symbol.h"
-#include "flang/Support/Fortran.h"
#include "flang/Common/idioms.h"
-#include "flang/Support/reference.h"
#include "flang/Parser/message.h"
#include "flang/Parser/provenance.h"
+#include "flang/Support/Fortran.h"
+#include "flang/Support/reference.h"
#include <list>
#include <map>
#include <optional>
diff --git a/flang/include/flang/Semantics/semantics.h b/flang/include/flang/Semantics/semantics.h
index 899d4afa016bff..abce30f725d972 100644
--- a/flang/include/flang/Semantics/semantics.h
+++ b/flang/include/flang/Semantics/semantics.h
@@ -11,12 +11,12 @@
#include "scope.h"
#include "symbol.h"
-#include "flang/Support/Fortran-features.h"
#include "flang/Evaluate/common.h"
#include "flang/Evaluate/intrinsics.h"
#include "flang/Evaluate/target.h"
#include "flang/Parser/message.h"
#include "flang/Semantics/module-dependences.h"
+#include "flang/Support/Fortran-features.h"
#include <iosfwd>
#include <set>
#include <string>
diff --git a/flang/include/flang/Semantics/symbol.h b/flang/include/flang/Semantics/symbol.h
index 29587be2c7d77d..d207cfe7d7421a 100644
--- a/flang/include/flang/Semantics/symbol.h
+++ b/flang/include/flang/Semantics/symbol.h
@@ -10,11 +10,11 @@
#define FORTRAN_SEMANTICS_SYMBOL_H_
#include "type.h"
-#include "flang/Support/Fortran.h"
#include "flang/Common/enum-set.h"
-#include "flang/Support/reference.h"
#include "flang/Common/visit.h"
#include "flang/Semantics/module-dependences.h"
+#include "flang/Support/Fortran.h"
+#include "flang/Support/reference.h"
#include "llvm/ADT/DenseMapInfo.h"
#include <array>
diff --git a/flang/include/flang/Semantics/tools.h b/flang/include/flang/Semantics/tools.h
index 9be7ebff9b5bb6..e31de6e958a8c4 100644
--- a/flang/include/flang/Semantics/tools.h
+++ b/flang/include/flang/Semantics/tools.h
@@ -12,7 +12,6 @@
// Simple predicates and look-up functions that are best defined
// canonically for use in semantic checking.
-#include "flang/Support/Fortran.h"
#include "flang/Common/visit.h"
#include "flang/Evaluate/expression.h"
#include "flang/Evaluate/shape.h"
@@ -23,6 +22,7 @@
#include "flang/Semantics/attr.h"
#include "flang/Semantics/expression.h"
#include "flang/Semantics/semantics.h"
+#include "flang/Support/Fortran.h"
#include <functional>
namespace Fortran::semantics {
diff --git a/flang/include/flang/Semantics/type.h b/flang/include/flang/Semantics/type.h
index fd31bc805e2de6..210ea7a129376d 100644
--- a/flang/include/flang/Semantics/type.h
+++ b/flang/include/flang/Semantics/type.h
@@ -9,10 +9,10 @@
#ifndef FORTRAN_SEMANTICS_TYPE_H_
#define FORTRAN_SEMANTICS_TYPE_H_
-#include "flang/Support/Fortran.h"
#include "flang/Common/idioms.h"
#include "flang/Evaluate/expression.h"
#include "flang/Parser/char-block.h"
+#include "flang/Support/Fortran.h"
#include <algorithm>
#include <iosfwd>
#include <map>
diff --git a/flang/include/flang/Support/Fortran-features.h b/flang/include/flang/Support/Fortran-features.h
index f0bfc9232ea9e9..718ce680afeeab 100644
--- a/flang/include/flang/Support/Fortran-features.h
+++ b/flang/include/flang/Support/Fortran-features.h
@@ -9,9 +9,9 @@
#ifndef FORTRAN_COMMON_FORTRAN_FEATURES_H_
#define FORTRAN_COMMON_FORTRAN_FEATURES_H_
-#include "flang/Support/Fortran.h"
#include "flang/Common/enum-set.h"
#include "flang/Common/idioms.h"
+#include "flang/Support/Fortran.h"
#include <vector>
namespace Fortran::common {
diff --git a/flang/include/flang/Support/Fortran.h b/flang/include/flang/Support/Fortran.h
index 6dbfb51f19dd8e..343a0b30d2ba9c 100644
--- a/flang/include/flang/Support/Fortran.h
+++ b/flang/include/flang/Support/Fortran.h
@@ -1,4 +1,4 @@
-//===-- include/flang/Support/Fortran.h -------------------------*- C++ -*-===//
+//===-- include/flang/Common/Fortran.h --------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -9,7 +9,8 @@
#ifndef FORTRAN_COMMON_FORTRAN_H_
#define FORTRAN_COMMON_FORTRAN_H_
-
+// Fortran language concepts that are used in many phases are defined
+// once here to avoid redundancy and needless translation.
#include "flang/Common/Fortran-consts.h"
#include "flang/Common/enum-set.h"
@@ -18,11 +19,8 @@
#include <optional>
#include <string>
-
namespace Fortran::common {
- class LanguageFeatureControl;
-
-
+class LanguageFeatureControl;
constexpr bool IsNumericTypeCategory(TypeCategory category) {
return category == TypeCategory::Integer || category == TypeCategory::Real ||
@@ -46,7 +44,6 @@ const char *AsFortran(RelationalOperator);
ENUM_CLASS(Intent, Default, In, Out, InOut)
-
// Union of specifiers for all I/O statements.
ENUM_CLASS(IoSpecKind, Access, Action, Advance, Asynchronous, Blank, Decimal,
Delim, Direct, Encoding, End, Eor, Err, Exist, File, Fmt, Form, Formatted,
@@ -58,15 +55,11 @@ ENUM_CLASS(IoSpecKind, Access, Action, Advance, Asynchronous, Blank, Decimal,
Dispose, // nonstandard
)
-
const char *AsFortran(DefinedIo);
-
// Fortran label. Must be in [1..99999].
using Label = std::uint64_t;
-
-
// CUDA subprogram attribute combinations
ENUM_CLASS(CUDASubprogramAttrs, Host, Device, HostDevice, Global, Grid_Global)
@@ -112,5 +105,6 @@ inline std::string GetExternalAssemblyName(
std::string symbolName, bool underscoring) {
return underscoring ? std::move(symbolName) + "_" : std::move(symbolName);
}
+
} // namespace Fortran::common
#endif // FORTRAN_COMMON_FORTRAN_H_
diff --git a/flang/include/flang/Support/template.h b/flang/include/flang/Support/template.h
index e15de9c2d0cea8..58c9b0a5628e8a 100644
--- a/flang/include/flang/Support/template.h
+++ b/flang/include/flang/Support/template.h
@@ -9,8 +9,8 @@
#ifndef FORTRAN_COMMON_TEMPLATE_H_
#define FORTRAN_COMMON_TEMPLATE_H_
-#include "flang/Common/variant.h"
#include "flang/Common/idioms.h"
+#include "flang/Common/variant.h"
#include <functional>
#include <optional>
#include <tuple>
diff --git a/flang/include/flang/Tools/CrossToolHelpers.h b/flang/include/flang/Tools/CrossToolHelpers.h
index bc105f471aa003..168c3aefe0cd41 100644
--- a/flang/include/flang/Tools/CrossToolHelpers.h
+++ b/flang/include/flang/Tools/CrossToolHelpers.h
@@ -13,9 +13,9 @@
#ifndef FORTRAN_TOOLS_CROSS_TOOL_HELPERS_H
#define FORTRAN_TOOLS_CROSS_TOOL_HELPERS_H
-#include "flang/Support/MathOptionsBase.h"
#include "flang/Frontend/CodeGenOptions.h"
#include "flang/Frontend/LangOptions.h"
+#include "flang/Support/MathOptionsBase.h"
#include <cstdint>
#include "mlir/Dialect/OpenMP/OpenMPDialect.h"
diff --git a/flang/lib/Common/CMakeLists.txt b/flang/lib/Common/CMakeLists.txt
index b62aeb2c08b779..73af3bdd589162 100644
--- a/flang/lib/Common/CMakeLists.txt
+++ b/flang/lib/Common/CMakeLists.txt
@@ -1,11 +1,3 @@
-#===-- FortranRuntime/lib/Common/CMakeLists.txt ---------------------------===#
-#
-# 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
-#
-#===------------------------------------------------------------------------===#
-
add_flang_library(FortranCommon
"${CMAKE_CURRENT_SOURCE_DIR}/../../../FortranRuntime/lib/Common/binary-to-decimal.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/../../../FortranRuntime/lib/Common/decimal-to-binary.cpp"
diff --git a/flang/lib/Evaluate/call.cpp b/flang/lib/Evaluate/call.cpp
index 1cb8eb89f41687..f77df92a7597ab 100644
--- a/flang/lib/Evaluate/call.cpp
+++ b/flang/lib/Evaluate/call.cpp
@@ -7,13 +7,13 @@
//===----------------------------------------------------------------------===//
#include "flang/Evaluate/call.h"
-#include "flang/Support/Fortran.h"
#include "flang/Common/idioms.h"
#include "flang/Evaluate/characteristics.h"
#include "flang/Evaluate/check-expression.h"
#include "flang/Evaluate/expression.h"
#include "flang/Evaluate/tools.h"
#include "flang/Semantics/symbol.h"
+#include "flang/Support/Fortran.h"
namespace Fortran::evaluate {
diff --git a/flang/lib/Evaluate/characteristics.cpp b/flang/lib/Evaluate/characteristics.cpp
index 091f2e2b553e86..ffa3ec721cbd63 100644
--- a/flang/lib/Evaluate/characteristics.cpp
+++ b/flang/lib/Evaluate/characteristics.cpp
@@ -7,7 +7,6 @@
//===----------------------------------------------------------------------===//
#include "flang/Evaluate/characteristics.h"
-#include "flang/Support/indirection.h"
#include "flang/Evaluate/check-expression.h"
#include "flang/Evaluate/fold.h"
#include "flang/Evaluate/intrinsics.h"
@@ -17,6 +16,7 @@
#include "flang/Semantics/scope.h"
#include "flang/Semantics/symbol.h"
#include "flang/Semantics/tools.h"
+#include "flang/Support/indirection.h"
#include "llvm/Support/raw_ostream.h"
#include <initializer_list>
diff --git a/flang/lib/Evaluate/common.cpp b/flang/lib/Evaluate/common.cpp
index 7741bec650575d..ed040b0728c4db 100644
--- a/flang/lib/Evaluate/common.cpp
+++ b/flang/lib/Evaluate/common.cpp
@@ -9,7 +9,6 @@
#include "flang/Evaluate/common.h"
#include "flang/Common/idioms.h"
-
using namespace Fortran::parser::literals;
diff --git a/flang/lib/Evaluate/fold-implementation.h b/flang/lib/Evaluate/fold-implementation.h
index c8452cdd6a0caa..86cbd971aebcb5 100644
--- a/flang/lib/Evaluate/fold-implementation.h
+++ b/flang/lib/Evaluate/fold-implementation.h
@@ -12,9 +12,6 @@
#include "character.h"
#include "host.h"
#include "int-power.h"
-#include "flang/Support/indirection.h"
-#include "flang/Support/template.h"
-#include "flang/Support/unwrap.h"
#include "flang/Evaluate/characteristics.h"
#include "flang/Evaluate/common.h"
#include "flang/Evaluate/constant.h"
@@ -31,6 +28,9 @@
#include "flang/Semantics/scope.h"
#include "flang/Semantics/symbol.h"
#include "flang/Semantics/tools.h"
+#include "flang/Support/indirection.h"
+#include "flang/Support/template.h"
+#include "flang/Support/unwrap.h"
#include <algorithm>
#include <cmath>
#include <complex>
diff --git a/flang/lib/Evaluate/formatting.cpp b/flang/lib/Evaluate/formatting.cpp
index db5d005d97c8c9..a53fa019984b43 100644
--- a/flang/lib/Evaluate/formatting.cpp
+++ b/flang/lib/Evaluate/formatting.cpp
@@ -7,7 +7,6 @@
//===----------------------------------------------------------------------===//
#include "flang/Evaluate/formatting.h"
-#include "flang/Support/Fortran.h"
#include "flang/Evaluate/call.h"
#include "flang/Evaluate/constant.h"
#include "flang/Evaluate/expression.h"
@@ -16,6 +15,7 @@
#include "flang/Parser/characters.h"
#include "flang/Semantics/semantics.h"
#include "flang/Semantics/symbol.h"
+#include "flang/Support/Fortran.h"
#include "llvm/Support/raw_ostream.h"
namespace Fortran::evaluate {
diff --git a/flang/lib/Evaluate/intrinsics-library.cpp b/flang/lib/Evaluate/intrinsics-library.cpp
index 440ddaaf9689c8..4f1eff492afae5 100644
--- a/flang/lib/Evaluate/intrinsics-library.cpp
+++ b/flang/lib/Evaluate/intrinsics-library.cpp
@@ -14,8 +14,8 @@
#include "flang/Evaluate/intrinsics-library.h"
#include "fold-implementation.h"
#include "host.h"
-#include "flang/Support/static-multimap-view.h"
#include "flang/Evaluate/expression.h"
+#include "flang/Support/static-multimap-view.h"
#include <cfloat>
#include <cmath>
#include <complex>
diff --git a/flang/lib/Evaluate/intrinsics.cpp b/flang/lib/Evaluate/intrinsics.cpp
index 343bd2c9f22be2..bcad2d831cb784 100644
--- a/flang/lib/Evaluate/intrinsics.cpp
+++ b/flang/lib/Evaluate/intrinsics.cpp
@@ -7,7 +7,6 @@
//===----------------------------------------------------------------------===//
#include "flang/Evaluate/intrinsics.h"
-#include "flang/Support/Fortran.h"
#include "flang/Common/enum-set.h"
#include "flang/Common/idioms.h"
#include "flang/Evaluate/check-expression.h"
@@ -19,6 +18,7 @@
#include "flang/Evaluate/type.h"
#include "flang/Semantics/scope.h"
#include "flang/Semantics/tools.h"
+#include "flang/Support/Fortran.h"
#include "llvm/Support/raw_ostream.h"
#include <algorithm>
#include <cmath>
diff --git a/flang/lib/Evaluate/real.cpp b/flang/lib/Evaluate/real.cpp
index 9d465e5f35d6ae..01d2e14cbf933e 100644
--- a/flang/lib/Evaluate/real.cpp
+++ b/flang/lib/Evaluate/real.cpp
@@ -8,8 +8,8 @@
#include "flang/Evaluate/real.h"
#include "int-power.h"
-#include "flang/Common/idioms.h"
#include "flang/Common/decimal.h"
+#include "flang/Common/idioms.h"
#include "flang/Parser/characters.h"
#include "llvm/Support/raw_ostream.h"
#include <limits>
diff --git a/flang/lib/Evaluate/shape.cpp b/flang/lib/Evaluate/shape.cpp
index 7b78d8c7b9734f..d77dd312eba97a 100644
--- a/flang/lib/Evaluate/shape.cpp
+++ b/flang/lib/Evaluate/shape.cpp
@@ -8,7 +8,6 @@
#include "flang/Evaluate/shape.h"
#include "flang/Common/idioms.h"
-#include "flang/Support/template.h"
#include "flang/Evaluate/characteristics.h"
#include "flang/Evaluate/check-expression.h"
#include "flang/Evaluate/fold.h"
@@ -17,6 +16,7 @@
#include "flang/Evaluate/type.h"
#include "flang/Parser/message.h"
#include "flang/Semantics/symbol.h"
+#include "flang/Support/template.h"
#include <functional>
using namespace std::placeholders; // _1, _2, &c. for std::bind()
diff --git a/flang/lib/Evaluate/target.cpp b/flang/lib/Evaluate/target.cpp
index d0722c31e3c3f7..79d260af6d50b9 100644
--- a/flang/lib/Evaluate/target.cpp
+++ b/flang/lib/Evaluate/target.cpp
@@ -7,9 +7,9 @@
//===----------------------------------------------------------------------===//
#include "flang/Evaluate/target.h"
-#include "flang/Support/template.h"
#include "flang/Evaluate/common.h"
#include "flang/Evaluate/type.h"
+#include "flang/Support/template.h"
namespace Fortran::evaluate {
diff --git a/flang/lib/Frontend/CompilerInstance.cpp b/flang/lib/Frontend/CompilerInstance.cpp
index a0653576852101..d86d6e678a4ed9 100644
--- a/flang/lib/Frontend/CompilerInstance.cpp
+++ b/flang/lib/Frontend/CompilerInstance.cpp
@@ -11,12 +11,12 @@
//===----------------------------------------------------------------------===//
#include "flang/Frontend/CompilerInstance.h"
-#include "flang/Support/Fortran-features.h"
#include "flang/Frontend/CompilerInvocation.h"
#include "flang/Frontend/TextDiagnosticPrinter.h"
#include "flang/Parser/parsing.h"
#include "flang/Parser/provenance.h"
#include "flang/Semantics/semantics.h"
+#include "flang/Support/Fortran-features.h"
#include "clang/Basic/DiagnosticFrontend.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/MC/TargetRegistry.h"
diff --git a/flang/lib/Frontend/CompilerInvocation.cpp b/flang/lib/Frontend/CompilerInvocation.cpp
index 5fe6ccbc44a894..5416234ca3e9e6 100644
--- a/flang/lib/Frontend/CompilerInvocation.cpp
+++ b/flang/lib/Frontend/CompilerInvocation.cpp
@@ -11,13 +11,13 @@
//===----------------------------------------------------------------------===//
#include "flang/Frontend/CompilerInvocation.h"
-#include "flang/Support/Fortran-features.h"
-#include "flang/Support/OpenMP-features.h"
-#include "flang/Support/Version.h"
#include "flang/Frontend/CodeGenOptions.h"
#include "flang/Frontend/PreprocessorOptions.h"
#include "flang/Frontend/TargetOptions.h"
#include "flang/Semantics/semantics.h"
+#include "flang/Support/Fortran-features.h"
+#include "flang/Support/OpenMP-features.h"
+#include "flang/Support/Version.h"
#include "flang/Tools/TargetSetup.h"
#include "flang/Version.inc"
#include "clang/Basic/AllDiagnostics.h"
diff --git a/flang/lib/Frontend/FrontendActions.cpp b/flang/lib/Frontend/FrontendActions.cpp
index 7d51c20514387a..dced7f296e7904 100644
--- a/flang/lib/Frontend/FrontendActions.cpp
+++ b/flang/lib/Frontend/FrontendActions.cpp
@@ -11,7 +11,6 @@
//===----------------------------------------------------------------------===//
#include "flang/Frontend/FrontendActions.h"
-#include "flang/Support/default-kinds.h"
#include "flang/Frontend/CompilerInstance.h"
#include "flang/Frontend/CompilerInvocation.h"
#include "flang/Frontend/FrontendOptions.h"
@@ -33,6 +32,7 @@
#include "flang/Semantics/runtime-type-info.h"
#include "flang/Semantics/semantics.h"
#include "flang/Semantics/unparse-with-symbols.h"
+#include "flang/Support/default-kinds.h"
#include "flang/Tools/CrossToolHelpers.h"
#include "mlir/IR/Dialect.h"
diff --git a/flang/lib/Lower/Bridge.cpp b/flang/lib/Lower/Bridge.cpp
index 6924717cb467ac..c903c2169e4dcd 100644
--- a/flang/lib/Lower/Bridge.cpp
+++ b/flang/lib/Lower/Bridge.cpp
@@ -12,7 +12,6 @@
#include "flang/Lower/Bridge.h"
#include "DirectivesCommon.h"
-#include "flang/Support/Version.h"
#include "flang/Lower/Allocatable.h"
#include "flang/Lower/CallInterface.h"
#include "flang/Lower/Coarray.h"
@@ -59,6 +58,7 @@
#include "flang/Semantics/runtime-type-info.h"
#include "flang/Semantics/symbol.h"
#include "flang/Semantics/tools.h"
+#include "flang/Support/Version.h"
#include "mlir/Dialect/ControlFlow/IR/ControlFlowOps.h"
#include "mlir/IR/Matchers.h"
#include "mlir/IR/PatternMatch.h"
diff --git a/flang/lib/Lower/CallInterface.cpp b/flang/lib/Lower/CallInterface.cpp
index 153845699dae3d..9334ce009eae5e 100644
--- a/flang/lib/Lower/CallInterface.cpp
+++ b/flang/lib/Lower/CallInterface.cpp
@@ -7,7 +7,6 @@
//===----------------------------------------------------------------------===//
#include "flang/Lower/CallInterface.h"
-#include "flang/Support/Fortran.h"
#include "flang/Evaluate/fold.h"
#include "flang/Lower/Bridge.h"
#include "flang/Lower/Mangler.h"
@@ -23,6 +22,7 @@
#include "flang/Optimizer/Support/Utils.h"
#include "flang/Semantics/symbol.h"
#include "flang/Semantics/tools.h"
+#include "flang/Support/Fortran.h"
#include <optional>
static mlir::FunctionType
diff --git a/flang/lib/Lower/ConvertExpr.cpp b/flang/lib/Lower/ConvertExpr.cpp
index 4d2ac95ea784b5..b85043f78884f0 100644
--- a/flang/lib/Lower/ConvertExpr.cpp
+++ b/flang/lib/Lower/ConvertExpr.cpp
@@ -11,8 +11,6 @@
//===----------------------------------------------------------------------===//
#include "flang/Lower/ConvertExpr.h"
-#include "flang/Support/default-kinds.h"
-#include "flang/Support/unwrap.h"
#include "flang/Evaluate/fold.h"
#include "flang/Evaluate/real.h"
#include "flang/Evaluate/traverse.h"
@@ -52,6 +50,8 @@
#include "flang/Semantics/symbol.h"
#include "flang/Semantics/tools.h"
#include "flang/Semantics/type.h"
+#include "flang/Support/default-kinds.h"
+#include "flang/Support/unwrap.h"
#include "mlir/Dialect/Func/IR/FuncOps.h"
#include "llvm/ADT/TypeSwitch.h"
#include "llvm/Support/CommandLine.h"
diff --git a/flang/lib/Lower/Mangler.cpp b/flang/lib/Lower/Mangler.cpp
index 565f9c6cbc5892..4ff170c19d922a 100644
--- a/flang/lib/Lower/Mangler.cpp
+++ b/flang/lib/Lower/Mangler.cpp
@@ -7,12 +7,12 @@
//===----------------------------------------------------------------------===//
#include "flang/Lower/Mangler.h"
-#include "flang/Support/reference.h"
#include "flang/Lower/Support/Utils.h"
#include "flang/Optimizer/Builder/Todo.h"
#include "flang/Optimizer/Dialect/FIRType.h"
#include "flang/Optimizer/Support/InternalNames.h"
#include "flang/Semantics/tools.h"
+#include "flang/Support/reference.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringRef.h"
diff --git a/flang/lib/Optimizer/Builder/IntrinsicCall.cpp b/flang/lib/Optimizer/Builder/IntrinsicCall.cpp
index 5f1a25b1af23e9..460923bbccc27a 100644
--- a/flang/lib/Optimizer/Builder/IntrinsicCall.cpp
+++ b/flang/lib/Optimizer/Builder/IntrinsicCall.cpp
@@ -14,7 +14,6 @@
//===----------------------------------------------------------------------===//
#include "flang/Optimizer/Builder/IntrinsicCall.h"
-#include "flang/Support/static-multimap-view.h"
#include "flang/Optimizer/Builder/BoxValue.h"
#include "flang/Optimizer/Builder/Character.h"
#include "flang/Optimizer/Builder/Complex.h"
@@ -42,6 +41,7 @@
#include "flang/Optimizer/Support/Utils.h"
#include "flang/Runtime/entry-names.h"
#include "flang/Runtime/iostat.h"
+#include "flang/Support/static-multimap-view.h"
#include "mlir/Dialect/Complex/IR/Complex.h"
#include "mlir/Dialect/LLVMIR/LLVMDialect.h"
#include "mlir/Dialect/Math/IR/Math.h"
@@ -507,7 +507,7 @@ static constexpr IntrinsicHandler handlers[]{
/*isElemental=*/false},
{"not", &I::genNot},
{"null", &I::genNull, {{{"mold", asInquired}}}, /*isElemental=*/false},
- {"numeric_storage_size", &I::genNumericStorageSize},
+ {"numeric_storage_size", &I::genNumericStorageSize},
{"pack",
&I::genPack,
{{{"array", asBox},
@@ -7224,8 +7224,7 @@ IntrinsicLibrary::genVerify(mlir::Type resultType,
return readAndAddCleanUp(resultMutableBox, resultType, "VERIFY");
}
-
- fir::ExtendedValue IntrinsicLibrary:: genNumericStorageSize(mlir::Type resultType, llvm::ArrayRef<fir::ExtendedValue> args) {
+fir::ExtendedValue IntrinsicLibrary:: genNumericStorageSize(mlir::Type resultType, llvm::ArrayRef<fir::ExtendedValue> args) {
assert(args.empty() );
if (!ignoreModuleOnlyBuiltins) {
@@ -7236,7 +7235,6 @@ IntrinsicLibrary::genVerify(mlir::Type resultType,
return builder.createIntegerConstant(loc, resultType , 32 );
}
-
/// Process calls to Minloc, Maxloc intrinsic functions
template <typename FN, typename FD>
fir::ExtendedValue
diff --git a/flang/lib/Optimizer/CodeGen/TypeConverter.cpp b/flang/lib/Optimizer/CodeGen/TypeConverter.cpp
index c632e42ef72c29..45354e0fe79666 100644
--- a/flang/lib/Optimizer/CodeGen/TypeConverter.cpp
+++ b/flang/lib/Optimizer/CodeGen/TypeConverter.cpp
@@ -13,7 +13,6 @@
#define DEBUG_TYPE "flang-type-conversion"
#include "flang/Optimizer/CodeGen/TypeConverter.h"
-#include "flang/Support/Fortran.h"
#include "flang/Optimizer/Builder/Todo.h" // remove when TODO's are done
#include "flang/Optimizer/CodeGen/DescriptorModel.h"
#include "flang/Optimizer/CodeGen/TBAABuilder.h"
@@ -22,6 +21,7 @@
#include "flang/Optimizer/Dialect/Support/FIRContext.h"
#include "flang/Optimizer/Dialect/Support/KindMapping.h"
#include "flang/Optimizer/Support/InternalNames.h"
+#include "flang/Support/Fortran.h"
#include "mlir/Conversion/LLVMCommon/TypeConverter.h"
#include "llvm/ADT/ScopeExit.h"
#include "llvm/Support/Debug.h"
diff --git a/flang/lib/Optimizer/Transforms/AddDebugInfo.cpp b/flang/lib/Optimizer/Transforms/AddDebugInfo.cpp
index f41633629bb3e2..f84dd6bf6c06c5 100644
--- a/flang/lib/Optimizer/Transforms/AddDebugInfo.cpp
+++ b/flang/lib/Optimizer/Transforms/AddDebugInfo.cpp
@@ -12,7 +12,6 @@
//===----------------------------------------------------------------------===//
#include "DebugTypeGenerator.h"
-#include "flang/Support/Version.h"
#include "flang/Optimizer/Builder/FIRBuilder.h"
#include "flang/Optimizer/Builder/Todo.h"
#include "flang/Optimizer/CodeGen/CGOps.h"
@@ -22,6 +21,7 @@
#include "flang/Optimizer/Dialect/Support/FIRContext.h"
#include "flang/Optimizer/Support/InternalNames.h"
#include "flang/Optimizer/Transforms/Passes.h"
+#include "flang/Support/Version.h"
#include "mlir/Dialect/Func/IR/FuncOps.h"
#include "mlir/Dialect/LLVMIR/LLVMDialect.h"
#include "mlir/IR/Matchers.h"
diff --git a/flang/lib/Optimizer/Transforms/AssumedRankOpConversion.cpp b/flang/lib/Optimizer/Transforms/AssumedRankOpConversion.cpp
index ca6eacfd0e7200..9fccbd24a74982 100644
--- a/flang/lib/Optimizer/Transforms/AssumedRankOpConversion.cpp
+++ b/flang/lib/Optimizer/Transforms/AssumedRankOpConversion.cpp
@@ -6,7 +6,6 @@
//
//===----------------------------------------------------------------------===//
-#include "flang/Support/Fortran.h"
#include "flang/Lower/BuiltinModules.h"
#include "flang/Optimizer/Builder/FIRBuilder.h"
#include "flang/Optimizer/Builder/Runtime/Support.h"
@@ -17,6 +16,7 @@
#include "flang/Optimizer/Support/Utils.h"
#include "flang/Optimizer/Transforms/Passes.h"
#include "flang/Runtime/support.h"
+#include "flang/Support/Fortran.h"
#include "mlir/Dialect/Func/IR/FuncOps.h"
#include "mlir/Pass/Pass.h"
#include "mlir/Transforms/DialectConversion.h"
diff --git a/flang/lib/Optimizer/Transforms/CufOpConversion.cpp b/flang/lib/Optimizer/Transforms/CufOpConversion.cpp
index d3c44a75e4cffb..d7d321c6b9af3f 100644
--- a/flang/lib/Optimizer/Transforms/CufOpConversion.cpp
+++ b/flang/lib/Optimizer/Transforms/CufOpConversion.cpp
@@ -6,7 +6,6 @@
//
//===----------------------------------------------------------------------===//
-#include "flang/Support/Fortran.h"
#include "flang/Optimizer/Builder/Runtime/RTBuilder.h"
#include "flang/Optimizer/CodeGen/TypeConverter.h"
#include "flang/Optimizer/Dialect/CUF/CUFOps.h"
@@ -16,6 +15,7 @@
#include "flang/Optimizer/Support/DataLayout.h"
#include "flang/Runtime/CUDA/descriptor.h"
#include "flang/Runtime/allocatable.h"
+#include "flang/Support/Fortran.h"
#include "mlir/Pass/Pass.h"
#include "mlir/Transforms/DialectConversion.h"
#include "mlir/Transforms/GreedyPatternRewriteDriver.h"
diff --git a/flang/lib/Optimizer/Transforms/ExternalNameConversion.cpp b/flang/lib/Optimizer/Transforms/ExternalNameConversion.cpp
index 1915abe2f91e0e..3e4f46297357f9 100644
--- a/flang/lib/Optimizer/Transforms/ExternalNameConversion.cpp
+++ b/flang/lib/Optimizer/Transforms/ExternalNameConversion.cpp
@@ -6,12 +6,12 @@
//
//===----------------------------------------------------------------------===//
-#include "flang/Support/Fortran.h"
#include "flang/Optimizer/Dialect/FIRDialect.h"
#include "flang/Optimizer/Dialect/FIROps.h"
#include "flang/Optimizer/Dialect/FIROpsSupport.h"
#include "flang/Optimizer/Support/InternalNames.h"
#include "flang/Optimizer/Transforms/Passes.h"
+#include "flang/Support/Fortran.h"
#include "mlir/IR/Attributes.h"
#include "mlir/IR/SymbolTable.h"
#include "mlir/Pass/Pass.h"
diff --git a/flang/lib/Optimizer/Transforms/SimplifyIntrinsics.cpp b/flang/lib/Optimizer/Transforms/SimplifyIntrinsics.cpp
index c56dfa1cdfb524..3f5178710689cb 100644
--- a/flang/lib/Optimizer/Transforms/SimplifyIntrinsics.cpp
+++ b/flang/lib/Optimizer/Transforms/SimplifyIntrinsics.cpp
@@ -22,7 +22,6 @@
/// and small in size.
//===----------------------------------------------------------------------===//
-#include "flang/Support/Fortran.h"
#include "flang/Optimizer/Builder/BoxValue.h"
#include "flang/Optimizer/Builder/FIRBuilder.h"
#include "flang/Optimizer/Builder/LowLevelIntrinsics.h"
@@ -34,6 +33,7 @@
#include "flang/Optimizer/Transforms/Passes.h"
#include "flang/Optimizer/Transforms/Utils.h"
#include "flang/Runtime/entry-names.h"
+#include "flang/Support/Fortran.h"
#include "mlir/Dialect/LLVMIR/LLVMDialect.h"
#include "mlir/IR/Matchers.h"
#include "mlir/IR/Operation.h"
diff --git a/flang/lib/Optimizer/Transforms/StackReclaim.cpp b/flang/lib/Optimizer/Transforms/StackReclaim.cpp
index 629ba587adf3ca..eb088c30e94f20 100644
--- a/flang/lib/Optimizer/Transforms/StackReclaim.cpp
+++ b/flang/lib/Optimizer/Transforms/StackReclaim.cpp
@@ -6,10 +6,10 @@
//
//===----------------------------------------------------------------------===//
-#include "flang/Support/Fortran.h"
#include "flang/Optimizer/Dialect/FIRDialect.h"
#include "flang/Optimizer/Dialect/FIROps.h"
#include "flang/Optimizer/Transforms/Passes.h"
+#include "flang/Support/Fortran.h"
#include "mlir/Dialect/LLVMIR/LLVMDialect.h"
#include "mlir/IR/Matchers.h"
#include "mlir/Pass/Pass.h"
diff --git a/flang/lib/Parser/basic-parsers.h b/flang/lib/Parser/basic-parsers.h
index 6575c7d01de346..be0f4fc44374ca 100644
--- a/flang/lib/Parser/basic-parsers.h
+++ b/flang/lib/Parser/basic-parsers.h
@@ -22,14 +22,14 @@
// This header defines the fundamental parser class templates and helper
// template functions. See parser-combinators.txt for documentation.
-#include "flang/Support/Fortran-features.h"
#include "flang/Common/idioms.h"
-#include "flang/Support/indirection.h"
#include "flang/Parser/char-block.h"
#include "flang/Parser/message.h"
#include "flang/Parser/parse-state.h"
#include "flang/Parser/provenance.h"
#include "flang/Parser/user-state.h"
+#include "flang/Support/Fortran-features.h"
+#include "flang/Support/indirection.h"
#include <cstring>
#include <functional>
#include <list>
diff --git a/flang/lib/Parser/parse-tree.cpp b/flang/lib/Parser/parse-tree.cpp
index 3b90a57c602945..0793383efefb5f 100644
--- a/flang/lib/Parser/parse-tree.cpp
+++ b/flang/lib/Parser/parse-tree.cpp
@@ -8,9 +8,9 @@
#include "flang/Parser/parse-tree.h"
#include "flang/Common/idioms.h"
-#include "flang/Support/indirection.h"
#include "flang/Parser/tools.h"
#include "flang/Parser/user-state.h"
+#include "flang/Support/indirection.h"
#include "llvm/Support/raw_ostream.h"
#include <algorithm>
diff --git a/flang/lib/Parser/prescan.h b/flang/lib/Parser/prescan.h
index 0ea614d1df3bd9..f9d920a6621aa5 100644
--- a/flang/lib/Parser/prescan.h
+++ b/flang/lib/Parser/prescan.h
@@ -16,11 +16,11 @@
// fixed form character literals on truncated card images, file
// inclusion, and driving the Fortran source preprocessor.
-#include "flang/Support/Fortran-features.h"
#include "flang/Parser/characters.h"
#include "flang/Parser/message.h"
#include "flang/Parser/provenance.h"
#include "flang/Parser/token-sequence.h"
+#include "flang/Support/Fortran-features.h"
#include <bitset>
#include <optional>
#include <string>
diff --git a/flang/lib/Parser/unparse.cpp b/flang/lib/Parser/unparse.cpp
index 7b0385c63cd8a1..4a044514916030 100644
--- a/flang/lib/Parser/unparse.cpp
+++ b/flang/lib/Parser/unparse.cpp
@@ -10,13 +10,13 @@
// traversal templates in parse-tree-visitor.h.
#include "flang/Parser/unparse.h"
-#include "flang/Support/Fortran.h"
#include "flang/Common/idioms.h"
-#include "flang/Support/indirection.h"
#include "flang/Parser/characters.h"
#include "flang/Parser/parse-tree-visitor.h"
#include "flang/Parser/parse-tree.h"
#include "flang/Parser/tools.h"
+#include "flang/Support/Fortran.h"
+#include "flang/Support/indirection.h"
#include "llvm/Support/raw_ostream.h"
#include <algorithm>
#include <cinttypes>
diff --git a/flang/lib/Semantics/assignment.h b/flang/lib/Semantics/assignment.h
index 275625d3ed6522..ba0c70f7d224cb 100644
--- a/flang/lib/Semantics/assignment.h
+++ b/flang/lib/Semantics/assignment.h
@@ -9,9 +9,9 @@
#ifndef FORTRAN_SEMANTICS_ASSIGNMENT_H_
#define FORTRAN_SEMANTICS_ASSIGNMENT_H_
-#include "flang/Support/indirection.h"
#include "flang/Evaluate/expression.h"
#include "flang/Semantics/semantics.h"
+#include "flang/Support/indirection.h"
namespace Fortran::parser {
class ContextualMessages;
diff --git a/flang/lib/Semantics/check-case.cpp b/flang/lib/Semantics/check-case.cpp
index 0e38b24f1b319d..6d38bbee1eb2cb 100644
--- a/flang/lib/Semantics/check-case.cpp
+++ b/flang/lib/Semantics/check-case.cpp
@@ -8,13 +8,13 @@
#include "check-case.h"
#include "flang/Common/idioms.h"
-#include "flang/Support/reference.h"
-#include "flang/Support/template.h"
#include "flang/Evaluate/fold.h"
#include "flang/Evaluate/type.h"
#include "flang/Parser/parse-tree.h"
#include "flang/Semantics/semantics.h"
#include "flang/Semantics/tools.h"
+#include "flang/Support/reference.h"
+#include "flang/Support/template.h"
#include <tuple>
namespace Fortran::semantics {
diff --git a/flang/lib/Semantics/check-coarray.cpp b/flang/lib/Semantics/check-coarray.cpp
index d34c70e60d966b..ac1f38801cee72 100644
--- a/flang/lib/Semantics/check-coarray.cpp
+++ b/flang/lib/Semantics/check-coarray.cpp
@@ -7,13 +7,13 @@
//===----------------------------------------------------------------------===//
#include "check-coarray.h"
-#include "flang/Support/indirection.h"
#include "flang/Evaluate/expression.h"
#include "flang/Parser/message.h"
#include "flang/Parser/parse-tree.h"
#include "flang/Parser/tools.h"
#include "flang/Semantics/expression.h"
#include "flang/Semantics/tools.h"
+#include "flang/Support/indirection.h"
namespace Fortran::semantics {
diff --git a/flang/lib/Semantics/check-cuda.cpp b/flang/lib/Semantics/check-cuda.cpp
index 738a471f4d01f5..b89b46868d2e58 100644
--- a/flang/lib/Semantics/check-cuda.cpp
+++ b/flang/lib/Semantics/check-cuda.cpp
@@ -7,7 +7,6 @@
//===----------------------------------------------------------------------===//
#include "check-cuda.h"
-#include "flang/Support/template.h"
#include "flang/Evaluate/fold.h"
#include "flang/Evaluate/tools.h"
#include "flang/Evaluate/traverse.h"
@@ -17,6 +16,7 @@
#include "flang/Semantics/expression.h"
#include "flang/Semantics/symbol.h"
#include "flang/Semantics/tools.h"
+#include "flang/Support/template.h"
// Once labeled DO constructs have been canonicalized and their parse subtrees
// transformed into parser::DoConstructs, scan the parser::Blocks of the program
diff --git a/flang/lib/Semantics/check-data.h b/flang/lib/Semantics/check-data.h
index 5cdf46a5ffb1c9..6da316cccc4a7b 100644
--- a/flang/lib/Semantics/check-data.h
+++ b/flang/lib/Semantics/check-data.h
@@ -10,11 +10,11 @@
#define FORTRAN_SEMANTICS_CHECK_DATA_H_
#include "data-to-inits.h"
-#include "flang/Support/interval.h"
#include "flang/Evaluate/fold-designator.h"
#include "flang/Evaluate/initial-image.h"
#include "flang/Semantics/expression.h"
#include "flang/Semantics/semantics.h"
+#include "flang/Support/interval.h"
#include <list>
#include <map>
#include <vector>
diff --git a/flang/lib/Semantics/check-do-forall.cpp b/flang/lib/Semantics/check-do-forall.cpp
index 42e1c07fc45c3e..26530e798c9f4c 100644
--- a/flang/lib/Semantics/check-do-forall.cpp
+++ b/flang/lib/Semantics/check-do-forall.cpp
@@ -8,7 +8,6 @@
#include "check-do-forall.h"
#include "definable.h"
-#include "flang/Support/template.h"
#include "flang/Evaluate/call.h"
#include "flang/Evaluate/expression.h"
#include "flang/Evaluate/tools.h"
@@ -22,6 +21,7 @@
#include "flang/Semantics/symbol.h"
#include "flang/Semantics/tools.h"
#include "flang/Semantics/type.h"
+#include "flang/Support/template.h"
namespace Fortran::evaluate {
using ActualArgumentRef = common::Reference<const ActualArgument>;
diff --git a/flang/lib/Semantics/check-return.cpp b/flang/lib/Semantics/check-return.cpp
index 6a03467a27a759..c7b91a2725c942 100644
--- a/flang/lib/Semantics/check-return.cpp
+++ b/flang/lib/Semantics/check-return.cpp
@@ -7,11 +7,11 @@
//===----------------------------------------------------------------------===//
#include "check-return.h"
-#include "flang/Support/Fortran-features.h"
#include "flang/Parser/message.h"
#include "flang/Parser/parse-tree.h"
#include "flang/Semantics/semantics.h"
#include "flang/Semantics/tools.h"
+#include "flang/Support/Fortran-features.h"
namespace Fortran::semantics {
diff --git a/flang/lib/Semantics/check-select-rank.cpp b/flang/lib/Semantics/check-select-rank.cpp
index 722226465b6642..b227bbaaef4ba4 100644
--- a/flang/lib/Semantics/check-select-rank.cpp
+++ b/flang/lib/Semantics/check-select-rank.cpp
@@ -7,11 +7,11 @@
//===----------------------------------------------------------------------===//
#include "check-select-rank.h"
-#include "flang/Support/Fortran.h"
#include "flang/Common/idioms.h"
#include "flang/Parser/message.h"
#include "flang/Parser/tools.h"
#include "flang/Semantics/tools.h"
+#include "flang/Support/Fortran.h"
#include <list>
#include <optional>
#include <set>
diff --git a/flang/lib/Semantics/check-select-type.cpp b/flang/lib/Semantics/check-select-type.cpp
index da41410bd24612..b86a95492b21c1 100644
--- a/flang/lib/Semantics/check-select-type.cpp
+++ b/flang/lib/Semantics/check-select-type.cpp
@@ -8,12 +8,12 @@
#include "check-select-type.h"
#include "flang/Common/idioms.h"
-#include "flang/Support/reference.h"
#include "flang/Evaluate/fold.h"
#include "flang/Evaluate/type.h"
#include "flang/Parser/parse-tree.h"
#include "flang/Semantics/semantics.h"
#include "flang/Semantics/tools.h"
+#include "flang/Support/reference.h"
#include <optional>
namespace Fortran::semantics {
diff --git a/flang/lib/Semantics/check-stop.cpp b/flang/lib/Semantics/check-stop.cpp
index dab076424bd8e6..aabd52098e63bb 100644
--- a/flang/lib/Semantics/check-stop.cpp
+++ b/flang/lib/Semantics/check-stop.cpp
@@ -7,11 +7,11 @@
//===----------------------------------------------------------------------===//
#include "check-stop.h"
-#include "flang/Support/Fortran.h"
#include "flang/Evaluate/expression.h"
#include "flang/Parser/parse-tree.h"
#include "flang/Semantics/semantics.h"
#include "flang/Semantics/tools.h"
+#include "flang/Support/Fortran.h"
#include <optional>
namespace Fortran::semantics {
diff --git a/flang/lib/Semantics/data-to-inits.h b/flang/lib/Semantics/data-to-inits.h
index df4d552760eda6..e99a02cc79db15 100644
--- a/flang/lib/Semantics/data-to-inits.h
+++ b/flang/lib/Semantics/data-to-inits.h
@@ -9,10 +9,10 @@
#ifndef FORTRAN_SEMANTICS_DATA_TO_INITS_H_
#define FORTRAN_SEMANTICS_DATA_TO_INITS_H_
-#include "flang/Support/default-kinds.h"
-#include "flang/Support/interval.h"
#include "flang/Evaluate/fold-designator.h"
#include "flang/Evaluate/initial-image.h"
+#include "flang/Support/default-kinds.h"
+#include "flang/Support/interval.h"
#include <list>
#include <map>
diff --git a/flang/lib/Semantics/expression.cpp b/flang/lib/Semantics/expression.cpp
index a4be06515e4c87..2a8ed892c800eb 100644
--- a/flang/lib/Semantics/expression.cpp
+++ b/flang/lib/Semantics/expression.cpp
@@ -11,7 +11,6 @@
#include "pointer-assignment.h"
#include "resolve-names-utils.h"
#include "resolve-names.h"
-#include "flang/Support/Fortran.h"
#include "flang/Common/idioms.h"
#include "flang/Evaluate/common.h"
#include "flang/Evaluate/fold.h"
@@ -24,6 +23,7 @@
#include "flang/Semantics/semantics.h"
#include "flang/Semantics/symbol.h"
#include "flang/Semantics/tools.h"
+#include "flang/Support/Fortran.h"
#include "llvm/Support/raw_ostream.h"
#include <algorithm>
#include <functional>
diff --git a/flang/lib/Semantics/pointer-assignment.cpp b/flang/lib/Semantics/pointer-assignment.cpp
index abd3c5f461cb7e..d8fcedf24bdb9e 100644
--- a/flang/lib/Semantics/pointer-assignment.cpp
+++ b/flang/lib/Semantics/pointer-assignment.cpp
@@ -10,7 +10,6 @@
#include "definable.h"
#include "flang/Common/idioms.h"
#include "flang/Common/restorer.h"
-#include "flang/Support/template.h"
#include "flang/Evaluate/characteristics.h"
#include "flang/Evaluate/expression.h"
#include "flang/Evaluate/fold.h"
@@ -21,6 +20,7 @@
#include "flang/Semantics/expression.h"
#include "flang/Semantics/symbol.h"
#include "flang/Semantics/tools.h"
+#include "flang/Support/template.h"
#include "llvm/Support/raw_ostream.h"
#include <optional>
#include <set>
diff --git a/flang/lib/Semantics/resolve-labels.cpp b/flang/lib/Semantics/resolve-labels.cpp
index 84d2e51d438bfe..e988ba8e331963 100644
--- a/flang/lib/Semantics/resolve-labels.cpp
+++ b/flang/lib/Semantics/resolve-labels.cpp
@@ -8,9 +8,9 @@
#include "resolve-labels.h"
#include "flang/Common/enum-set.h"
-#include "flang/Support/template.h"
#include "flang/Parser/parse-tree-visitor.h"
#include "flang/Semantics/semantics.h"
+#include "flang/Support/template.h"
#include <cstdarg>
#include <type_traits>
diff --git a/flang/lib/Semantics/resolve-names-utils.cpp b/flang/lib/Semantics/resolve-names-utils.cpp
index bc5f458f403cf2..3aa48e92d423db 100644
--- a/flang/lib/Semantics/resolve-names-utils.cpp
+++ b/flang/lib/Semantics/resolve-names-utils.cpp
@@ -7,10 +7,7 @@
//===----------------------------------------------------------------------===//
#include "resolve-names-utils.h"
-#include "flang/Support/Fortran-features.h"
-#include "flang/Support/Fortran.h"
#include "flang/Common/idioms.h"
-#include "flang/Support/indirection.h"
#include "flang/Evaluate/fold.h"
#include "flang/Evaluate/tools.h"
#include "flang/Evaluate/traverse.h"
@@ -20,6 +17,9 @@
#include "flang/Semantics/expression.h"
#include "flang/Semantics/semantics.h"
#include "flang/Semantics/tools.h"
+#include "flang/Support/Fortran-features.h"
+#include "flang/Support/Fortran.h"
+#include "flang/Support/indirection.h"
#include <initializer_list>
#include <variant>
diff --git a/flang/lib/Semantics/resolve-names.cpp b/flang/lib/Semantics/resolve-names.cpp
index 920cefa084e05c..ebcb864549e48e 100644
--- a/flang/lib/Semantics/resolve-names.cpp
+++ b/flang/lib/Semantics/resolve-names.cpp
@@ -14,9 +14,6 @@
#include "resolve-directives.h"
#include "resolve-names-utils.h"
#include "rewrite-parse-tree.h"
-#include "flang/Support/Fortran.h"
-#include "flang/Support/default-kinds.h"
-#include "flang/Support/indirection.h"
#include "flang/Common/restorer.h"
#include "flang/Common/visit.h"
#include "flang/Evaluate/characteristics.h"
@@ -37,6 +34,9 @@
#include "flang/Semantics/symbol.h"
#include "flang/Semantics/tools.h"
#include "flang/Semantics/type.h"
+#include "flang/Support/Fortran.h"
+#include "flang/Support/default-kinds.h"
+#include "flang/Support/indirection.h"
#include "llvm/Support/raw_ostream.h"
#include <list>
#include <map>
diff --git a/flang/lib/Semantics/rewrite-parse-tree.cpp b/flang/lib/Semantics/rewrite-parse-tree.cpp
index 46641f5bd3c363..7f4efe67d7ec9f 100644
--- a/flang/lib/Semantics/rewrite-parse-tree.cpp
+++ b/flang/lib/Semantics/rewrite-parse-tree.cpp
@@ -8,7 +8,6 @@
#include "rewrite-parse-tree.h"
#include "rewrite-directives.h"
-#include "flang/Support/indirection.h"
#include "flang/Parser/parse-tree-visitor.h"
#include "flang/Parser/parse-tree.h"
#include "flang/Parser/tools.h"
@@ -16,6 +15,7 @@
#include "flang/Semantics/semantics.h"
#include "flang/Semantics/symbol.h"
#include "flang/Semantics/tools.h"
+#include "flang/Support/indirection.h"
#include <list>
namespace Fortran::semantics {
diff --git a/flang/lib/Semantics/semantics.cpp b/flang/lib/Semantics/semantics.cpp
index c39c8ac5a7b111..aa897f3011f51d 100644
--- a/flang/lib/Semantics/semantics.cpp
+++ b/flang/lib/Semantics/semantics.cpp
@@ -37,12 +37,12 @@
#include "resolve-labels.h"
#include "resolve-names.h"
#include "rewrite-parse-tree.h"
-#include "flang/Support/default-kinds.h"
#include "flang/Parser/parse-tree-visitor.h"
#include "flang/Parser/tools.h"
#include "flang/Semantics/expression.h"
#include "flang/Semantics/scope.h"
#include "flang/Semantics/symbol.h"
+#include "flang/Support/default-kinds.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/TargetParser/Host.h"
#include "llvm/TargetParser/Triple.h"
diff --git a/flang/lib/Semantics/tools.cpp b/flang/lib/Semantics/tools.cpp
index 2aa0476b8fa07a..3f5cf3cebbea9b 100644
--- a/flang/lib/Semantics/tools.cpp
+++ b/flang/lib/Semantics/tools.cpp
@@ -7,8 +7,6 @@
//===----------------------------------------------------------------------===//
#include "flang/Parser/tools.h"
-#include "flang/Support/Fortran.h"
-#include "flang/Support/indirection.h"
#include "flang/Parser/dump-parse-tree.h"
#include "flang/Parser/message.h"
#include "flang/Parser/parse-tree.h"
@@ -17,6 +15,8 @@
#include "flang/Semantics/symbol.h"
#include "flang/Semantics/tools.h"
#include "flang/Semantics/type.h"
+#include "flang/Support/Fortran.h"
+#include "flang/Support/indirection.h"
#include "llvm/Support/raw_ostream.h"
#include <algorithm>
#include <set>
diff --git a/flang/lib/Support/Fortran-features.cpp b/flang/lib/Support/Fortran-features.cpp
index e49735218ab967..868d18caa13c64 100644
--- a/flang/lib/Support/Fortran-features.cpp
+++ b/flang/lib/Support/Fortran-features.cpp
@@ -7,8 +7,8 @@
//===----------------------------------------------------------------------===//
#include "flang/Support/Fortran-features.h"
-#include "flang/Support/Fortran.h"
#include "flang/Common/idioms.h"
+#include "flang/Support/Fortran.h"
namespace Fortran::common {
diff --git a/flang/lib/Support/big-radix-floating-point.h b/flang/lib/Support/big-radix-floating-point.h
deleted file mode 100644
index 4c3d8f8b30832a..00000000000000
--- a/flang/lib/Support/big-radix-floating-point.h
+++ /dev/null
@@ -1,396 +0,0 @@
-//===-- lib/Support/big-radix-floating-point.h ------------------*- C++ -*-===//
-//
-// 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
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef FORTRAN_DECIMAL_BIG_RADIX_FLOATING_POINT_H_
-#define FORTRAN_DECIMAL_BIG_RADIX_FLOATING_POINT_H_
-
-// This is a helper class for use in floating-point conversions between
-// binary and decimal representations. It holds a multiple-precision
-// integer value using digits of a radix that is a large even power of ten
-// (10,000,000,000,000,000 by default, 10**16). These digits are accompanied
-// by a signed exponent that denotes multiplication by a power of ten.
-// The effective radix point is to the right of the digits (i.e., they do
-// not represent a fraction).
-//
-// The operations supported by this class are limited to those required
-// for conversions between binary and decimal representations; it is not
-// a general-purpose facility.
-
-#include "flang/Common/bit-population-count.h"
-#include "flang/Common/leading-zero-bit-count.h"
-#include "flang/Common/uint128.h"
-#include "flang/Support/binary-floating-point.h"
-#include "flang/Common/decimal.h"
-#include <cinttypes>
-#include <limits>
-#include <type_traits>
-
-// Some environments, viz. glibc 2.17, allow the macro HUGE
-// to leak out of <math.h>.
-#undef HUGE
-
-namespace Fortran::decimal {
-
-static constexpr std::uint64_t TenToThe(int power) {
- return power <= 0 ? 1 : 10 * TenToThe(power - 1);
-}
-
-// 10**(LOG10RADIX + 3) must be < 2**wordbits, and LOG10RADIX must be
-// even, so that pairs of decimal digits do not straddle Digits.
-// So LOG10RADIX must be 16 or 6.
-template <int PREC, int LOG10RADIX = 16> class BigRadixFloatingPointNumber {
-public:
- using Real = BinaryFloatingPointNumber<PREC>;
- static constexpr int log10Radix{LOG10RADIX};
-
-private:
- static constexpr std::uint64_t uint64Radix{TenToThe(log10Radix)};
- static constexpr int minDigitBits{
- 64 - common::LeadingZeroBitCount(uint64Radix)};
- using Digit = common::HostUnsignedIntType<minDigitBits>;
- static constexpr Digit radix{uint64Radix};
- static_assert(radix < std::numeric_limits<Digit>::max() / 1000,
- "radix is somehow too big");
- static_assert(radix > std::numeric_limits<Digit>::max() / 10000,
- "radix is somehow too small");
-
- // The base-2 logarithm of the least significant bit that can arise
- // in a subnormal IEEE floating-point number.
- static constexpr int minLog2AnyBit{
- -Real::exponentBias - Real::binaryPrecision};
-
- // The number of Digits needed to represent the smallest subnormal.
- static constexpr int maxDigits{3 - minLog2AnyBit / log10Radix};
-
-public:
- explicit RT_API_ATTRS BigRadixFloatingPointNumber(
- enum FortranRounding rounding = RoundNearest)
- : rounding_{rounding} {}
-
- // Converts a binary floating point value.
- explicit RT_API_ATTRS BigRadixFloatingPointNumber(
- Real, enum FortranRounding = RoundNearest);
-
- RT_API_ATTRS BigRadixFloatingPointNumber &SetToZero() {
- isNegative_ = false;
- digits_ = 0;
- exponent_ = 0;
- return *this;
- }
-
- RT_API_ATTRS bool IsInteger() const { return exponent_ >= 0; }
-
- // Converts decimal floating-point to binary.
- RT_API_ATTRS ConversionToBinaryResult<PREC> ConvertToBinary();
-
- // Parses and converts to binary. Handles leading spaces,
- // "NaN", & optionally-signed "Inf". Does not skip internal
- // spaces.
- // The argument is a reference to a pointer that is left
- // pointing to the first character that wasn't parsed.
- RT_API_ATTRS ConversionToBinaryResult<PREC> ConvertToBinary(
- const char *&, const char *end = nullptr);
-
- // Formats a decimal floating-point number to a user buffer.
- // May emit "NaN" or "Inf", or an possibly-signed integer.
- // No decimal point is written, but if it were, it would be
- // after the last digit; the effective decimal exponent is
- // returned as part of the result structure so that it can be
- // formatted by the client.
- RT_API_ATTRS ConversionToDecimalResult ConvertToDecimal(
- char *, std::size_t, enum DecimalConversionFlags, int digits) const;
-
- // Discard decimal digits not needed to distinguish this value
- // from the decimal encodings of two others (viz., the nearest binary
- // floating-point numbers immediately below and above this one).
- // The last decimal digit may not be uniquely determined in all
- // cases, and will be the mean value when that is so (e.g., if
- // last decimal digit values 6-8 would all work, it'll be a 7).
- // This minimization necessarily assumes that the value will be
- // emitted and read back into the same (or less precise) format
- // with default rounding to the nearest value.
- RT_API_ATTRS void Minimize(
- BigRadixFloatingPointNumber &&less, BigRadixFloatingPointNumber &&more);
-
- template <typename STREAM> STREAM &Dump(STREAM &) const;
-
-private:
- RT_API_ATTRS BigRadixFloatingPointNumber(
- const BigRadixFloatingPointNumber &that)
- : digits_{that.digits_}, exponent_{that.exponent_},
- isNegative_{that.isNegative_}, rounding_{that.rounding_} {
- for (int j{0}; j < digits_; ++j) {
- digit_[j] = that.digit_[j];
- }
- }
-
- RT_API_ATTRS bool IsZero() const {
- // Don't assume normalization.
- for (int j{0}; j < digits_; ++j) {
- if (digit_[j] != 0) {
- return false;
- }
- }
- return true;
- }
-
- // Predicate: true when 10*value would cause a carry.
- // (When this happens during decimal-to-binary conversion,
- // there are more digits in the input string than can be
- // represented precisely.)
- RT_API_ATTRS bool IsFull() const {
- return digits_ == digitLimit_ && digit_[digits_ - 1] >= radix / 10;
- }
-
- // Sets *this to an unsigned integer value.
- // Returns any remainder.
- template <typename UINT> RT_API_ATTRS UINT SetTo(UINT n) {
- static_assert(
- std::is_same_v<UINT, common::uint128_t> || std::is_unsigned_v<UINT>);
- SetToZero();
- while (n != 0) {
- auto q{n / 10u};
- if (n != q * 10) {
- break;
- }
- ++exponent_;
- n = q;
- }
- if constexpr (sizeof n < sizeof(Digit)) {
- if (n != 0) {
- digit_[digits_++] = n;
- }
- return 0;
- } else {
- while (n != 0 && digits_ < digitLimit_) {
- auto q{n / radix};
- digit_[digits_++] = static_cast<Digit>(n - q * radix);
- n = q;
- }
- return n;
- }
- }
-
- RT_API_ATTRS int RemoveLeastOrderZeroDigits() {
- int remove{0};
- if (digits_ > 0 && digit_[0] == 0) {
- while (remove < digits_ && digit_[remove] == 0) {
- ++remove;
- }
- if (remove >= digits_) {
- digits_ = 0;
- } else if (remove > 0) {
-#if defined __GNUC__ && __GNUC__ < 8
- // (&& j + remove < maxDigits) was added to avoid GCC < 8 build failure
- // on -Werror=array-bounds. This can be removed if -Werror is disable.
- for (int j{0}; j + remove < digits_ && (j + remove < maxDigits); ++j) {
-#else
- for (int j{0}; j + remove < digits_; ++j) {
-#endif
- digit_[j] = digit_[j + remove];
- }
- digits_ -= remove;
- }
- }
- return remove;
- }
-
- RT_API_ATTRS void RemoveLeadingZeroDigits() {
- while (digits_ > 0 && digit_[digits_ - 1] == 0) {
- --digits_;
- }
- }
-
- RT_API_ATTRS void Normalize() {
- RemoveLeadingZeroDigits();
- exponent_ += RemoveLeastOrderZeroDigits() * log10Radix;
- }
-
- // This limited divisibility test only works for even divisors of the radix,
- // which is fine since it's only ever used with 2 and 5.
- template <int N> RT_API_ATTRS bool IsDivisibleBy() const {
- static_assert(N > 1 && radix % N == 0, "bad modulus");
- return digits_ == 0 || (digit_[0] % N) == 0;
- }
-
- template <unsigned DIVISOR> RT_API_ATTRS int DivideBy() {
- Digit remainder{0};
- for (int j{digits_ - 1}; j >= 0; --j) {
- Digit q{digit_[j] / DIVISOR};
- Digit nrem{digit_[j] - DIVISOR * q};
- digit_[j] = q + (radix / DIVISOR) * remainder;
- remainder = nrem;
- }
- return remainder;
- }
-
- RT_API_ATTRS void DivideByPowerOfTwo(int twoPow) { // twoPow <= log10Radix
- Digit remainder{0};
- auto mask{(Digit{1} << twoPow) - 1};
- auto coeff{radix >> twoPow};
- for (int j{digits_ - 1}; j >= 0; --j) {
- auto nrem{digit_[j] & mask};
- digit_[j] = (digit_[j] >> twoPow) + coeff * remainder;
- remainder = nrem;
- }
- }
-
- // Returns true on overflow
- RT_API_ATTRS bool DivideByPowerOfTwoInPlace(int twoPow) {
- if (digits_ > 0) {
- while (twoPow > 0) {
- int chunk{twoPow > log10Radix ? log10Radix : twoPow};
- if ((digit_[0] & ((Digit{1} << chunk) - 1)) == 0) {
- DivideByPowerOfTwo(chunk);
- twoPow -= chunk;
- continue;
- }
- twoPow -= chunk;
- if (digit_[digits_ - 1] >> chunk != 0) {
- if (digits_ == digitLimit_) {
- return true; // overflow
- }
- digit_[digits_++] = 0;
- }
- auto remainder{digit_[digits_ - 1]};
- exponent_ -= log10Radix;
- auto coeff{radix >> chunk}; // precise; radix is (5*2)**log10Radix
- auto mask{(Digit{1} << chunk) - 1};
- for (int j{digits_ - 1}; j >= 1; --j) {
- digit_[j] = (digit_[j - 1] >> chunk) + coeff * remainder;
- remainder = digit_[j - 1] & mask;
- }
- digit_[0] = coeff * remainder;
- }
- }
- return false; // no overflow
- }
-
- RT_API_ATTRS int AddCarry(int position = 0, int carry = 1) {
- for (; position < digits_; ++position) {
- Digit v{digit_[position] + carry};
- if (v < radix) {
- digit_[position] = v;
- return 0;
- }
- digit_[position] = v - radix;
- carry = 1;
- }
- if (digits_ < digitLimit_) {
- digit_[digits_++] = carry;
- return 0;
- }
- Normalize();
- if (digits_ < digitLimit_) {
- digit_[digits_++] = carry;
- return 0;
- }
- return carry;
- }
-
- RT_API_ATTRS void Decrement() {
- for (int j{0}; digit_[j]-- == 0; ++j) {
- digit_[j] = radix - 1;
- }
- }
-
- template <int N> RT_API_ATTRS int MultiplyByHelper(int carry = 0) {
- for (int j{0}; j < digits_; ++j) {
- auto v{N * digit_[j] + carry};
- carry = v / radix;
- digit_[j] = v - carry * radix; // i.e., v % radix
- }
- return carry;
- }
-
- template <int N> RT_API_ATTRS int MultiplyBy(int carry = 0) {
- if (int newCarry{MultiplyByHelper<N>(carry)}) {
- return AddCarry(digits_, newCarry);
- } else {
- return 0;
- }
- }
-
- template <int N> RT_API_ATTRS int MultiplyWithoutNormalization() {
- if (int carry{MultiplyByHelper<N>(0)}) {
- if (digits_ < digitLimit_) {
- digit_[digits_++] = carry;
- return 0;
- } else {
- return carry;
- }
- } else {
- return 0;
- }
- }
-
- RT_API_ATTRS void LoseLeastSignificantDigit(); // with rounding
-
- RT_API_ATTRS void PushCarry(int carry) {
- if (digits_ == maxDigits && RemoveLeastOrderZeroDigits() == 0) {
- LoseLeastSignificantDigit();
- digit_[digits_ - 1] += carry;
- } else {
- digit_[digits_++] = carry;
- }
- }
-
- // Adds another number and then divides by two.
- // Assumes same exponent and sign.
- // Returns true when the result has effectively been rounded down.
- RT_API_ATTRS bool Mean(const BigRadixFloatingPointNumber &);
-
- // Parses a floating-point number; leaves the pointer reference
- // argument pointing at the next character after what was recognized.
- // The "end" argument can be left null if the caller is sure that the
- // string is properly terminated with an addressable character that
- // can't be in a valid floating-point character.
- RT_API_ATTRS bool ParseNumber(const char *&, bool &inexact, const char *end);
-
- using Raw = typename Real::RawType;
- constexpr RT_API_ATTRS Raw SignBit() const {
- return Raw{isNegative_} << (Real::bits - 1);
- }
- constexpr RT_API_ATTRS Raw Infinity() const {
- Raw result{static_cast<Raw>(Real::maxExponent)};
- result <<= Real::significandBits;
- result |= SignBit();
- if constexpr (Real::bits == 80) { // x87
- result |= Raw{1} << 63;
- }
- return result;
- }
- constexpr RT_API_ATTRS Raw NaN(bool isQuiet = true) {
- Raw result{Real::maxExponent};
- result <<= Real::significandBits;
- result |= SignBit();
- if constexpr (Real::bits == 80) { // x87
- result |= Raw{isQuiet ? 3u : 2u} << 62;
- } else {
- Raw quiet{isQuiet ? Raw{2} : Raw{1}};
- quiet <<= Real::significandBits - 2;
- result |= quiet;
- }
- return result;
- }
- constexpr RT_API_ATTRS Raw HUGE() const {
- Raw result{static_cast<Raw>(Real::maxExponent)};
- result <<= Real::significandBits;
- result |= SignBit();
- return result - 1; // decrement exponent, set all significand bits
- }
-
- Digit digit_[maxDigits]; // in little-endian order: digit_[0] is LSD
- int digits_{0}; // # of elements in digit_[] array; zero when zero
- int digitLimit_{maxDigits}; // precision clamp
- int exponent_{0}; // signed power of ten
- bool isNegative_{false};
- enum FortranRounding rounding_ { RoundNearest };
-};
-} // namespace Fortran::decimal
-#endif
diff --git a/flang/test/CMakeLists.txt b/flang/test/CMakeLists.txt
index 60261ea352780a..03fa79979470ee 100644
--- a/flang/test/CMakeLists.txt
+++ b/flang/test/CMakeLists.txt
@@ -63,7 +63,6 @@ set(FLANG_TEST_DEPENDS
FileCheck
count
not
-# module_files
fir-opt
tco
bbc
diff --git a/flang/tools/bbc/bbc.cpp b/flang/tools/bbc/bbc.cpp
index e9ec6b7116e0aa..917e052ef35fa1 100644
--- a/flang/tools/bbc/bbc.cpp
+++ b/flang/tools/bbc/bbc.cpp
@@ -14,10 +14,6 @@
///
//===----------------------------------------------------------------------===//
-#include "flang/Support/Fortran-features.h"
-#include "flang/Support/OpenMP-features.h"
-#include "flang/Support/Version.h"
-#include "flang/Support/default-kinds.h"
#include "flang/Frontend/TargetOptions.h"
#include "flang/Lower/Bridge.h"
#include "flang/Lower/PFTBuilder.h"
@@ -40,6 +36,10 @@
#include "flang/Semantics/runtime-type-info.h"
#include "flang/Semantics/semantics.h"
#include "flang/Semantics/unparse-with-symbols.h"
+#include "flang/Support/Fortran-features.h"
+#include "flang/Support/OpenMP-features.h"
+#include "flang/Support/Version.h"
+#include "flang/Support/default-kinds.h"
#include "flang/Tools/CrossToolHelpers.h"
#include "flang/Tools/TargetSetup.h"
#include "flang/Version.inc"
diff --git a/flang/tools/f18-parse-demo/f18-parse-demo.cpp b/flang/tools/f18-parse-demo/f18-parse-demo.cpp
index 691b6cebec9b51..a50c88dc840643 100644
--- a/flang/tools/f18-parse-demo/f18-parse-demo.cpp
+++ b/flang/tools/f18-parse-demo/f18-parse-demo.cpp
@@ -21,8 +21,6 @@
// scaffolding compiler driver that can test some semantic passes of the
// F18 compiler under development.
-#include "flang/Support/Fortran-features.h"
-#include "flang/Support/default-kinds.h"
#include "flang/Parser/characters.h"
#include "flang/Parser/dump-parse-tree.h"
#include "flang/Parser/message.h"
@@ -31,6 +29,8 @@
#include "flang/Parser/parsing.h"
#include "flang/Parser/provenance.h"
#include "flang/Parser/unparse.h"
+#include "flang/Support/Fortran-features.h"
+#include "flang/Support/default-kinds.h"
#include "llvm/Support/Errno.h"
#include "llvm/Support/FileSystem.h"
#include "llvm/Support/Program.h"
diff --git a/flang/unittests/Evaluate/expression.cpp b/flang/unittests/Evaluate/expression.cpp
index 6349997bafee48..d575f36def287e 100644
--- a/flang/unittests/Evaluate/expression.cpp
+++ b/flang/unittests/Evaluate/expression.cpp
@@ -1,10 +1,10 @@
#include "flang/Evaluate/expression.h"
-#include "flang/Testing/testing.h"
#include "flang/Evaluate/fold.h"
#include "flang/Evaluate/intrinsics.h"
#include "flang/Evaluate/target.h"
#include "flang/Evaluate/tools.h"
#include "flang/Parser/message.h"
+#include "flang/Testing/testing.h"
#include <cstdio>
#include <cstdlib>
#include <string>
diff --git a/flang/unittests/Evaluate/folding.cpp b/flang/unittests/Evaluate/folding.cpp
index 35df702ff20ea6..832e55d44316da 100644
--- a/flang/unittests/Evaluate/folding.cpp
+++ b/flang/unittests/Evaluate/folding.cpp
@@ -1,4 +1,3 @@
-#include "flang/Testing/testing.h"
#include "../../lib/Evaluate/host.h"
#include "flang/Evaluate/call.h"
#include "flang/Evaluate/expression.h"
@@ -7,6 +6,7 @@
#include "flang/Evaluate/intrinsics.h"
#include "flang/Evaluate/target.h"
#include "flang/Evaluate/tools.h"
+#include "flang/Testing/testing.h"
#include <tuple>
using namespace Fortran::evaluate;
diff --git a/flang/unittests/Evaluate/intrinsics.cpp b/flang/unittests/Evaluate/intrinsics.cpp
index 0baf01a4cb1b7e..cca2f8c30247e0 100644
--- a/flang/unittests/Evaluate/intrinsics.cpp
+++ b/flang/unittests/Evaluate/intrinsics.cpp
@@ -1,10 +1,10 @@
#include "flang/Evaluate/intrinsics.h"
-#include "flang/Testing/testing.h"
#include "flang/Evaluate/common.h"
#include "flang/Evaluate/expression.h"
#include "flang/Evaluate/target.h"
#include "flang/Evaluate/tools.h"
#include "flang/Parser/provenance.h"
+#include "flang/Testing/testing.h"
#include "llvm/Support/raw_ostream.h"
#include <initializer_list>
#include <map>
diff --git a/flang/unittests/Evaluate/logical.cpp b/flang/unittests/Evaluate/logical.cpp
index ee568371eab86c..ba7d0d8d0c0e3a 100644
--- a/flang/unittests/Evaluate/logical.cpp
+++ b/flang/unittests/Evaluate/logical.cpp
@@ -1,5 +1,5 @@
-#include "flang/Testing/testing.h"
#include "flang/Evaluate/type.h"
+#include "flang/Testing/testing.h"
#include <cstdio>
template <int KIND> void testKind() {
diff --git a/flang/unittests/Evaluate/real.cpp b/flang/unittests/Evaluate/real.cpp
index ab1a178df22312..23406fc6909aea 100644
--- a/flang/unittests/Evaluate/real.cpp
+++ b/flang/unittests/Evaluate/real.cpp
@@ -1,6 +1,6 @@
+#include "flang/Evaluate/type.h"
#include "flang/Testing/fp-testing.h"
#include "flang/Testing/testing.h"
-#include "flang/Evaluate/type.h"
#include "llvm/Support/raw_ostream.h"
#include <cmath>
#include <cstdio>
diff --git a/lld/COFF/MinGW.cpp b/lld/COFF/MinGW.cpp
index e4e6a3bb52410f..74d1ae0615fa6a 100644
--- a/lld/COFF/MinGW.cpp
+++ b/lld/COFF/MinGW.cpp
@@ -51,7 +51,6 @@ AutoExporter::AutoExporter(
"libc++",
"libc++abi",
"libFortranRuntime",
- "libFortranFloat128Math",
"libFortranRuntime.static",
"libFortranRuntime.dynamic",
"libFortranRuntime.static_dbg",
diff --git a/llvm/projects/CMakeLists.txt b/llvm/projects/CMakeLists.txt
index fab28c9df6d384..d8808bc79f0129 100644
--- a/llvm/projects/CMakeLists.txt
+++ b/llvm/projects/CMakeLists.txt
@@ -38,7 +38,6 @@ if(${LLVM_BUILD_RUNTIME})
if(NOT LLVM_BUILD_EXTERNAL_COMPILER_RT)
add_llvm_external_project(compiler-rt)
endif()
-
add_llvm_external_project(FortranRuntime)
endif()
diff --git a/llvm/runtimes/CMakeLists.txt b/llvm/runtimes/CMakeLists.txt
index e4389b120f49df..5da91169058724 100644
--- a/llvm/runtimes/CMakeLists.txt
+++ b/llvm/runtimes/CMakeLists.txt
@@ -510,14 +510,7 @@ if(build_runtimes)
list(APPEND extra_cmake_args "-DCMAKE_PROGRAM_PATH=${CMAKE_PROGRAM_PATH}")
endif()
- # FIXME: Go away
if("openmp" IN_LIST LLVM_ENABLE_RUNTIMES)
- #if (LLVM_TOOL_FLANG_BUILD AND "FortranRuntime" IN_LIST LLVM_ENABLE_PROJECTS)
- # message(STATUS "Configuring build of omp_lib.mod and omp_lib_kinds.mod via flang-new")
- # set(LIBOMP_FORTRAN_MODULES_COMPILER "${CMAKE_BINARY_DIR}/bin/flang-new${CMAKE_EXECUTABLE_SUFFIX}")
- # #TODO: set(LIBOMP_MODULES_INSTALL_PATH "${CMAKE_INSTALL_INCLUDEDIR}/flang")
- # list(APPEND extra_deps "flang-new")
- #endif()
if (LLVM_TOOL_FLANG_BUILD AND "FortranRuntime" IN_LIST LLVM_ENABLE_PROJECTS)
set(enable_fortran ENABLE_FORTRAN)
endif ()
diff --git a/runtimes/CMakeLists.txt b/runtimes/CMakeLists.txt
index d77b4da6e00e34..2a7798fd60af42 100644
--- a/runtimes/CMakeLists.txt
+++ b/runtimes/CMakeLists.txt
@@ -49,7 +49,6 @@ function(runtime_register_component name)
set_property(GLOBAL APPEND PROPERTY SUB_COMPONENTS ${name})
endfunction()
-message("LLVM_BINARY_DIR: ${LLVM_BINARY_DIR}")
find_package(LLVM PATHS "${LLVM_BINARY_DIR}" NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
find_package(Clang PATHS "${LLVM_BINARY_DIR}" NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
>From c7bc5e9785751bba5784b2ec93702b8e5005974d Mon Sep 17 00:00:00 2001
From: Michael Kruse <llvm-project at meinersbur.de>
Date: Mon, 30 Sep 2024 15:06:18 +0200
Subject: [PATCH 03/32] Move target-independent modules back to Flang
Move modules back to flang
Fix check-flang
Build fixes and cleanup
Test fix
Solve mscrt lib choice
clang_rt.builtins workaround via CMAake
clang_rt.builtins workaround via Clang
Revert "clang_rt.builtins workaround via Clang"
This reverts commit 2678d0c9a0ca86cfada9351d3328119388a35609.
Fix search for libclang_rt.builtins
move magic-numbers.h to common files
---
FortranRuntime/CMakeLists.txt | 52 +++---
.../cmake/modules/AddFortranRuntime.cmake | 43 +++--
.../Common/ISO_Fortran_binding_wrapper.h | 2 +-
.../flang/{Runtime => Common}/magic-numbers.h | 0
FortranRuntime/include/flang/Runtime/io-api.h | 2 +-
FortranRuntime/include/flang/Runtime/iostat.h | 2 +-
FortranRuntime/lib/Runtime/CMakeLists.txt | 153 ++++++-----------
FortranRuntime/lib/Runtime/file.cpp | 2 +-
FortranRuntime/lib/Runtime/io-error.cpp | 2 +-
FortranRuntime/lib/Runtime/stat.h | 2 +-
FortranRuntime/module/CMakeLists.txt | 63 -------
FortranRuntime/test/CMakeLists.txt | 13 +-
.../test/Driver/ctofortran.f90 | 3 +-
.../test/Driver/exec.f90 | 2 +-
FortranRuntime/test/NonGtestUnit/lit.cfg.py | 3 +-
FortranRuntime/test/lit.cfg.py | 16 +-
FortranRuntime/unittests/CMakeLists.txt | 11 +-
.../unittests/Common/CMakeLists.txt | 2 +-
.../unittests/Decimal/CMakeLists.txt | 4 +-
.../unittests/Evaluate/CMakeLists.txt | 4 +-
.../unittests/Runtime/CMakeLists.txt | 2 +-
clang/lib/Driver/ToolChains/Flang.cpp | 6 +-
flang/CMakeLists.txt | 14 ++
.../include/flang}/ISO_Fortran_binding.h | 11 +-
flang/lib/CMakeLists.txt | 3 -
flang/lib/Evaluate/fold-logical.cpp | 2 +-
flang/lib/Optimizer/Builder/IntrinsicCall.cpp | 17 --
.../module/.clang-format | 0
.../module/__cuda_builtins.f90 | 0
.../module/__fortran_builtins.f90 | 2 +-
.../module/__fortran_ieee_exceptions.f90 | 2 +-
.../module/__fortran_type_info.f90 | 0
.../module/__ppc_intrinsics.f90 | 0
.../module/__ppc_types.f90 | 0
.../module/cudadevice.f90 | 2 +-
.../module/ieee_arithmetic.f90 | 2 +-
.../module/ieee_exceptions.f90 | 0
.../module/ieee_features.f90 | 0
.../module/iso_c_binding.f90 | 0
.../module/iso_fortran_env.f90 | 2 +-
{FortranRuntime => flang}/module/mma.f90 | 43 ++---
flang/test/CMakeLists.txt | 1 +
.../test/Driver/msvc-dependent-lib-flags.f90 | 4 -
flang/tools/CMakeLists.txt | 1 +
flang/tools/bbc/CMakeLists.txt | 1 -
flang/tools/f18-parse-demo/CMakeLists.txt | 2 -
flang/tools/f18/CMakeLists.txt | 161 ++++++++++++++++++
flang/tools/f18/dump.cpp | 42 +++++
flang/tools/fir-opt/CMakeLists.txt | 2 -
flang/tools/flang-driver/CMakeLists.txt | 3 -
flang/tools/tco/CMakeLists.txt | 2 -
51 files changed, 387 insertions(+), 321 deletions(-)
rename FortranRuntime/include/flang/{Runtime => Common}/magic-numbers.h (100%)
delete mode 100644 FortranRuntime/module/CMakeLists.txt
rename {flang => FortranRuntime}/test/Driver/ctofortran.f90 (99%)
rename {flang => FortranRuntime}/test/Driver/exec.f90 (89%)
rename {FortranRuntime/include/flang/Common => flang/include/flang}/ISO_Fortran_binding.h (95%)
rename {FortranRuntime => flang}/module/.clang-format (100%)
rename {FortranRuntime => flang}/module/__cuda_builtins.f90 (100%)
rename {FortranRuntime => flang}/module/__fortran_builtins.f90 (99%)
rename {FortranRuntime => flang}/module/__fortran_ieee_exceptions.f90 (98%)
rename {FortranRuntime => flang}/module/__fortran_type_info.f90 (100%)
rename {FortranRuntime => flang}/module/__ppc_intrinsics.f90 (100%)
rename {FortranRuntime => flang}/module/__ppc_types.f90 (100%)
rename {FortranRuntime => flang}/module/cudadevice.f90 (96%)
rename {FortranRuntime => flang}/module/ieee_arithmetic.f90 (99%)
rename {FortranRuntime => flang}/module/ieee_exceptions.f90 (100%)
rename {FortranRuntime => flang}/module/ieee_features.f90 (100%)
rename {FortranRuntime => flang}/module/iso_c_binding.f90 (100%)
rename {FortranRuntime => flang}/module/iso_fortran_env.f90 (98%)
rename {FortranRuntime => flang}/module/mma.f90 (98%)
create mode 100644 flang/tools/f18/CMakeLists.txt
create mode 100644 flang/tools/f18/dump.cpp
diff --git a/FortranRuntime/CMakeLists.txt b/FortranRuntime/CMakeLists.txt
index 765e1445fc1a18..5c20b496dea821 100644
--- a/FortranRuntime/CMakeLists.txt
+++ b/FortranRuntime/CMakeLists.txt
@@ -15,6 +15,9 @@
set(LLVM_SUBPROJECT_TITLE "Fortran Runtime")
set(FORTRANRUNTIME_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
set(FORTRANRUNTIME_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}")
+set(FLANG_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../flang")
+
+enable_language(Fortran)
list(APPEND CMAKE_MODULE_PATH
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules"
@@ -22,7 +25,6 @@ list(APPEND CMAKE_MODULE_PATH
include(AddFortranRuntime)
-
############################
# Build Mode Introspection #
############################
@@ -38,28 +40,21 @@ endif()
if (LLVM_TREE_AVAILABLE)
# Despite Clang in the name, get_clang_resource_dir does not depend on Clang being added to the build
# flang-new uses the same resource dir as clang.
- include(GetClangResourceDir)
+ include(GetClangResourceDir)
get_clang_resource_dir(FORTRANRUNTIME_BUILD_LIB_DIR PREFIX "${LLVM_LIBRARY_OUTPUT_INTDIR}/.." SUBDIR "lib${LLVM_LIBDIR_SUFFIX}")
get_clang_resource_dir(FORTRANRUNTIME_INSTALL_LIB_DIR SUBDIR "lib${LLVM_LIBDIR_SUFFIX}") # No prefix, CMake's install command find the install prefix itself
-
- # FIXME: If compiling multiple triples, include dirs overwrite each other
- get_clang_resource_dir(FORTRANRUNTIME_BUILD_INCLUDE_DIR PREFIX "${LLVM_LIBRARY_OUTPUT_INTDIR}/.." SUBDIR "include")
- get_clang_resource_dir(FORTRANRUNTIME_INSTALL_INCLUDE_DIR SUBDIR "include")
else ()
set(FORTRANRUNTIME_BUILD_LIB_DIR "${LLVM_LIBRARY_OUTPUT_INTDIR}")
set(FORTRANRUNTIME_INSTALL_LIB_DIR "lib${LLVM_LIBDIR_SUFFIX}")
-
- set(FORTRANRUNTIME_BUILD_INCLUDE_DIR "${LLVM_INCLUDE_DIR}")
- set(FORTRANRUNTIME_INSTALL_INCLUDE_DIR "include")
endif ()
-
-if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR)
+if (DEFINED WIN32)
+ set(FORTRANRUNTIME_BUILD_LIB_DIR "${FORTRANRUNTIME_BUILD_LIB_DIR}/windows")
+ set(FORTRANRUNTIME_INSTALL_LIB_DIR "${FORTRANRUNTIME_INSTALL_LIB_DIR}/windows")
+elseif (LLVM_ENABLE_PER_TARGET_RUNTIME_DIR)
set(FORTRANRUNTIME_BUILD_LIB_DIR "${FORTRANRUNTIME_BUILD_LIB_DIR}/${LLVM_TARGET_TRIPLE}")
set(FORTRANRUNTIME_INSTALL_LIB_DIR "${FORTRANRUNTIME_INSTALL_LIB_DIR}/${LLVM_TARGET_TRIPLE}")
-endif()
-
-
+endif ()
#################
@@ -139,16 +134,26 @@ check_cxx_source_compiles(
"
HAVE_LDBL_MANT_DIG_113)
+# Search for clang_rt.builtins
+execute_process(
+ COMMAND "${CMAKE_CXX_COMPILER}" "-print-libgcc-file-name" "-rtlib=compiler-rt"
+ RESULT_VARIABLE CXX_COMPILER_PRINT_LIBGCC_PATH_FAILURE
+ OUTPUT_VARIABLE CXX_COMPILER_PRINT_LIBGCC_PATH_RESULT
+ )
+if (NOT CXX_COMPILER_PRINT_LIBGCC_PATH_FAILURE AND CXX_COMPILER_PRINT_LIBGCC_PATH_RESULT)
+ string(STRIP "${CXX_COMPILER_PRINT_LIBGCC_PATH_RESULT}" FORTRANRUNTIME_LIBCALL)
+else ()
+ set(FORTRANRUNTIME_LIBCALL "")
+endif ()
+
#####################
# Build Preparation #
#####################
-enable_language(Fortran)
-
# C++17 required for FortranRuntime, user or other runtimes may override this.
# GTest included later also requires C++17.
-set(CMAKE_CXX_STANDARD 17 CACHE STRING "C++ standard to conform to")
+set(CMAKE_CXX_STANDARD 17 CACHE STRING "C++ standard to conform to")
set(CMAKE_CXX_STANDARD_REQUIRED YES)
# Disable libstdc++/libc++ assertions, even in an LLVM_ENABLE_ASSERTIONS build,
@@ -156,29 +161,16 @@ set(CMAKE_CXX_STANDARD_REQUIRED YES)
add_definitions(-U_GLIBCXX_ASSERTIONS)
add_definitions(-U_LIBCPP_ENABLE_ASSERTIONS)
-
configure_file(cmake/config.h.cmake.in config.h)
-configure_file(
- "${FORTRANRUNTIME_SOURCE_DIR}/include/flang/Common/ISO_Fortran_binding.h"
- "${FORTRANRUNTIME_BUILD_INCLUDE_DIR}/ISO_Fortran_binding.h"
-)
-install(
- FILES "${FORTRANRUNTIME_BUILD_INCLUDE_DIR}/ISO_Fortran_binding.h"
- DESTINATION "${FORTRANRUNTIME_BUILD_INCLUDE_DIR}"
-)
-
-
###################
# Build Artifacts #
###################
add_subdirectory(lib)
-add_subdirectory(module)
if (FORTRANRUNTIME_INCLUDE_TESTS)
add_subdirectory(unittests)
add_subdirectory(test)
endif()
-
diff --git a/FortranRuntime/cmake/modules/AddFortranRuntime.cmake b/FortranRuntime/cmake/modules/AddFortranRuntime.cmake
index a4fc95495610cc..e4dff982e6deea 100644
--- a/FortranRuntime/cmake/modules/AddFortranRuntime.cmake
+++ b/FortranRuntime/cmake/modules/AddFortranRuntime.cmake
@@ -53,7 +53,8 @@ function (add_fortranruntime_library name)
list(APPEND extra_args EXCLUDE_FROM_ALL)
endif ()
- add_library(${name} ${extra_args} ${ARG_ADDITIONAL_HEADERS} ${ARG_UNPARSED_ARGUMENTS} )
+ add_library(${name} ${extra_args} ${ARG_ADDITIONAL_HEADERS} ${ARG_UNPARSED_ARGUMENTS})
+
if (ARG_INSTALL_WITH_TOOLCHAIN)
set_target_properties(${name} PROPERTIES FOLDER "Fortran Runtime/Toolchain Libraries")
elseif (ARG_OBJECT)
@@ -63,20 +64,28 @@ function (add_fortranruntime_library name)
endif ()
target_compile_features(${name} PRIVATE cxx_std_17)
- if(LLVM_COMPILER_IS_GCC_COMPATIBLE)
- target_compile_options (${name} PRIVATE $<$<COMPILE_LANGUAGE:CXX>:-fno-exceptions -fno-rtti -fno-unwind-tables -fno-asynchronous-unwind-tables>)
- elseif(MSVC)
- target_compile_options(${name} PRIVATE $<$<COMPILE_LANGUAGE:CXX>:/EHs-c- /GR->)
- endif()
+ if (LLVM_COMPILER_IS_GCC_COMPATIBLE)
+ target_compile_options (${name} PRIVATE $<$<COMPILE_LANGUAGE:CXX>:-fno-exceptions -fno-rtti -fno-unwind-tables -fno-asynchronous-unwind-tables>)
+ elseif (MSVC)
+ target_compile_options (${name} PRIVATE $<$<COMPILE_LANGUAGE:CXX>:/EHs-c- /GR->)
+ endif ()
- target_include_directories(${name} PRIVATE "${FORTRANRUNTIME_BINARY_DIR}") # For configured config.h for be found
+ # FortranRuntime's public headers
target_include_directories(${name} PRIVATE "${FORTRANRUNTIME_SOURCE_DIR}/include")
-set_target_properties(${name}
- PROPERTIES
- Fortran_MODULE_DIRECTORY "${FORTRANRUNTIME_BUILD_INCLUDE_DIR}/flang"
-)
+ # For ISO_Fortran_binding.h to be found (Accessed as #include "flang/ISO_Fortran_binding.h")
+ target_include_directories(${name} PRIVATE "${FLANG_SOURCE_DIR}/include")
+
+ # For configured config.h for be found
+ target_include_directories(${name} PRIVATE "${FORTRANRUNTIME_BINARY_DIR}")
+ # Clang/Flang, targeting the MSVC ABI, including clang-cl, should only depends on msv(u)crt. LLVM still emits libgcc/compiler-rt functions for 128-bit integer math (__udivti3, __modti3, __fixsfti, __floattidf, ...) that msvc does not support.
+ # We are injecting a dependency to Compiler-RT where these are implemented.
+ if (MSVC AND (CMAKE_CXX_COMPILER_ID MATCHES ".*Clang") AND FORTRANRUNTIME_LIBCALL)
+ target_compile_options(${name} PRIVATE "$<$<COMPILE_LANGUAGE:CXX,C>:-Xclang>$<$<COMPILE_LANGUAGE:Fortran>:-Xflang>" "--dependent-lib=${FORTRANRUNTIME_LIBCALL}")
+ endif ()
+
+ # Non-GTest unittests depend on LLVMSupport
if (ARG_LINK_TO_LLVM)
if (LLVM_LINK_LLVM_DYLIB)
set(llvm_libs LLVM)
@@ -84,26 +93,24 @@ set_target_properties(${name}
llvm_map_components_to_libnames(llvm_libs Support)
endif()
target_link_libraries(${name} PUBLIC ${llvm_libs})
- target_include_directories(${name} PRIVATE ${LLVM_INCLUDE_DIRS})
+ target_include_directories(${name} PRIVATE ${LLVM_INCLUDE_DIRS})
endif ()
# If this is part of the toolchain, put it into the compiler's resource directory.
# Otherwise it is part of testing and is not installed at all.
# TODO: Consider multi-configuration builds
- if (INSTALL_WITH_TOOLCHAIN)
+ if (ARG_INSTALL_WITH_TOOLCHAIN)
set_target_properties(${name}
- PROPERTIES
+ PROPERTIES
LIBRARY_OUTPUT_DIRECTORY "${FORTRANRUNTIME_BUILD_LIB_DIR}"
ARCHIVE_OUTPUT_DIRECTORY "${FORTRANRUNTIME_BUILD_LIB_DIR}"
RUNTIME_OUTPUT_DIRECTORY "${FORTRANRUNTIME_BUILD_LIB_DIR}"
- )
+ )
- if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY)
- install(TARGETS ${name}
+ install(TARGETS ${name}
LIBRARY DESTINATION "${FORTRANRUNTIME_INSTALL_LIB_DIR}"
ARCHIVE DESTINATION "${FORTRANRUNTIME_INSTALL_LIB_DIR}"
RUNTIME DESTINATION "${FORTRANRUNTIME_INSTALL_LIB_DIR}"
)
- endif ()
endif ()
endfunction (add_fortranruntime_library)
diff --git a/FortranRuntime/include/flang/Common/ISO_Fortran_binding_wrapper.h b/FortranRuntime/include/flang/Common/ISO_Fortran_binding_wrapper.h
index d1bc9be34859a4..2c0fdc123c8759 100644
--- a/FortranRuntime/include/flang/Common/ISO_Fortran_binding_wrapper.h
+++ b/FortranRuntime/include/flang/Common/ISO_Fortran_binding_wrapper.h
@@ -28,7 +28,7 @@ namespace Fortran {
namespace ISO {
#define FORTRAN_ISO_NAMESPACE_ ::Fortran::ISO
#endif /* __cplusplus */
-#include "ISO_Fortran_binding.h"
+#include "flang/ISO_Fortran_binding.h"
#ifdef __cplusplus
} // namespace ISO
} // namespace Fortran
diff --git a/FortranRuntime/include/flang/Runtime/magic-numbers.h b/FortranRuntime/include/flang/Common/magic-numbers.h
similarity index 100%
rename from FortranRuntime/include/flang/Runtime/magic-numbers.h
rename to FortranRuntime/include/flang/Common/magic-numbers.h
diff --git a/FortranRuntime/include/flang/Runtime/io-api.h b/FortranRuntime/include/flang/Runtime/io-api.h
index 367146a4925c53..93971a2282cd00 100644
--- a/FortranRuntime/include/flang/Runtime/io-api.h
+++ b/FortranRuntime/include/flang/Runtime/io-api.h
@@ -14,7 +14,7 @@
#include "flang/Common/uint128.h"
#include "flang/Runtime/entry-names.h"
#include "flang/Runtime/iostat.h"
-#include "flang/Runtime/magic-numbers.h"
+#include "flang/Common/magic-numbers.h"
#include <cinttypes>
#include <cstddef>
diff --git a/FortranRuntime/include/flang/Runtime/iostat.h b/FortranRuntime/include/flang/Runtime/iostat.h
index a5a2a560f05f8d..9a52990045ee13 100644
--- a/FortranRuntime/include/flang/Runtime/iostat.h
+++ b/FortranRuntime/include/flang/Runtime/iostat.h
@@ -12,7 +12,7 @@
#ifndef FORTRAN_RUNTIME_IOSTAT_H_
#define FORTRAN_RUNTIME_IOSTAT_H_
#include "flang/Common/api-attrs.h"
-#include "flang/Runtime/magic-numbers.h"
+#include "flang/Common/magic-numbers.h"
namespace Fortran::runtime::io {
// The value of IOSTAT= is zero when no error, end-of-record,
diff --git a/FortranRuntime/lib/Runtime/CMakeLists.txt b/FortranRuntime/lib/Runtime/CMakeLists.txt
index 9ccbc9ea78b0fc..5a0cc2ff14383a 100644
--- a/FortranRuntime/lib/Runtime/CMakeLists.txt
+++ b/FortranRuntime/lib/Runtime/CMakeLists.txt
@@ -9,6 +9,8 @@
add_subdirectory(Float128Math)
set(sources
+ ../Common/binary-to-decimal.cpp
+ ../Common/decimal-to-binary.cpp
ISO_Fortran_binding.cpp
allocator-registry.cpp
allocatable.cpp
@@ -74,76 +76,19 @@ set(sources
unit-map.cpp
unit.cpp
utf.cpp
- ../Common/binary-to-decimal.cpp
- ../Common/decimal-to-binary.cpp
)
-# List of files that are buildable for all devices.
-set(supported_files
- ISO_Fortran_binding.cpp
- allocatable.cpp
- allocator-registry.cpp
- array-constructor.cpp
- assign.cpp
- buffer.cpp
- character.cpp
- connection.cpp
- copy.cpp
- derived-api.cpp
- derived.cpp
- descriptor.cpp
- descriptor-io.cpp
- dot-product.cpp
- edit-input.cpp
- edit-output.cpp
- environment.cpp
- extrema.cpp
- external-unit.cpp
- file.cpp
- findloc.cpp
- format.cpp
- inquiry.cpp
- internal-unit.cpp
- io-api.cpp
- io-api-minimal.cpp
- io-error.cpp
- io-stmt.cpp
- iostat.cpp
- matmul-transpose.cpp
- matmul.cpp
- memory.cpp
- misc-intrinsic.cpp
- namelist.cpp
- non-tbp-dio.cpp
- numeric.cpp
- pointer.cpp
- product.cpp
- pseudo-unit.cpp
- ragged.cpp
- stat.cpp
- sum.cpp
- support.cpp
- terminator.cpp
- tools.cpp
- transformational.cpp
- type-code.cpp
- type-info.cpp
- unit.cpp
- utf.cpp
+set(public_headers "")
+file(GLOB_RECURSE public_headers
+ "${FLANGRUNTIME_SOURCE_DIR}/include/flang/Runtime/*.h"
+ "${FLANGRUNTIME_SOURCE_DIR}/include/flang/Common/*.h"
)
-
- set(public_headers "")
- file(GLOB_RECURSE public_headers
- "${FLANGRUNTIME_SOURCE_DIR}/include/flang/Runtime/*.h"
- "${FLANGRUNTIME_SOURCE_DIR}/include/flang/Common/*.h"
- )
-
- set(private_headers "")
- file(GLOB_RECURSE private_headers
- "${FLANGRUNTIME_SOURCE_DIR}/lib/Runtime/*.h"
- "${FLANGRUNTIME_SOURCE_DIR}/lib/Common/*.h"
- )
+set(private_headers "")
+file(GLOB_RECURSE private_headers
+ "${FLANGRUNTIME_SOURCE_DIR}/lib/Runtime/*.h"
+ "${FLANGRUNTIME_SOURCE_DIR}/lib/Common/*.h"
+ )
get_target_property(f128_sources
FortranFloat128MathILib INTERFACE_SOURCES
@@ -170,53 +115,59 @@ if (NOT DEFINED WIN32)
# For unittests that link to FortranRuntime. Should link to the static version of the library.
add_library(FortranRuntime.static ALIAS FortranRuntime)
+ add_library(FortranRuntime.unittest ALIAS FortranRuntime)
else()
- # ${sources} also contains Fortran files. CMake write the generated Fortran files into the same directory (lib/Runtime/iso_fortran_env_impl.mod), so we need to compile it only once and add the object files to different runtime version.
- add_fortranruntime_library(FortranRuntime.obj OBJECT
- ${sources}
-
- ADDITIONAL_HEADERS ${public_headers} ${private_headers}
- )
+ function (add_win_fortranruntime_library libtype suffix msvc_lib)
+ set(name "FortranRuntime.${suffix}")
+ add_fortranruntime_library(${name} ${libtype}
+ ${sources}
+ ${ARGN}
+ INSTALL_WITH_TOOLCHAIN
+ ADDITIONAL_HEADERS ${public_headers} ${private_headers}
+ )
- set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreaded)
- add_fortranruntime_library(FortranRuntime.static STATIC $<TARGET_OBJECTS:FortranRuntime.obj> INSTALL_WITH_TOOLCHAIN #${sources}
- )
+ # Setting an unique Fortran_MODULE_DIRECTORY is required for each variant to write a different .mod file.
+ set_target_properties(${name}
+ PROPERTIES
+ MSVC_RUNTIME_LIBRARY ${msvc_lib}
+ Fortran_MODULE_DIRECTORY "module.${suffix}"
+ )
+ endfunction ()
-
- set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreadedDLL)
- add_fortranruntime_library(FortranRuntime.dynamic SHARED $<TARGET_OBJECTS:FortranRuntime.obj> INSTALL_WITH_TOOLCHAIN #${sources}
- )
+ add_win_fortranruntime_library(STATIC static MultiThreaded)
+ add_win_fortranruntime_library(STATIC static_dbg MultiThreadedDebug)
-
- set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreadedDebug)
- add_fortranruntime_library(FortranRuntime.static_dbg STATIC $<TARGET_OBJECTS:FortranRuntime.obj> INSTALL_WITH_TOOLCHAIN #${sources}
- )
+ # unittests link against LLVMSupport which is compiled with /MD
+ add_win_fortranruntime_library(STATIC unittest MultiThreadedDLL EXCLUDE_FROM_ALL)
- set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreadedDebugDLL)
- add_fortranruntime_library(FortranRuntime.dynamic_dbg SHARED $<TARGET_OBJECTS:FortranRuntime.obj> INSTALL_WITH_TOOLCHAIN #${sources}
- )
- target_link_libraries(FortranRuntime.dynamic_dbg PRIVATE FortranRuntime.obj)
+ # FIXME: Before DLL versions of the runtime can be used, exported definitions must be annotated with __declspec(dllexport).
+ add_win_fortranruntime_library(SHARED dynamic MultiThreadedDLL)
+ add_win_fortranruntime_library(SHARED dynamic_dbg MultiThreadedDebugDLL)
# Target for building all versions of the runtime
add_custom_target(FortranRuntime)
set_target_properties(FortranRuntime PROPERTIES FOLDER "Fortran Runtime/Meta")
- add_dependencies(FortranRuntime FortranRuntime.static FortranRuntime.dynamic
- FortranRuntime.static_dbg FortranRuntime.dynamic_dbg)
+ add_dependencies(FortranRuntime
+ FortranRuntime.static
+ FortranRuntime.static_dbg
+ FortranRuntime.dynamic
+ FortranRuntime.dynamic_dbg
+ )
if (MSVC)
- # The Fortran files compiled with flang-new assumes libcall functions such as `__udivti3`
+ # The Fortran files compiled with flang-new generate libcall functions such as `__udivti3`
# Add LLVM_ENABLE_RUNTIMES=compiler-rt for it to be available during the runtimes build
# FIXME: Can embed linker command --dependent-lib into object files as already done with FortranRuntime.<mode>.lib
- if (NOT TARGET clang_rt.builtins-x86_64)
- message(WARNING
- "compiler-rt needed when compiling with msvc\n"
- "Flang/LLVM will emit code that calls into libgcc/compiler-rt, but using the MSVC linker will only link Microsoft's CRT automatically\n"
- "Add compiler-rt to LLVM_ENABLE_RUNTIMES to fix"
- )
- endif ()
- target_link_libraries(FortranRuntime.static PUBLIC clang_rt.builtins-x86_64)
- target_link_libraries(FortranRuntime.dynamic PUBLIC clang_rt.builtins-x86_64)
- target_link_libraries(FortranRuntime.static_dbg PUBLIC clang_rt.builtins-x86_64)
- target_link_libraries(FortranRuntime.dynamic_dbg PUBLIC clang_rt.builtins-x86_64)
+ #if (NOT TARGET clang_rt.builtins-x86_64)
+ # message(WARNING
+ # "compiler-rt needed when compiling with msvc\n"
+ # "Flang/LLVM will emit code that calls into libgcc/compiler-rt, but using the MSVC linker will only link Microsoft's CRT automatically\n"
+ # "Add compiler-rt to LLVM_ENABLE_RUNTIMES to fix"
+ # )
+ #endif ()
+ #target_link_libraries(FortranRuntime.static PUBLIC clang_rt.builtins-x86_64)
+ #target_link_libraries(FortranRuntime.static_dbg PUBLIC clang_rt.builtins-x86_64)
+ #target_link_libraries(FortranRuntime.dynamic PUBLIC clang_rt.builtins-x86_64)
+ #target_link_libraries(FortranRuntime.dynamic_dbg PUBLIC clang_rt.builtins-x86_64)
endif ()
endif()
diff --git a/FortranRuntime/lib/Runtime/file.cpp b/FortranRuntime/lib/Runtime/file.cpp
index b82f1c63e397f9..9988ced2b5c18c 100644
--- a/FortranRuntime/lib/Runtime/file.cpp
+++ b/FortranRuntime/lib/Runtime/file.cpp
@@ -7,7 +7,7 @@
//===----------------------------------------------------------------------===//
#include "file.h"
-#include "flang/Runtime/magic-numbers.h"
+#include "flang/Common/magic-numbers.h"
#include "flang/Runtime/memory.h"
#include "tools.h"
#include <algorithm>
diff --git a/FortranRuntime/lib/Runtime/io-error.cpp b/FortranRuntime/lib/Runtime/io-error.cpp
index b14a30354d2347..30fabe5ba077fe 100644
--- a/FortranRuntime/lib/Runtime/io-error.cpp
+++ b/FortranRuntime/lib/Runtime/io-error.cpp
@@ -8,7 +8,7 @@
#include "io-error.h"
#include "config.h"
-#include "flang/Runtime/magic-numbers.h"
+#include "flang/Common/magic-numbers.h"
#include "tools.h"
#include <cerrno>
#include <cstdarg>
diff --git a/FortranRuntime/lib/Runtime/stat.h b/FortranRuntime/lib/Runtime/stat.h
index eccd69024d726b..a679f9da16dd46 100644
--- a/FortranRuntime/lib/Runtime/stat.h
+++ b/FortranRuntime/lib/Runtime/stat.h
@@ -13,7 +13,7 @@
#define FORTRAN_RUNTIME_STAT_H_
#include "flang/Common/ISO_Fortran_binding_wrapper.h"
#include "flang/Common/api-attrs.h"
-#include "flang/Runtime/magic-numbers.h"
+#include "flang/Common/magic-numbers.h"
namespace Fortran::runtime {
class Descriptor;
diff --git a/FortranRuntime/module/CMakeLists.txt b/FortranRuntime/module/CMakeLists.txt
deleted file mode 100644
index 9841cbd586b2df..00000000000000
--- a/FortranRuntime/module/CMakeLists.txt
+++ /dev/null
@@ -1,63 +0,0 @@
-#===-- module/CMakeLists.txt -----------------------------------------------===#
-#
-# 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
-#
-#===------------------------------------------------------------------------===#
-
-set(module_sources
- "__cuda_builtins.f90"
- "__fortran_builtins.f90"
- "__fortran_ieee_exceptions.f90"
- "__fortran_type_info.f90"
- # "cudadevice.f90" # TODO: -fc1 -xcuda
- "ieee_arithmetic.f90"
- "ieee_exceptions.f90"
- "ieee_features.f90"
- "iso_c_binding.f90"
- "iso_fortran_env.f90"
-)
-
-set_source_files_properties(
- "iso_fortran_env.f90"
- PROPERTIES
- COMPILE_FLAGS "-mmlir -ignore-module-only-builtins"
-)
-
-set_source_files_properties(
- "__fortran_builtins.f90"
- PROPERTIES
- COMPILE_FLAGS "-mmlir -ignore-missing-type-desc"
-)
-
-# Requires PowerPC vector instructions
-if (LLVM_TARGET_TRIPLE MATCHES "(ppc|powerpc)(32|64)?(le|be)?\-.*")
- list(APPEND module_sources
- "__ppc_types.f90"
- "__ppc_intrinsics.f90"
- "mma.f90"
- )
-endif ()
-
-add_fortranruntime_library(module_files OBJECT
- ${module_sources}
-)
-
-# Usually, CMake will ignore dependencies from Fortran intrinsic modules. Since this is building those intrinsic modules themselves, tell CMake to not prune such dependencies.
-set_target_properties(module_files
- PROPERTIES
- Fortran_BUILDING_INSTRINSIC_MODULES ON
-)
-
-# The usual technique to install files in CMake is
-#
-# install(TARGET <targetname> <artifacttype> ...)
-#
-# However, there is no <artifacttype> for Fortran modules. We have to derive the module file path individually.
-set(module_files "")
-foreach (f90file IN LISTS module_sources)
- get_filename_component(base "${f90file}" NAME_WE )
- list(APPEND module_files "${FORTRANRUNTIME_BUILD_INCLUDE_DIR}/flang/${base}.mod")
-endforeach ()
-install(FILES ${module_files} DESTINATION "${FORTRANRUNTIME_INSTALL_INCLUDE_DIR}/flang")
diff --git a/FortranRuntime/test/CMakeLists.txt b/FortranRuntime/test/CMakeLists.txt
index 1f822859089f3d..c10c487d48c410 100644
--- a/FortranRuntime/test/CMakeLists.txt
+++ b/FortranRuntime/test/CMakeLists.txt
@@ -41,17 +41,16 @@ if (TARGET FortranRuntimeUnitTests)
)
endif ()
-set(FORTRANRUNTIME_TEST_DEPENDS "")
-if (FORTRANRUNTIME_INCLUDE_TESTS)
- if (TARGET FortranRuntimeUnitTests)
- list(APPEND FORTRANRUNTIME_TEST_DEPENDS FortranRuntimeUnitTests)
- endif()
-endif()
+set(FORTRANRUNTIME_TEST_DEPENDS
+ FortranRuntimeUnitTests
+ FortranRuntime.static
+ )
add_custom_target(FortranRuntime-test-depends)
set_target_properties(FortranRuntime-test-depends PROPERTIES FOLDER "Fortran Runtime/Meta")
+add_dependencies(FortranRuntime-test-depends ${FORTRANRUNTIME_TEST_DEPENDS})
-add_lit_testsuite(check-FortranRuntime "Running the Flang regression tests"
+add_lit_testsuite(check-FortranRuntime "Running the FortranRuntime regression tests"
${CMAKE_CURRENT_BINARY_DIR}
DEPENDS ${FORTRANRUNTIME_TEST_DEPENDS}
)
diff --git a/flang/test/Driver/ctofortran.f90 b/FortranRuntime/test/Driver/ctofortran.f90
similarity index 99%
rename from flang/test/Driver/ctofortran.f90
rename to FortranRuntime/test/Driver/ctofortran.f90
index 78eac32133b18e..a9cbf166bfe46c 100644
--- a/flang/test/Driver/ctofortran.f90
+++ b/FortranRuntime/test/Driver/ctofortran.f90
@@ -1,8 +1,9 @@
-! UNSUPPORTED: system-windows
! RUN: split-file %s %t
! RUN: chmod +x %t/runtest.sh
! RUN: %t/runtest.sh %t %t/ffile.f90 %t/cfile.c %flang | FileCheck %s
+! UNSUPPORTED: system-windows
+
!--- ffile.f90
program fmain
interface
diff --git a/flang/test/Driver/exec.f90 b/FortranRuntime/test/Driver/exec.f90
similarity index 89%
rename from flang/test/Driver/exec.f90
rename to FortranRuntime/test/Driver/exec.f90
index fd174005ddf62a..07b42492b34d30 100644
--- a/flang/test/Driver/exec.f90
+++ b/FortranRuntime/test/Driver/exec.f90
@@ -1,4 +1,4 @@
-! UNSUPPORTED: system-windows
+! UNSUPPORTED? system-windows
! Verify that flang can correctly build executables.
! RUN: %flang %s -o %t
diff --git a/FortranRuntime/test/NonGtestUnit/lit.cfg.py b/FortranRuntime/test/NonGtestUnit/lit.cfg.py
index cd78ca76de503f..f807f2825a1bc7 100644
--- a/FortranRuntime/test/NonGtestUnit/lit.cfg.py
+++ b/FortranRuntime/test/NonGtestUnit/lit.cfg.py
@@ -8,7 +8,8 @@
config.name = "FortranRuntime-OldUnit"
# suffixes: A list of file extensions to treat as test files.
-config.suffixes = [".test"]
+# On Windows, ".exe" also matches the GTests and will execited redundantly.
+config.suffixes = [".test", ".exe"]
# test_source_root: The root path where unit test binaries are located.
config.test_source_root = os.path.join(config.fortranruntime_binary_dir, "unittests")
diff --git a/FortranRuntime/test/lit.cfg.py b/FortranRuntime/test/lit.cfg.py
index dd5124b8de4095..8aa1c6ab20e6ea 100644
--- a/FortranRuntime/test/lit.cfg.py
+++ b/FortranRuntime/test/lit.cfg.py
@@ -3,7 +3,7 @@
import lit.util
from lit.llvm import llvm_config
-from lit.llvm.subst import ToolSubst
+from lit.llvm.subst import ToolSubst, FindTool
# Configuration file for the 'lit' test runner.
@@ -61,11 +61,19 @@
if config.osx_sysroot:
isysroot_flag = ["-isysroot", config.osx_sysroot]
+tools = [
+ ToolSubst(
+ "%flang",
+ command=FindTool("flang-new"),
+ extra_args=isysroot_flag,
+ unresolved="fatal",
+ )
+ ]
+
# Define some variables to help us test that the flang runtime doesn't depend on
# the C++ runtime libraries. For this we need a C compiler.
libruntime = os.path.join(config.fortranruntime_build_lib_dir, "libFortranRuntime.a")
include = os.path.join(config.fortranruntime_source_dir, "include")
-tools = []
tools.append(
ToolSubst(
"%cc", command=config.cc, extra_args=isysroot_flag, unresolved="fatal"
@@ -74,5 +82,7 @@
tools.append(ToolSubst("%libruntime", command=libruntime, unresolved="fatal"))
tools.append(ToolSubst("%include", command=include, unresolved="fatal"))
-llvm_config.add_tool_substitutions(tools)
+# Lwt tests find LLVM's standard tools (FileCheck, split-file, not, ...)
+llvm_config.with_environment("PATH", config.llvm_tools_dir, append_path=True)
+llvm_config.add_tool_substitutions(tools)
diff --git a/FortranRuntime/unittests/CMakeLists.txt b/FortranRuntime/unittests/CMakeLists.txt
index d1aed058aad142..89e1c909d0f98e 100644
--- a/FortranRuntime/unittests/CMakeLists.txt
+++ b/FortranRuntime/unittests/CMakeLists.txt
@@ -21,6 +21,9 @@ endif ()
add_custom_target(FortranRuntimeUnitTests)
set_target_properties(FortranRuntimeUnitTests PROPERTIES FOLDER "Fortran Runtime/Tests")
+# Required because LLVMSupport is compiled with this option (by default).
+set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreadedDLL)
+
function(add_fortranruntime_unittest test_dirname)
cmake_parse_arguments(ARG
""
@@ -29,7 +32,9 @@ function(add_fortranruntime_unittest test_dirname)
${ARGN})
add_unittest(FortranRuntimeUnitTests ${test_dirname} ${ARG_UNPARSED_ARGUMENTS})
+
target_include_directories(${test_dirname} PRIVATE "${FORTRANRUNTIME_SOURCE_DIR}/include")
+ target_include_directories(${test_dirname} PRIVATE "${FLANG_SOURCE_DIR}/include")
target_link_libraries(${test_dirname} PRIVATE ${ARG_LINK_LIBS})
endfunction()
@@ -47,10 +52,12 @@ function(add_fortranruntime_nongtest_unittest test_name)
endif()
add_executable(${test_name}${suffix} ${ARG_UNPARSED_ARGUMENTS})
- target_link_libraries(${test_name}${suffix} PRIVATE NonGTestTesting ${ARG_LINK_LIBS})
- target_include_directories(${test_name}${suffix} PRIVATE "${FORTRANRUNTIME_SOURCE_DIR}/include")
set_target_properties(${test_name}${suffix} PROPERTIES FOLDER "Fortran Runtime/Tests/Unit")
+ target_include_directories(${test_name}${suffix} PRIVATE "${FORTRANRUNTIME_SOURCE_DIR}/include")
+ target_include_directories(${test_name}${suffix} PRIVATE "${FLANG_SOURCE_DIR}/include")
+ target_link_libraries(${test_name}${suffix} PRIVATE NonGTestTesting ${ARG_LINK_LIBS})
+
if(NOT ARG_SLOW_TEST)
add_dependencies(FortranRuntimeUnitTests ${test_name}${suffix})
endif()
diff --git a/FortranRuntime/unittests/Common/CMakeLists.txt b/FortranRuntime/unittests/Common/CMakeLists.txt
index f107036f19ed8d..5b3aebaf5f654a 100644
--- a/FortranRuntime/unittests/Common/CMakeLists.txt
+++ b/FortranRuntime/unittests/Common/CMakeLists.txt
@@ -9,5 +9,5 @@
add_fortranruntime_unittest(FlangCommonTests
FastIntSetTest.cpp
LINK_LIBS
- FortranRuntime.static
+ FortranRuntime.unittest
)
diff --git a/FortranRuntime/unittests/Decimal/CMakeLists.txt b/FortranRuntime/unittests/Decimal/CMakeLists.txt
index 3d96da45c94148..033773049680f6 100644
--- a/FortranRuntime/unittests/Decimal/CMakeLists.txt
+++ b/FortranRuntime/unittests/Decimal/CMakeLists.txt
@@ -9,12 +9,12 @@
add_fortranruntime_nongtest_unittest(quick-sanity-test
quick-sanity-test.cpp
LINK_LIBS
- FortranRuntime.static
+ FortranRuntime.unittest
)
# This test is not run by default as it takes a long time to execute.
add_fortranruntime_nongtest_unittest(thorough-test SLOW_TEST
thorough-test.cpp
LINK_LIBS
- FortranRuntime.static
+ FortranRuntime.unittest
)
diff --git a/FortranRuntime/unittests/Evaluate/CMakeLists.txt b/FortranRuntime/unittests/Evaluate/CMakeLists.txt
index e6501f13a74e6b..567832a2f15bcb 100644
--- a/FortranRuntime/unittests/Evaluate/CMakeLists.txt
+++ b/FortranRuntime/unittests/Evaluate/CMakeLists.txt
@@ -9,11 +9,11 @@
add_fortranruntime_nongtest_unittest(reshape
reshape.cpp
LINK_LIBS
- FortranRuntime.static
+ FortranRuntime.unittest
)
add_fortranruntime_nongtest_unittest(ISO-Fortran-binding
ISO-Fortran-binding.cpp
LINK_LIBS
- FortranRuntime.static
+ FortranRuntime.unittest
)
diff --git a/FortranRuntime/unittests/Runtime/CMakeLists.txt b/FortranRuntime/unittests/Runtime/CMakeLists.txt
index 1e966987c272a0..b4c0d7f86c1878 100644
--- a/FortranRuntime/unittests/Runtime/CMakeLists.txt
+++ b/FortranRuntime/unittests/Runtime/CMakeLists.txt
@@ -38,5 +38,5 @@ add_fortranruntime_unittest(FlangRuntimeTests
TemporaryStack.cpp
Transformational.cpp
LINK_LIBS
- FortranRuntime.static
+ FortranRuntime.unittest
)
diff --git a/clang/lib/Driver/ToolChains/Flang.cpp b/clang/lib/Driver/ToolChains/Flang.cpp
index 3619a8f4b81f08..aff656d74daa2f 100644
--- a/clang/lib/Driver/ToolChains/Flang.cpp
+++ b/clang/lib/Driver/ToolChains/Flang.cpp
@@ -290,11 +290,7 @@ static void processVSRuntimeLibrary(const ToolChain &TC, const ArgList &Args,
ArgStringList &CmdArgs) {
assert(TC.getTriple().isKnownWindowsMSVCEnvironment() &&
"can only add VS runtime library on Windows!");
- // if -fno-fortran-main has been passed, skip linking Fortran_main.a
- if (TC.getTriple().isKnownWindowsMSVCEnvironment()) {
- CmdArgs.push_back(Args.MakeArgString(
- "--dependent-lib=" + TC.getCompilerRTBasename(Args, "builtins")));
- }
+
unsigned RTOptionID = options::OPT__SLASH_MT;
if (auto *rtl = Args.getLastArg(options::OPT_fms_runtime_lib_EQ)) {
RTOptionID = llvm::StringSwitch<unsigned>(rtl->getValue())
diff --git a/flang/CMakeLists.txt b/flang/CMakeLists.txt
index 47517c5e7ab82f..827ed11e55001c 100644
--- a/flang/CMakeLists.txt
+++ b/flang/CMakeLists.txt
@@ -509,3 +509,17 @@ if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY)
)
endif()
+# Put ISO_Fortran_binding.h into the include files of the build area now
+# so that we can run tests before installing
+include(GetClangResourceDir)
+get_clang_resource_dir(HEADER_BINARY_DIR PREFIX ${LLVM_LIBRARY_OUTPUT_INTDIR}/.. SUBDIR include)
+configure_file(
+ ${FLANG_SOURCE_DIR}/include/flang/ISO_Fortran_binding.h
+ ${HEADER_BINARY_DIR}/ISO_Fortran_binding.h)
+
+# And also install it into the install area
+get_clang_resource_dir(HEADER_INSTALL_DIR SUBDIR include)
+install(
+ FILES include/flang/ISO_Fortran_binding.h
+ DESTINATION ${HEADER_INSTALL_DIR} )
+
diff --git a/FortranRuntime/include/flang/Common/ISO_Fortran_binding.h b/flang/include/flang/ISO_Fortran_binding.h
similarity index 95%
rename from FortranRuntime/include/flang/Common/ISO_Fortran_binding.h
rename to flang/include/flang/ISO_Fortran_binding.h
index 516355c01ec7d0..3361db27aa4517 100644
--- a/FortranRuntime/include/flang/Common/ISO_Fortran_binding.h
+++ b/flang/include/flang/ISO_Fortran_binding.h
@@ -1,13 +1,14 @@
-/*===-- include/flang/Common/ISO_Fortran_binding.h ------------------*- C -*-===
+/*===-- include/flang/ISO_Fortran_binding.h -----------------------*- C++ -*-===
*
* 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
*
- *===----------------------------------------------------------------------===*/
+ * ===-----------------------------------------------------------------------===
+ */
-#ifndef FORTRAN_COMMON_ISO_FORTRAN_BINDING_H_
-#define FORTRAN_COMMON_ISO_FORTRAN_BINDING_H_
+#ifndef CFI_ISO_FORTRAN_BINDING_H_
+#define CFI_ISO_FORTRAN_BINDING_H_
/* When this header is included into the compiler and runtime implementations,
* it does so by means of a wrapper header that establishes namespaces and
@@ -206,4 +207,4 @@ RT_API_ATTRS int CFI_setpointer(
} // extern "C"
#endif
-#endif /* FORTRAN_COMMON_ISO_FORTRAN_BINDING_H_ */
+#endif /* CFI_ISO_FORTRAN_BINDING_H_ */
diff --git a/flang/lib/CMakeLists.txt b/flang/lib/CMakeLists.txt
index d29da136ea3eda..0ab7d1c888df96 100644
--- a/flang/lib/CMakeLists.txt
+++ b/flang/lib/CMakeLists.txt
@@ -1,6 +1,3 @@
-
-include_directories("${CMAKE_CURRENT_SOURCE_DIR}/../../FortranRuntime/include")
-
add_subdirectory(Common)
add_subdirectory(Support)
add_subdirectory(Evaluate)
diff --git a/flang/lib/Evaluate/fold-logical.cpp b/flang/lib/Evaluate/fold-logical.cpp
index ee6655f8387177..3c0b85cc3480b2 100644
--- a/flang/lib/Evaluate/fold-logical.cpp
+++ b/flang/lib/Evaluate/fold-logical.cpp
@@ -10,7 +10,7 @@
#include "fold-matmul.h"
#include "fold-reduction.h"
#include "flang/Evaluate/check-expression.h"
-#include "flang/Runtime/magic-numbers.h"
+#include "flang/Common/magic-numbers.h"
namespace Fortran::evaluate {
diff --git a/flang/lib/Optimizer/Builder/IntrinsicCall.cpp b/flang/lib/Optimizer/Builder/IntrinsicCall.cpp
index 460923bbccc27a..b98ab3e6999655 100644
--- a/flang/lib/Optimizer/Builder/IntrinsicCall.cpp
+++ b/flang/lib/Optimizer/Builder/IntrinsicCall.cpp
@@ -68,11 +68,6 @@
/// a call is generated for it. LLVM intrinsics are handled as a math
/// runtime library here.
-static llvm::cl::opt<bool> ignoreModuleOnlyBuiltins(
- "ignore-module-only-builtins",
- llvm::cl::desc("ignore failures from __builtin_numeric_storage_size when compiling FortranRuntime"),
- llvm::cl::init(false), llvm::cl::Hidden);
-
namespace fir {
fir::ExtendedValue getAbsentIntrinsicArgument() { return fir::UnboxedValue{}; }
@@ -507,7 +502,6 @@ static constexpr IntrinsicHandler handlers[]{
/*isElemental=*/false},
{"not", &I::genNot},
{"null", &I::genNull, {{{"mold", asInquired}}}, /*isElemental=*/false},
- {"numeric_storage_size", &I::genNumericStorageSize},
{"pack",
&I::genPack,
{{{"array", asBox},
@@ -7224,17 +7218,6 @@ IntrinsicLibrary::genVerify(mlir::Type resultType,
return readAndAddCleanUp(resultMutableBox, resultType, "VERIFY");
}
-fir::ExtendedValue IntrinsicLibrary:: genNumericStorageSize(mlir::Type resultType, llvm::ArrayRef<fir::ExtendedValue> args) {
- assert(args.empty() );
-
- if (!ignoreModuleOnlyBuiltins) {
- fir::emitFatalError(loc, "__builtin_numeric_storage_size is for internal use only. Use NUMERIC_STORAGE_SIZE from ISO_FORTRAN_ENV module instead.");
- return {};
- }
-
- return builder.createIntegerConstant(loc, resultType , 32 );
- }
-
/// Process calls to Minloc, Maxloc intrinsic functions
template <typename FN, typename FD>
fir::ExtendedValue
diff --git a/FortranRuntime/module/.clang-format b/flang/module/.clang-format
similarity index 100%
rename from FortranRuntime/module/.clang-format
rename to flang/module/.clang-format
diff --git a/FortranRuntime/module/__cuda_builtins.f90 b/flang/module/__cuda_builtins.f90
similarity index 100%
rename from FortranRuntime/module/__cuda_builtins.f90
rename to flang/module/__cuda_builtins.f90
diff --git a/FortranRuntime/module/__fortran_builtins.f90 b/flang/module/__fortran_builtins.f90
similarity index 99%
rename from FortranRuntime/module/__fortran_builtins.f90
rename to flang/module/__fortran_builtins.f90
index d1d4a639e70d72..fe91305c836ff4 100644
--- a/FortranRuntime/module/__fortran_builtins.f90
+++ b/flang/module/__fortran_builtins.f90
@@ -6,7 +6,7 @@
!
!===------------------------------------------------------------------------===!
-#include '../include/flang/Runtime/magic-numbers.h'
+#include '../../FortranRuntime/include/flang/Common/magic-numbers.h'
! These naming shenanigans prevent names from Fortran intrinsic modules
! from being usable on INTRINSIC statements, and force the program
diff --git a/FortranRuntime/module/__fortran_ieee_exceptions.f90 b/flang/module/__fortran_ieee_exceptions.f90
similarity index 98%
rename from FortranRuntime/module/__fortran_ieee_exceptions.f90
rename to flang/module/__fortran_ieee_exceptions.f90
index 6691012eda238a..56f79a473b556a 100644
--- a/FortranRuntime/module/__fortran_ieee_exceptions.f90
+++ b/flang/module/__fortran_ieee_exceptions.f90
@@ -11,7 +11,7 @@
! here under another name so that IEEE_ARITHMETIC can USE it and export its
! declarations without clashing with a non-intrinsic module in a program.
-#include '../include/flang/Runtime/magic-numbers.h'
+#include '../../FortranRuntime/include/flang/Common/magic-numbers.h'
module __fortran_ieee_exceptions
use __fortran_builtins, only: &
diff --git a/FortranRuntime/module/__fortran_type_info.f90 b/flang/module/__fortran_type_info.f90
similarity index 100%
rename from FortranRuntime/module/__fortran_type_info.f90
rename to flang/module/__fortran_type_info.f90
diff --git a/FortranRuntime/module/__ppc_intrinsics.f90 b/flang/module/__ppc_intrinsics.f90
similarity index 100%
rename from FortranRuntime/module/__ppc_intrinsics.f90
rename to flang/module/__ppc_intrinsics.f90
diff --git a/FortranRuntime/module/__ppc_types.f90 b/flang/module/__ppc_types.f90
similarity index 100%
rename from FortranRuntime/module/__ppc_types.f90
rename to flang/module/__ppc_types.f90
diff --git a/FortranRuntime/module/cudadevice.f90 b/flang/module/cudadevice.f90
similarity index 96%
rename from FortranRuntime/module/cudadevice.f90
rename to flang/module/cudadevice.f90
index dd487f6ed1ffee..0224ecfdde7c60 100644
--- a/FortranRuntime/module/cudadevice.f90
+++ b/flang/module/cudadevice.f90
@@ -1,4 +1,4 @@
-!===-- module/cudadevice.f90 -----------------------------------------------===!
+!===-- module/cudedevice.f90 -----------------------------------------------===!
!
! Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
! See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/module/ieee_arithmetic.f90 b/flang/module/ieee_arithmetic.f90
similarity index 99%
rename from FortranRuntime/module/ieee_arithmetic.f90
rename to flang/module/ieee_arithmetic.f90
index 7eaa7db55af9f8..667374d0660806 100644
--- a/FortranRuntime/module/ieee_arithmetic.f90
+++ b/flang/module/ieee_arithmetic.f90
@@ -8,7 +8,7 @@
! Fortran 2018 Clause 17
-#include '../include/flang/Runtime/magic-numbers.h'
+#include '../../FortranRuntime/include/flang/Common/magic-numbers.h'
module ieee_arithmetic
! F18 Clause 17.1p1:
diff --git a/FortranRuntime/module/ieee_exceptions.f90 b/flang/module/ieee_exceptions.f90
similarity index 100%
rename from FortranRuntime/module/ieee_exceptions.f90
rename to flang/module/ieee_exceptions.f90
diff --git a/FortranRuntime/module/ieee_features.f90 b/flang/module/ieee_features.f90
similarity index 100%
rename from FortranRuntime/module/ieee_features.f90
rename to flang/module/ieee_features.f90
diff --git a/FortranRuntime/module/iso_c_binding.f90 b/flang/module/iso_c_binding.f90
similarity index 100%
rename from FortranRuntime/module/iso_c_binding.f90
rename to flang/module/iso_c_binding.f90
diff --git a/FortranRuntime/module/iso_fortran_env.f90 b/flang/module/iso_fortran_env.f90
similarity index 98%
rename from FortranRuntime/module/iso_fortran_env.f90
rename to flang/module/iso_fortran_env.f90
index 4e575b422c2a04..d1f956b6b86408 100644
--- a/FortranRuntime/module/iso_fortran_env.f90
+++ b/flang/module/iso_fortran_env.f90
@@ -8,7 +8,7 @@
! See Fortran 2023, subclause 16.10.2
-#include '../include/flang/Runtime/magic-numbers.h'
+#include '../../FortranRuntime/include/flang/Common/magic-numbers.h'
module iso_fortran_env
diff --git a/FortranRuntime/module/mma.f90 b/flang/module/mma.f90
similarity index 98%
rename from FortranRuntime/module/mma.f90
rename to flang/module/mma.f90
index 14aab69035a334..4c41822e000a3d 100644
--- a/FortranRuntime/module/mma.f90
+++ b/flang/module/mma.f90
@@ -55,18 +55,9 @@ pure __vector_pair function func_vpi0vp(arg1, arg2); \
!dir$ ignore_tkr(r) arg2; \
end function;
-! FIXME: Potential Flang bug: combining multiple of those on a single line breaks after preprocessing as an explicit step as done by CMake
-! Line counting is also wrong
- FUNC_VPI0VI(1)
- FUNC_VPI0VI(2)
- FUNC_VPI0VI(4)
- FUNC_VPI0VI(8)
- FUNC_VPI0VU(1)
- FUNC_VPI0VU(2)
- FUNC_VPI0VU(4)
- FUNC_VPI0VU(8)
- FUNC_VPI0VR(4)
- FUNC_VPI0VR(8)
+ FUNC_VPI0VI(1) FUNC_VPI0VI(2) FUNC_VPI0VI(4) FUNC_VPI0VI(8)
+ FUNC_VPI0VU(1) FUNC_VPI0VU(2) FUNC_VPI0VU(4) FUNC_VPI0VU(8)
+ FUNC_VPI0VR(4) FUNC_VPI0VR(8)
FUNC_VPI0VP
#undef FUNC_VPI0VP
@@ -153,26 +144,14 @@ elemental subroutine sub_vpvr##VKIND##vr##VKIND(pair, arg1, arg2); \
vector(real(VKIND)), intent(in) :: arg1, arg2; \
end subroutine ;
- ELEM_SUB_VPVIVI(1)
- ELEM_SUB_VPVIVI(2)
- ELEM_SUB_VPVIVI(4)
- ELEM_SUB_VPVIVI(8)
- ELEM_SUB_VPVUVU(1)
- ELEM_SUB_VPVUVU(2)
- ELEM_SUB_VPVUVU(4)
- ELEM_SUB_VPVUVU(8)
- ELEM_SUB_VPVRVR(4)
- ELEM_SUB_VPVRVR(8)
- SUB_VPI0VI(1)
- SUB_VPI0VI(2)
- SUB_VPI0VI(4)
- SUB_VPI0VI(8)
- SUB_VPI0VU(1)
- SUB_VPI0VU(2)
- SUB_VPI0VU(4)
- SUB_VPI0VU(8)
- SUB_VPI0VR(4)
- SUB_VPI0VR(8)
+ ELEM_SUB_VPVIVI(1) ELEM_SUB_VPVIVI(2)
+ ELEM_SUB_VPVIVI(4) ELEM_SUB_VPVIVI(8)
+ ELEM_SUB_VPVUVU(1) ELEM_SUB_VPVUVU(2)
+ ELEM_SUB_VPVUVU(4) ELEM_SUB_VPVUVU(8)
+ ELEM_SUB_VPVRVR(4) ELEM_SUB_VPVRVR(8)
+ SUB_VPI0VI(1) SUB_VPI0VI(2) SUB_VPI0VI(4) SUB_VPI0VI(8)
+ SUB_VPI0VU(1) SUB_VPI0VU(2) SUB_VPI0VU(4) SUB_VPI0VU(8)
+ SUB_VPI0VR(4) SUB_VPI0VR(8)
#undef ELEM_SUB_VPVIVI
#undef ELEM_SUB_VPVUVU
diff --git a/flang/test/CMakeLists.txt b/flang/test/CMakeLists.txt
index 03fa79979470ee..c121fda70d16f0 100644
--- a/flang/test/CMakeLists.txt
+++ b/flang/test/CMakeLists.txt
@@ -63,6 +63,7 @@ set(FLANG_TEST_DEPENDS
FileCheck
count
not
+ module_files
fir-opt
tco
bbc
diff --git a/flang/test/Driver/msvc-dependent-lib-flags.f90 b/flang/test/Driver/msvc-dependent-lib-flags.f90
index befe61fdadcd14..e7fa63548fa840 100644
--- a/flang/test/Driver/msvc-dependent-lib-flags.f90
+++ b/flang/test/Driver/msvc-dependent-lib-flags.f90
@@ -4,27 +4,23 @@
! RUN: %flang -### --target=aarch64-windows-msvc -resource-dir=%S/Inputs/resource_dir -fms-runtime-lib=dll_dbg %S/Inputs/hello.f90 -v 2>&1 | FileCheck %s --check-prefixes=MSVC-DLL-DEBUG
! MSVC: -fc1
-! MSVC-SAME: --dependent-lib=clang_rt.builtins.lib
! MSVC-SAME: -D_MT
! MSVC-SAME: --dependent-lib=libcmt
! MSVC-SAME: --dependent-lib=FortranRuntime.static.lib
! MSVC-DEBUG: -fc1
-! MSVC-DEBUG-SAME: --dependent-lib=clang_rt.builtins.lib
! MSVC-DEBUG-SAME: -D_MT
! MSVC-DEBUG-SAME: -D_DEBUG
! MSVC-DEBUG-SAME: --dependent-lib=libcmtd
! MSVC-DEBUG-SAME: --dependent-lib=FortranRuntime.static_dbg.lib
! MSVC-DLL: -fc1
-! MSVC-DLL-SAME: --dependent-lib=clang_rt.builtins.lib
! MSVC-DLL-SAME: -D_MT
! MSVC-DLL-SAME: -D_DLL
! MSVC-DLL-SAME: --dependent-lib=msvcrt
! MSVC-DLL-SAME: --dependent-lib=FortranRuntime.dynamic.lib
! MSVC-DLL-DEBUG: -fc1
-! MSVC-DLL-DEBUG-SAME: --dependent-lib=clang_rt.builtins.lib
! MSVC-DLL-DEBUG-SAME: -D_MT
! MSVC-DLL-DEBUG-SAME: -D_DEBUG
! MSVC-DLL-DEBUG-SAME: -D_DLL
diff --git a/flang/tools/CMakeLists.txt b/flang/tools/CMakeLists.txt
index c9f00c8cc6dbd6..337545ae0d4d7a 100644
--- a/flang/tools/CMakeLists.txt
+++ b/flang/tools/CMakeLists.txt
@@ -7,6 +7,7 @@
#===------------------------------------------------------------------------===#
add_subdirectory(bbc)
+add_subdirectory(f18)
add_subdirectory(flang-driver)
add_subdirectory(tco)
add_subdirectory(f18-parse-demo)
diff --git a/flang/tools/bbc/CMakeLists.txt b/flang/tools/bbc/CMakeLists.txt
index 68e4b59fd6eec5..69316d4dc61de3 100644
--- a/flang/tools/bbc/CMakeLists.txt
+++ b/flang/tools/bbc/CMakeLists.txt
@@ -6,7 +6,6 @@ AllTargetsInfos
TargetParser
)
-include_directories("${CMAKE_CURRENT_SOURCE_DIR}/../../../FortranRuntime/include")
add_flang_tool(bbc bbc.cpp
DEPENDS
FIROptCodeGenPassIncGen
diff --git a/flang/tools/f18-parse-demo/CMakeLists.txt b/flang/tools/f18-parse-demo/CMakeLists.txt
index 34f1bf048ad849..df1f1d24a55e51 100644
--- a/flang/tools/f18-parse-demo/CMakeLists.txt
+++ b/flang/tools/f18-parse-demo/CMakeLists.txt
@@ -1,5 +1,3 @@
-include_directories("${CMAKE_CURRENT_SOURCE_DIR}/../../../FortranRuntime/include")
-
set(LLVM_LINK_COMPONENTS
FrontendOpenACC
FrontendOpenMP
diff --git a/flang/tools/f18/CMakeLists.txt b/flang/tools/f18/CMakeLists.txt
new file mode 100644
index 00000000000000..5f749a433f05cd
--- /dev/null
+++ b/flang/tools/f18/CMakeLists.txt
@@ -0,0 +1,161 @@
+set(LLVM_LINK_COMPONENTS
+ FrontendOpenACC
+ FrontendOpenMP
+ Support
+ )
+
+# Define the list of Fortran module files for which it is
+# sufficient to generate the module file via -fsyntax-only.
+set(MODULES_WITHOUT_IMPLEMENTATION
+ "__fortran_builtins"
+ "__fortran_ieee_exceptions"
+ "__fortran_type_info"
+ "__ppc_types"
+ "__ppc_intrinsics"
+ "mma"
+ "__cuda_builtins"
+ "cudadevice"
+ "ieee_arithmetic"
+ "ieee_exceptions"
+ "ieee_features"
+ "iso_c_binding"
+ "iso_fortran_env"
+ "iso_fortran_env_impl"
+)
+
+set(MODULES ${MODULES_WITHOUT_IMPLEMENTATION})
+
+# Check if 128-bit float computations can be done via long double.
+check_cxx_source_compiles(
+ "#include <cfloat>
+ #if LDBL_MANT_DIG != 113
+ #error LDBL_MANT_DIG != 113
+ #endif
+ int main() { return 0; }
+ "
+ HAVE_LDBL_MANT_DIG_113)
+
+# Figure out whether we can support REAL(KIND=16)
+if (FLANG_RUNTIME_F128_MATH_LIB)
+ set(FLANG_SUPPORT_R16 "1")
+elseif (HAVE_LDBL_MANT_DIG_113)
+ set(FLANG_SUPPORT_R16 "1")
+else()
+ set(FLANG_SUPPORT_R16 "0")
+endif()
+
+# Init variable to hold extra object files coming from the Fortran modules;
+# these module files will be contributed from the CMakeLists in flang/tools/f18.
+set(module_objects "")
+
+# Create module files directly from the top-level module source directory.
+# If CMAKE_CROSSCOMPILING, then the newly built flang-new executable was
+# cross compiled, and thus can't be executed on the build system and thus
+# can't be used for generating module files.
+if (NOT CMAKE_CROSSCOMPILING)
+ foreach(filename ${MODULES})
+ set(depends "")
+ set(opts "")
+ set(sourcepath "${FLANG_SOURCE_DIR}/module/${filename}.f90")
+ set(modpath "${FLANG_INTRINSIC_MODULES_DIR}/${filename}.mod")
+ if(${filename} STREQUAL "__fortran_builtins" OR
+ ${filename} STREQUAL "__ppc_types")
+ elseif(${filename} STREQUAL "__ppc_intrinsics" OR
+ ${filename} STREQUAL "mma")
+ set(depends ${FLANG_INTRINSIC_MODULES_DIR}/__ppc_types.mod)
+ elseif(${filename} STREQUAL "cudadevice")
+ set(opts -fc1 -xcuda)
+ set(depends ${FLANG_INTRINSIC_MODULES_DIR}/__cuda_builtins.mod)
+ else()
+ set(depends ${FLANG_INTRINSIC_MODULES_DIR}/__fortran_builtins.mod)
+ if(${filename} STREQUAL "iso_fortran_env_impl")
+ set(sourcepath "${FLANG_SOURCE_DIR}/../FortranRuntime/lib/Runtime/${filename}.f90")
+ endif()
+ if(${filename} STREQUAL "iso_fortran_env")
+ set(depends ${depends} ${FLANG_INTRINSIC_MODULES_DIR}/iso_fortran_env_impl.mod)
+ endif()
+ if(${filename} STREQUAL "ieee_arithmetic" OR
+ ${filename} STREQUAL "ieee_exceptions")
+ set(depends ${depends} ${FLANG_INTRINSIC_MODULES_DIR}/__fortran_ieee_exceptions.mod)
+ endif()
+ endif()
+ if(NOT ${filename} STREQUAL "__fortran_type_info" AND NOT ${filename} STREQUAL "__fortran_builtins")
+ set(depends ${depends} ${FLANG_INTRINSIC_MODULES_DIR}/__fortran_type_info.mod)
+ endif()
+
+ # The module contains PPC vector types that needs the PPC target.
+ if(${filename} STREQUAL "__ppc_intrinsics" OR
+ ${filename} STREQUAL "mma")
+ if (PowerPC IN_LIST LLVM_TARGETS_TO_BUILD)
+ set(opts "--target=ppc64le")
+ else()
+ # Do not compile PPC module if the target is not available.
+ continue()
+ endif()
+ endif()
+
+ set(decls "")
+ if (FLANG_SUPPORT_R16)
+ set(decls "-DFLANG_SUPPORT_R16")
+ endif()
+
+ # Some modules have an implementation part that needs to be added to the
+ # FortranRuntime library.
+ set(compile_with "-fsyntax-only")
+ set(object_output "")
+ set(include_in_link FALSE)
+
+ # TODO: We may need to flag this with conditional, in case Flang is built w/o OpenMP support
+ add_custom_command(OUTPUT ${modpath} ${object_output}
+ COMMAND ${CMAKE_COMMAND} -E make_directory ${FLANG_INTRINSIC_MODULES_DIR}
+ COMMAND flang-new ${opts} ${decls} -cpp ${compile_with} -module-dir ${FLANG_INTRINSIC_MODULES_DIR}
+ ${sourcepath}
+ DEPENDS flang-new ${sourcepath} ${FLANG_SOURCE_DIR}/module/__fortran_builtins.f90 ${depends}
+ )
+ list(APPEND MODULE_FILES "${modpath}")
+ install(FILES "${modpath}" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/flang")
+
+ # If a module has been compiled into an object file, add the file to
+ # the link line for the FortranRuntime library.
+ if(include_in_link)
+ list(APPEND module_objects ${object_output})
+ endif()
+ endforeach()
+
+ # Special case for omp_lib.mod, because its source comes from openmp/runtime/src/include.
+ # It also produces two module files: omp_lib.mod and omp_lib_kinds.mod. Compile these
+ # files only if OpenMP support has been configured.
+ if (LLVM_TOOL_OPENMP_BUILD)
+ message(STATUS "OpenMP runtime support enabled via LLVM_ENABLED_PROJECTS, building omp_lib.mod")
+ set(base ${FLANG_INTRINSIC_MODULES_DIR}/omp_lib)
+ add_custom_command(OUTPUT ${base}.mod ${base}_kinds.mod
+ COMMAND ${CMAKE_COMMAND} -E make_directory ${FLANG_INTRINSIC_MODULES_DIR}
+ COMMAND flang-new -cpp -fsyntax-only ${opts} -module-dir ${FLANG_INTRINSIC_MODULES_DIR}
+ ${CMAKE_BINARY_DIR}/projects/openmp/runtime/src/omp_lib.F90
+ DEPENDS flang-new ${FLANG_INTRINSIC_MODULES_DIR}/iso_c_binding.mod ${CMAKE_BINARY_DIR}/projects/openmp/runtime/src/omp_lib.F90 ${depends}
+ )
+ add_custom_command(OUTPUT ${base}.f18.mod
+ DEPENDS ${base}.mod
+ COMMAND ${CMAKE_COMMAND} -E copy ${base}.mod ${base}.f18.mod)
+ add_custom_command(OUTPUT ${base}_kinds.f18.mod
+ DEPENDS ${base}.mod
+ COMMAND ${CMAKE_COMMAND} -E copy ${base}_kinds.mod ${base}_kinds.f18.mod)
+ list(APPEND MODULE_FILES ${base}.mod ${base}.f18.mod ${base}_kinds.mod ${base}_kinds.f18.mod)
+ install(FILES ${base}.mod ${base}.f18.mod ${base}_kinds.mod ${base}_kinds.f18.mod DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/flang")
+ else()
+ message(STATUS "Not building omp_lib.mod, no OpenMP runtime in LLVM_ENABLED_PROJECTS")
+ endif()
+endif()
+
+add_custom_target(module_files ALL DEPENDS ${MODULE_FILES})
+set_target_properties(module_files PROPERTIES FOLDER "Flang/Resources")
+
+# TODO Move this to a more suitable location
+# Copy the generated omp_lib.h header file, if OpenMP support has been configured.
+if (LLVM_TOOL_OPENMP_BUILD)
+ message(STATUS "OpenMP runtime support enabled via LLVM_ENABLED_PROJECTS, building omp_lib.h")
+ file(COPY ${CMAKE_BINARY_DIR}/projects/openmp/runtime/src/omp_lib.h DESTINATION "${CMAKE_BINARY_DIR}/include/flang/OpenMP/" FILE_PERMISSIONS OWNER_READ OWNER_WRITE)
+ install(FILES ${CMAKE_BINARY_DIR}/include/flang/OpenMP/omp_lib.h DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/flang/OpenMP")
+else()
+ message(STATUS "Not copying omp_lib.h, no OpenMP runtime in LLVM_ENABLED_PROJECTS")
+endif()
diff --git a/flang/tools/f18/dump.cpp b/flang/tools/f18/dump.cpp
new file mode 100644
index 00000000000000..f11b5aedf4c6af
--- /dev/null
+++ b/flang/tools/f18/dump.cpp
@@ -0,0 +1,42 @@
+//===-- tools/f18/dump.cpp ------------------------------------------------===//
+//
+// 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 file defines Dump routines available for calling from the debugger.
+// Each is based on operator<< for that type. There are overloadings for
+// reference and pointer, and for dumping to a provided raw_ostream or errs().
+
+#ifdef DEBUGF18
+
+#include "llvm/Support/raw_ostream.h"
+
+#define DEFINE_DUMP(ns, name) \
+ namespace ns { \
+ class name; \
+ llvm::raw_ostream &operator<<(llvm::raw_ostream &, const name &); \
+ } \
+ void Dump(llvm::raw_ostream &os, const ns::name &x) { os << x << '\n'; } \
+ void Dump(llvm::raw_ostream &os, const ns::name *x) { \
+ if (x == nullptr) \
+ os << "null\n"; \
+ else \
+ Dump(os, *x); \
+ } \
+ void Dump(const ns::name &x) { Dump(llvm::errs(), x); } \
+ void Dump(const ns::name *x) { Dump(llvm::errs(), *x); }
+
+namespace Fortran {
+DEFINE_DUMP(parser, Name)
+DEFINE_DUMP(parser, CharBlock)
+DEFINE_DUMP(semantics, Symbol)
+DEFINE_DUMP(semantics, Scope)
+DEFINE_DUMP(semantics, IntrinsicTypeSpec)
+DEFINE_DUMP(semantics, DerivedTypeSpec)
+DEFINE_DUMP(semantics, DeclTypeSpec)
+} // namespace Fortran
+
+#endif
diff --git a/flang/tools/fir-opt/CMakeLists.txt b/flang/tools/fir-opt/CMakeLists.txt
index 3723ac5d7b37d2..4c6dbf7d9c8c37 100644
--- a/flang/tools/fir-opt/CMakeLists.txt
+++ b/flang/tools/fir-opt/CMakeLists.txt
@@ -1,4 +1,3 @@
-include_directories("${CMAKE_CURRENT_SOURCE_DIR}/../../../FortranRuntime/include")
add_flang_tool(fir-opt fir-opt.cpp)
llvm_update_compile_flags(fir-opt)
get_property(dialect_libs GLOBAL PROPERTY MLIR_DIALECT_LIBS)
@@ -20,7 +19,6 @@ target_link_libraries(fir-opt PRIVATE
FIRCodeGen
HLFIRDialect
HLFIRTransforms
- FortranCommon # FIXME: Dependency of something else
FlangOpenMPTransforms
FIRAnalysis
${test_libs}
diff --git a/flang/tools/flang-driver/CMakeLists.txt b/flang/tools/flang-driver/CMakeLists.txt
index a2ad672b9d48c9..9f33cdfe3fa90f 100644
--- a/flang/tools/flang-driver/CMakeLists.txt
+++ b/flang/tools/flang-driver/CMakeLists.txt
@@ -1,9 +1,6 @@
# Infrastructure to build flang driver entry point. Flang driver depends on
# LLVM libraries.
-message("include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../../FortranRuntime/include)")
-include_directories("${CMAKE_CURRENT_SOURCE_DIR}/../../../FortranRuntime/include")
-
# Set your project compile flags.
link_directories(${LLVM_LIBRARY_DIR})
diff --git a/flang/tools/tco/CMakeLists.txt b/flang/tools/tco/CMakeLists.txt
index f308fb6acbe98b..698a398547c773 100644
--- a/flang/tools/tco/CMakeLists.txt
+++ b/flang/tools/tco/CMakeLists.txt
@@ -2,7 +2,6 @@ set(LLVM_LINK_COMPONENTS
Passes
)
-include_directories("${CMAKE_CURRENT_SOURCE_DIR}/../../../FortranRuntime/include")
add_flang_tool(tco tco.cpp)
llvm_update_compile_flags(tco)
get_property(dialect_libs GLOBAL PROPERTY MLIR_DIALECT_LIBS)
@@ -18,7 +17,6 @@ target_link_libraries(tco PRIVATE
FIRBuilder
HLFIRDialect
HLFIRTransforms
- FortranCommon
FlangOpenMPTransforms
${dialect_libs}
${extension_libs}
>From 6307e77e75a4081fee75ff295d0fae70a255df6e Mon Sep 17 00:00:00 2001
From: Michael Kruse <llvm-project at meinersbur.de>
Date: Tue, 1 Oct 2024 17:26:34 +0200
Subject: [PATCH 04/32] python-format
---
FortranRuntime/test/lit.cfg.py | 14 ++++++--------
1 file changed, 6 insertions(+), 8 deletions(-)
diff --git a/FortranRuntime/test/lit.cfg.py b/FortranRuntime/test/lit.cfg.py
index 8aa1c6ab20e6ea..a9f47f142bb884 100644
--- a/FortranRuntime/test/lit.cfg.py
+++ b/FortranRuntime/test/lit.cfg.py
@@ -52,7 +52,7 @@
# test_source_root: The root path where tests are located.
config.test_source_root = os.path.dirname(__file__)
-# test_exec_root: The root path where tests should be run.
+# test_exec_root: The root path where tests should be run.
# lit writes a '.lit_test_times.txt' file into this directory.
config.test_exec_root = config.fortranruntime_binary_test_dir
@@ -62,23 +62,21 @@
isysroot_flag = ["-isysroot", config.osx_sysroot]
tools = [
- ToolSubst(
+ ToolSubst(
"%flang",
command=FindTool("flang-new"),
extra_args=isysroot_flag,
unresolved="fatal",
- )
- ]
+ )
+]
# Define some variables to help us test that the flang runtime doesn't depend on
# the C++ runtime libraries. For this we need a C compiler.
libruntime = os.path.join(config.fortranruntime_build_lib_dir, "libFortranRuntime.a")
include = os.path.join(config.fortranruntime_source_dir, "include")
tools.append(
- ToolSubst(
- "%cc", command=config.cc, extra_args=isysroot_flag, unresolved="fatal"
- )
- )
+ ToolSubst("%cc", command=config.cc, extra_args=isysroot_flag, unresolved="fatal")
+)
tools.append(ToolSubst("%libruntime", command=libruntime, unresolved="fatal"))
tools.append(ToolSubst("%include", command=include, unresolved="fatal"))
>From 20fc7c5798c825580c485921dc037b75d22a9270 Mon Sep 17 00:00:00 2001
From: Michael Kruse <llvm-project at meinersbur.de>
Date: Tue, 1 Oct 2024 23:00:29 +0200
Subject: [PATCH 05/32] Add .clang-tidy
---
FortranRuntime/.clang-tidy | 2 ++
1 file changed, 2 insertions(+)
create mode 100644 FortranRuntime/.clang-tidy
diff --git a/FortranRuntime/.clang-tidy b/FortranRuntime/.clang-tidy
new file mode 100644
index 00000000000000..ee3a0ab2201bf3
--- /dev/null
+++ b/FortranRuntime/.clang-tidy
@@ -0,0 +1,2 @@
+Checks: '-llvm-include-order,readability-braces-around-statements,-readability-identifier-naming,-clang-diagnostic-*'
+InheritParentConfig: true
>From 871c6900569bb92a652a447b1b481b7627cc50d4 Mon Sep 17 00:00:00 2001
From: Michael Kruse <llvm-project at meinersbur.de>
Date: Wed, 2 Oct 2024 12:24:01 +0200
Subject: [PATCH 06/32] Common CMake code
---
FortranRuntime/CMakeLists.txt | 52 +------------------
.../cmake/modules/AddFortranRuntime.cmake | 9 +++-
.../cmake/modules/FlangCommon.cmake | 31 +++++++++++
FortranRuntime/lib/Runtime/CMakeLists.txt | 17 ------
flang/CMakeLists.txt | 10 +---
5 files changed, 41 insertions(+), 78 deletions(-)
create mode 100644 FortranRuntime/cmake/modules/FlangCommon.cmake
diff --git a/FortranRuntime/CMakeLists.txt b/FortranRuntime/CMakeLists.txt
index 5c20b496dea821..bda76dd87c0d7a 100644
--- a/FortranRuntime/CMakeLists.txt
+++ b/FortranRuntime/CMakeLists.txt
@@ -23,6 +23,7 @@ list(APPEND CMAKE_MODULE_PATH
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules"
)
include(AddFortranRuntime)
+include(FlangCommon)
############################
@@ -65,42 +66,16 @@ option(FORTRANRUNTIME_INCLUDE_TESTS
"Generate build targets for the FortranRuntime unit tests."
${LLVM_INCLUDE_TESTS})
-# The out of tree builds of the compiler and the Fortran runtime
-# must use the same setting of FLANG_RUNTIME_F128_MATH_LIB
-# to be composable. Failure to synchronize this setting may result
-# in linking errors or fatal failures in F128 runtime functions.
-set(FORTRARUNTIME_F128_MATH_LIB "" CACHE STRING
- "Specifies the target library used for implementing IEEE-754 128-bit float \
- math in F18 runtime, e.g. it might be libquadmath for targets where \
- REAL(16) is mapped to __float128, or libm for targets where REAL(16) \
- is mapped to long double, etc."
- )
-if (FLANG_RUNTIME_F128_MATH_LIB)
- add_compile_definitions(
- FLANG_RUNTIME_F128_MATH_LIB="${FLANG_RUNTIME_F128_MATH_LIB}"
- )
-endif()
-
option(FLANG_EXPERIMENTAL_CUDA_RUNTIME "Compile Fortran runtime as CUDA sources (experimental)" OFF)
if (FLANG_EXPERIMENTAL_CUDA_RUNTIME)
message(FATAL_ERROOR "FLANG_EXPERIMENTAL_CUDA_RUNTIME currently not supported")
endif()
-
-
########################
# System Introspection #
########################
-include(TestBigEndian)
-test_big_endian(IS_BIGENDIAN)
-if (IS_BIGENDIAN)
- add_compile_definitions(FLANG_BIG_ENDIAN=1)
-else ()
- add_compile_definitions(FLANG_LITTLE_ENDIAN=1)
-endif ()
-
include(CheckCXXSymbolExists)
include(CheckCXXSourceCompiles)
check_cxx_symbol_exists(strerror_r string.h HAVE_STRERROR_R)
@@ -114,26 +89,6 @@ check_cxx_source_compiles(
"
HAVE_DECL_STRERROR_S)
-# Check if 128-bit float computations can be done via long double
-check_cxx_source_compiles(
- "#include <cfloat>
- #if LDBL_MANT_DIG != 113
- #error LDBL_MANT_DIG != 113
- #endif
- int main() { return 0; }
- "
- HAVE_LDBL_MANT_DIG_113)
-
-# Check if 128-bit float computations can be done via long double
-check_cxx_source_compiles(
- "#include <cfloat>
- #if LDBL_MANT_DIG != 113
- #error LDBL_MANT_DIG != 113
- #endif
- int main() { return 0; }
- "
- HAVE_LDBL_MANT_DIG_113)
-
# Search for clang_rt.builtins
execute_process(
COMMAND "${CMAKE_CXX_COMPILER}" "-print-libgcc-file-name" "-rtlib=compiler-rt"
@@ -156,11 +111,6 @@ endif ()
set(CMAKE_CXX_STANDARD 17 CACHE STRING "C++ standard to conform to")
set(CMAKE_CXX_STANDARD_REQUIRED YES)
-# Disable libstdc++/libc++ assertions, even in an LLVM_ENABLE_ASSERTIONS build,
-# to avoid an unwanted dependency on libstdc++/libc++.so.
-add_definitions(-U_GLIBCXX_ASSERTIONS)
-add_definitions(-U_LIBCPP_ENABLE_ASSERTIONS)
-
configure_file(cmake/config.h.cmake.in config.h)
diff --git a/FortranRuntime/cmake/modules/AddFortranRuntime.cmake b/FortranRuntime/cmake/modules/AddFortranRuntime.cmake
index e4dff982e6deea..5410cb769754b5 100644
--- a/FortranRuntime/cmake/modules/AddFortranRuntime.cmake
+++ b/FortranRuntime/cmake/modules/AddFortranRuntime.cmake
@@ -65,9 +65,9 @@ function (add_fortranruntime_library name)
target_compile_features(${name} PRIVATE cxx_std_17)
if (LLVM_COMPILER_IS_GCC_COMPATIBLE)
- target_compile_options (${name} PRIVATE $<$<COMPILE_LANGUAGE:CXX>:-fno-exceptions -fno-rtti -fno-unwind-tables -fno-asynchronous-unwind-tables>)
+ target_compile_options(${name} PRIVATE $<$<COMPILE_LANGUAGE:CXX>:-fno-exceptions -fno-rtti -fno-unwind-tables -fno-asynchronous-unwind-tables>)
elseif (MSVC)
- target_compile_options (${name} PRIVATE $<$<COMPILE_LANGUAGE:CXX>:/EHs-c- /GR->)
+ target_compile_options(${name} PRIVATE $<$<COMPILE_LANGUAGE:CXX>:/EHs-c- /GR->)
endif ()
# FortranRuntime's public headers
@@ -79,6 +79,11 @@ function (add_fortranruntime_library name)
# For configured config.h for be found
target_include_directories(${name} PRIVATE "${FORTRANRUNTIME_BINARY_DIR}")
+ # Disable libstdc++/libc++ assertions, even in an LLVM_ENABLE_ASSERTIONS build,
+ # to avoid an unwanted dependency on libstdc++/libc++.so.
+ target_compile_definitions(${name} PRIVATE -U_GLIBCXX_ASSERTIONS)
+ target_compile_definitions(${name} PRIVATE -U_LIBCPP_ENABLE_ASSERTIONS)
+
# Clang/Flang, targeting the MSVC ABI, including clang-cl, should only depends on msv(u)crt. LLVM still emits libgcc/compiler-rt functions for 128-bit integer math (__udivti3, __modti3, __fixsfti, __floattidf, ...) that msvc does not support.
# We are injecting a dependency to Compiler-RT where these are implemented.
if (MSVC AND (CMAKE_CXX_COMPILER_ID MATCHES ".*Clang") AND FORTRANRUNTIME_LIBCALL)
diff --git a/FortranRuntime/cmake/modules/FlangCommon.cmake b/FortranRuntime/cmake/modules/FlangCommon.cmake
new file mode 100644
index 00000000000000..34c91048f47887
--- /dev/null
+++ b/FortranRuntime/cmake/modules/FlangCommon.cmake
@@ -0,0 +1,31 @@
+# The out of tree builds of the compiler and the Fortran runtime
+# must use the same setting of FLANG_RUNTIME_F128_MATH_LIB
+# to be composable. Failure to synchronize this setting may result
+# in linking errors or fatal failures in F128 runtime functions.
+set(FLANG_RUNTIME_F128_MATH_LIB "" CACHE STRING
+ "Specifies the target library used for implementing IEEE-754 128-bit float \
+ math in F18 runtime, e.g. it might be libquadmath for targets where \
+ REAL(16) is mapped to __float128, or libm for targets where REAL(16) \
+ is mapped to long double, etc."
+ )
+if (FLANG_RUNTIME_F128_MATH_LIB)
+ add_compile_definitions(FLANG_RUNTIME_F128_MATH_LIB="${FLANG_RUNTIME_F128_MATH_LIB}")
+endif()
+
+# Check if 128-bit float computations can be done via long double
+check_cxx_source_compiles(
+ "#include <cfloat>
+ #if LDBL_MANT_DIG != 113
+ #error LDBL_MANT_DIG != 113
+ #endif
+ int main() { return 0; }
+ "
+ HAVE_LDBL_MANT_DIG_113)
+
+include(TestBigEndian)
+test_big_endian(IS_BIGENDIAN)
+if (IS_BIGENDIAN)
+ add_compile_definitions(FLANG_BIG_ENDIAN=1)
+else ()
+ add_compile_definitions(FLANG_LITTLE_ENDIAN=1)
+endif ()
diff --git a/FortranRuntime/lib/Runtime/CMakeLists.txt b/FortranRuntime/lib/Runtime/CMakeLists.txt
index 5a0cc2ff14383a..1938ed6e21f54a 100644
--- a/FortranRuntime/lib/Runtime/CMakeLists.txt
+++ b/FortranRuntime/lib/Runtime/CMakeLists.txt
@@ -153,21 +153,4 @@ else()
FortranRuntime.dynamic
FortranRuntime.dynamic_dbg
)
-
- if (MSVC)
- # The Fortran files compiled with flang-new generate libcall functions such as `__udivti3`
- # Add LLVM_ENABLE_RUNTIMES=compiler-rt for it to be available during the runtimes build
- # FIXME: Can embed linker command --dependent-lib into object files as already done with FortranRuntime.<mode>.lib
- #if (NOT TARGET clang_rt.builtins-x86_64)
- # message(WARNING
- # "compiler-rt needed when compiling with msvc\n"
- # "Flang/LLVM will emit code that calls into libgcc/compiler-rt, but using the MSVC linker will only link Microsoft's CRT automatically\n"
- # "Add compiler-rt to LLVM_ENABLE_RUNTIMES to fix"
- # )
- #endif ()
- #target_link_libraries(FortranRuntime.static PUBLIC clang_rt.builtins-x86_64)
- #target_link_libraries(FortranRuntime.static_dbg PUBLIC clang_rt.builtins-x86_64)
- #target_link_libraries(FortranRuntime.dynamic PUBLIC clang_rt.builtins-x86_64)
- #target_link_libraries(FortranRuntime.dynamic_dbg PUBLIC clang_rt.builtins-x86_64)
- endif ()
endif()
diff --git a/flang/CMakeLists.txt b/flang/CMakeLists.txt
index 827ed11e55001c..ac189de2386b16 100644
--- a/flang/CMakeLists.txt
+++ b/flang/CMakeLists.txt
@@ -253,6 +253,7 @@ include_directories(BEFORE
# Add Flang-centric modules to cmake path.
list(INSERT CMAKE_MODULE_PATH 0
"${FLANG_SOURCE_DIR}/cmake/modules"
+ "${FORTRANRUNTIME_SOURCE_DIR}/cmake/modules"
"${LLVM_COMMON_CMAKE_UTILS}/Modules"
)
include(AddFlang)
@@ -326,14 +327,6 @@ if (FLANG_REPOSITORY_STRING)
add_definitions(-DFLANG_REPOSITORY_STRING="${FLANG_REPOSITORY_STRING}")
endif()
-include(TestBigEndian)
-test_big_endian(IS_BIGENDIAN)
-if (IS_BIGENDIAN)
- add_compile_definitions(FLANG_BIG_ENDIAN=1)
-else ()
- add_compile_definitions(FLANG_LITTLE_ENDIAN=1)
-endif ()
-
# Configure Flang's Version.inc file.
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/include/flang/Version.inc.in
@@ -432,6 +425,7 @@ endif()
include(CMakeParseArguments)
include(AddFlang)
+include(FlangCommon)
if (FLANG_INCLUDE_TESTS)
add_compile_definitions(FLANG_INCLUDE_TESTS=1)
>From c42127f2eb26ee4a7cff9cf02628834b3cb2ebae Mon Sep 17 00:00:00 2001
From: Michael Kruse <llvm-project at meinersbur.de>
Date: Thu, 3 Oct 2024 20:11:32 +0200
Subject: [PATCH 07/32] Float128Math support
---
FortranRuntime/CMakeLists.txt | 7 +++++
.../cmake/modules/AddFortranRuntime.cmake | 5 ----
FortranRuntime/lib/Runtime/CMakeLists.txt | 5 ++++
.../lib/Runtime/Float128Math/CMakeLists.txt | 29 +++++++------------
4 files changed, 23 insertions(+), 23 deletions(-)
diff --git a/FortranRuntime/CMakeLists.txt b/FortranRuntime/CMakeLists.txt
index bda76dd87c0d7a..a68bd5bd00b758 100644
--- a/FortranRuntime/CMakeLists.txt
+++ b/FortranRuntime/CMakeLists.txt
@@ -89,11 +89,13 @@ check_cxx_source_compiles(
"
HAVE_DECL_STRERROR_S)
+
# Search for clang_rt.builtins
execute_process(
COMMAND "${CMAKE_CXX_COMPILER}" "-print-libgcc-file-name" "-rtlib=compiler-rt"
RESULT_VARIABLE CXX_COMPILER_PRINT_LIBGCC_PATH_FAILURE
OUTPUT_VARIABLE CXX_COMPILER_PRINT_LIBGCC_PATH_RESULT
+ ERROR_QUIET
)
if (NOT CXX_COMPILER_PRINT_LIBGCC_PATH_FAILURE AND CXX_COMPILER_PRINT_LIBGCC_PATH_RESULT)
string(STRIP "${CXX_COMPILER_PRINT_LIBGCC_PATH_RESULT}" FORTRANRUNTIME_LIBCALL)
@@ -111,6 +113,11 @@ endif ()
set(CMAKE_CXX_STANDARD 17 CACHE STRING "C++ standard to conform to")
set(CMAKE_CXX_STANDARD_REQUIRED YES)
+# Disable libstdc++/libc++ assertions, even in an LLVM_ENABLE_ASSERTIONS build,
+# to avoid an unwanted dependency on libstdc++/libc++.so.
+add_definitions(-U_GLIBCXX_ASSERTIONS)
+add_definitions(-U_LIBCPP_ENABLE_ASSERTIONS)
+
configure_file(cmake/config.h.cmake.in config.h)
diff --git a/FortranRuntime/cmake/modules/AddFortranRuntime.cmake b/FortranRuntime/cmake/modules/AddFortranRuntime.cmake
index 5410cb769754b5..316923ca632c20 100644
--- a/FortranRuntime/cmake/modules/AddFortranRuntime.cmake
+++ b/FortranRuntime/cmake/modules/AddFortranRuntime.cmake
@@ -79,11 +79,6 @@ function (add_fortranruntime_library name)
# For configured config.h for be found
target_include_directories(${name} PRIVATE "${FORTRANRUNTIME_BINARY_DIR}")
- # Disable libstdc++/libc++ assertions, even in an LLVM_ENABLE_ASSERTIONS build,
- # to avoid an unwanted dependency on libstdc++/libc++.so.
- target_compile_definitions(${name} PRIVATE -U_GLIBCXX_ASSERTIONS)
- target_compile_definitions(${name} PRIVATE -U_LIBCPP_ENABLE_ASSERTIONS)
-
# Clang/Flang, targeting the MSVC ABI, including clang-cl, should only depends on msv(u)crt. LLVM still emits libgcc/compiler-rt functions for 128-bit integer math (__udivti3, __modti3, __fixsfti, __floattidf, ...) that msvc does not support.
# We are injecting a dependency to Compiler-RT where these are implemented.
if (MSVC AND (CMAKE_CXX_COMPILER_ID MATCHES ".*Clang") AND FORTRANRUNTIME_LIBCALL)
diff --git a/FortranRuntime/lib/Runtime/CMakeLists.txt b/FortranRuntime/lib/Runtime/CMakeLists.txt
index 1938ed6e21f54a..87d34054172201 100644
--- a/FortranRuntime/lib/Runtime/CMakeLists.txt
+++ b/FortranRuntime/lib/Runtime/CMakeLists.txt
@@ -90,6 +90,9 @@ file(GLOB_RECURSE private_headers
"${FLANGRUNTIME_SOURCE_DIR}/lib/Common/*.h"
)
+
+
+
get_target_property(f128_sources
FortranFloat128MathILib INTERFACE_SOURCES
)
@@ -106,6 +109,8 @@ if (f128_sources)
list(APPEND sources ${f128_sources})
endif()
+
+
if (NOT DEFINED WIN32)
add_fortranruntime_library(FortranRuntime STATIC
${sources}
diff --git a/FortranRuntime/lib/Runtime/Float128Math/CMakeLists.txt b/FortranRuntime/lib/Runtime/Float128Math/CMakeLists.txt
index 1ff158c401855f..a55d39e88cd404 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/CMakeLists.txt
+++ b/FortranRuntime/lib/Runtime/Float128Math/CMakeLists.txt
@@ -1,4 +1,4 @@
-#===-- lib/Runtime/Float128Math/CMakeLists.txt -----------------------------===#
+#===-- runtime/Float128Math/CMakeLists.txt ---------------------------------===#
#
# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
# See https://llvm.org/LICENSE.txt for license information.
@@ -15,6 +15,7 @@
# used for building this FortranFloat128Math library.
include(CheckLibraryExists)
+include(CheckIncludeFile)
set(sources
acos.cpp
@@ -87,23 +88,15 @@ if (FLANG_RUNTIME_F128_MATH_LIB)
"${FLANG_RUNTIME_F128_MATH_LIB}"
)
endif()
-
- add_flang_library(FortranFloat128Math STATIC INSTALL_WITH_TOOLCHAIN
- ${sources})
-
- if (DEFINED MSVC)
- set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreaded)
- add_flang_library(FortranFloat128Math.static STATIC INSTALL_WITH_TOOLCHAIN
- ${sources}
- )
- set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreadedDebug)
- add_flang_library(FortranFloat128Math.static_dbg STATIC INSTALL_WITH_TOOLCHAIN
- ${sources}
- )
- add_dependencies(FortranFloat128Math FortranFloat128Math.static
- FortranFloat128Math.static_dbg
- )
- endif()
+
+ if (WIN32)
+ # Do not create a FortranFloat128Math library under Windows, the Flang driver never links it. Instead, add the sources to the main FortranRuntime.lib.
+ target_sources(FortranFloat128MathILib INTERFACE ${sources})
+ target_compile_definitions(FortranFloat128MathILib INTERFACE HAS_QUADMATHLIB)
+ else ()
+ add_fortranruntime_library(FortranFloat128Math STATIC INSTALL_WITH_TOOLCHAIN
+ ${sources})
+ endif ()
elseif (HAVE_LDBL_MANT_DIG_113)
# We can use 'long double' versions from libc.
check_library_exists(m sinl "" FOUND_LIBM)
>From 0867eb3b9447b9b8139be293eb15436a4b60c064 Mon Sep 17 00:00:00 2001
From: Michael Kruse <llvm-project at meinersbur.de>
Date: Fri, 4 Oct 2024 13:52:28 +0200
Subject: [PATCH 08/32] Update test for windows
---
FortranRuntime/test/Driver/exec.f90 | 1 -
1 file changed, 1 deletion(-)
diff --git a/FortranRuntime/test/Driver/exec.f90 b/FortranRuntime/test/Driver/exec.f90
index 07b42492b34d30..372f6d8a8d7bfd 100644
--- a/FortranRuntime/test/Driver/exec.f90
+++ b/FortranRuntime/test/Driver/exec.f90
@@ -1,4 +1,3 @@
-! UNSUPPORTED? system-windows
! Verify that flang can correctly build executables.
! RUN: %flang %s -o %t
>From 5c2ae6b26b6f4751c9532f68ea64cff4b60b5228 Mon Sep 17 00:00:00 2001
From: Michael Kruse <llvm-project at meinersbur.de>
Date: Mon, 7 Oct 2024 12:57:03 +0200
Subject: [PATCH 09/32] Re-add offloading support
---
FortranRuntime/CMakeLists.txt | 60 +++++++++++++------
.../modules/AddFlangOffloadRuntime.cmake | 55 ++++++-----------
FortranRuntime/lib/Runtime/CMakeLists.txt | 6 +-
.../lib/Runtime/CUDA/CMakeLists.txt | 5 +-
FortranRuntime/lib/Runtime/CUDA/allocator.cpp | 2 +-
FortranRuntime/unittests/CMakeLists.txt | 45 ++++++++++++--
flang/docs/GettingStarted.md | 12 ++--
7 files changed, 113 insertions(+), 72 deletions(-)
rename {flang => FortranRuntime}/cmake/modules/AddFlangOffloadRuntime.cmake (61%)
diff --git a/FortranRuntime/CMakeLists.txt b/FortranRuntime/CMakeLists.txt
index a68bd5bd00b758..fe5610f0c20816 100644
--- a/FortranRuntime/CMakeLists.txt
+++ b/FortranRuntime/CMakeLists.txt
@@ -62,13 +62,27 @@ endif ()
# Build Options #
#################
-option(FORTRANRUNTIME_INCLUDE_TESTS
- "Generate build targets for the FortranRuntime unit tests."
- ${LLVM_INCLUDE_TESTS})
+option(FORTRANRUNTIME_INCLUDE_TESTS "Generate build targets for the FortranRuntime unit and regression-tests." "${LLVM_INCLUDE_TESTS}")
+
+set(FORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT "" CACHE STRING "Compile FortranRuntime with GPU support (CUDA or OpenMP)")
+set_property(CACHE FORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT PROPERTY STRINGS
+ ""
+ CUDA
+ OpenMP)
+if (NOT FORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT)
+elseif (FORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT STREQUAL "CUDA")
+ set(FORTRANRUNTIME_LIBCUDACXX_PATH "" CACHE PATH "Path to libcu++ package installation")
+ option(FORTRANRUNTIME_CUDA_RUNTIME_PTX_WITHOUT_GLOBAL_VARS "Do not compile global variables' definitions when producing PTX library" OFF)
+elseif (FORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT STREQUAL "OpenMP")
+set(FORTRANRUNTIME_DEVICE_ARCHITECTURES "all" CACHE STRING
+ "List of OpenMP device architectures to be used to compile the Fortran runtime (e.g. 'gfx1103;sm_90')")
+else ()
+ message(FATAL_ERROR "Invalid value '${FORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT}' for FORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT; must be empty, 'CUDA', or 'OpenMP'")
+endif ()
-option(FLANG_EXPERIMENTAL_CUDA_RUNTIME "Compile Fortran runtime as CUDA sources (experimental)" OFF)
-if (FLANG_EXPERIMENTAL_CUDA_RUNTIME)
- message(FATAL_ERROOR "FLANG_EXPERIMENTAL_CUDA_RUNTIME currently not supported")
+option(FORTRANRUNTIME_ENABLE_CUF "Compile CUDA Fortran runtime sources" OFF)
+if (FORTRANRUNTIME_ENABLE_CUF)
+ find_package(CUDAToolkit REQUIRED)
endif()
@@ -90,17 +104,19 @@ check_cxx_source_compiles(
HAVE_DECL_STRERROR_S)
-# Search for clang_rt.builtins
-execute_process(
- COMMAND "${CMAKE_CXX_COMPILER}" "-print-libgcc-file-name" "-rtlib=compiler-rt"
- RESULT_VARIABLE CXX_COMPILER_PRINT_LIBGCC_PATH_FAILURE
- OUTPUT_VARIABLE CXX_COMPILER_PRINT_LIBGCC_PATH_RESULT
- ERROR_QUIET
- )
-if (NOT CXX_COMPILER_PRINT_LIBGCC_PATH_FAILURE AND CXX_COMPILER_PRINT_LIBGCC_PATH_RESULT)
- string(STRIP "${CXX_COMPILER_PRINT_LIBGCC_PATH_RESULT}" FORTRANRUNTIME_LIBCALL)
-else ()
- set(FORTRANRUNTIME_LIBCALL "")
+# Search for clang_rt.builtins library.
+if (WIN32)
+ execute_process(
+ COMMAND "${CMAKE_CXX_COMPILER}" "-print-libgcc-file-name" "-rtlib=compiler-rt"
+ RESULT_VARIABLE CXX_COMPILER_PRINT_LIBGCC_PATH_FAILURE
+ OUTPUT_VARIABLE CXX_COMPILER_PRINT_LIBGCC_PATH_RESULT
+ ERROR_QUIET
+ )
+ if (NOT CXX_COMPILER_PRINT_LIBGCC_PATH_FAILURE AND CXX_COMPILER_PRINT_LIBGCC_PATH_RESULT)
+ string(STRIP "${CXX_COMPILER_PRINT_LIBGCC_PATH_RESULT}" FORTRANRUNTIME_LIBCALL)
+ else ()
+ set(FORTRANRUNTIME_LIBCALL "")
+ endif ()
endif ()
@@ -108,6 +124,16 @@ endif ()
# Build Preparation #
#####################
+if (FORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT AND FORTRANRUNTIME_INCLUDE_TESTS)
+ # If Fortran runtime is built as CUDA library, the linking
+ # of targets that link FortranRuntime must be done
+ # with CUDA_RESOLVE_DEVICE_SYMBOLS.
+ # CUDA language must be enabled for CUDA_RESOLVE_DEVICE_SYMBOLS
+ # to take effect.
+ enable_language(CUDA)
+endif()
+
+
# C++17 required for FortranRuntime, user or other runtimes may override this.
# GTest included later also requires C++17.
set(CMAKE_CXX_STANDARD 17 CACHE STRING "C++ standard to conform to")
diff --git a/flang/cmake/modules/AddFlangOffloadRuntime.cmake b/FortranRuntime/cmake/modules/AddFlangOffloadRuntime.cmake
similarity index 61%
rename from flang/cmake/modules/AddFlangOffloadRuntime.cmake
rename to FortranRuntime/cmake/modules/AddFlangOffloadRuntime.cmake
index 6407be5d038b81..ae6fcabbed9b92 100644
--- a/flang/cmake/modules/AddFlangOffloadRuntime.cmake
+++ b/FortranRuntime/cmake/modules/AddFlangOffloadRuntime.cmake
@@ -1,21 +1,15 @@
-option(FLANG_EXPERIMENTAL_CUDA_RUNTIME
- "Compile Fortran runtime as CUDA sources (experimental)" OFF
- )
-option(FLANG_CUDA_RUNTIME_PTX_WITHOUT_GLOBAL_VARS
- "Do not compile global variables' definitions when producing PTX library" OFF
- )
-set(FLANG_LIBCUDACXX_PATH "" CACHE PATH "Path to libcu++ package installation")
-set(FLANG_EXPERIMENTAL_OMP_OFFLOAD_BUILD "off" CACHE STRING
- "Compile Fortran runtime as OpenMP target offload sources (experimental). Valid options are 'off', 'host_device', 'nohost'")
-set(FLANG_OMP_DEVICE_ARCHITECTURES "all" CACHE STRING
- "List of OpenMP device architectures to be used to compile the Fortran runtime (e.g. 'gfx1103;sm_90')")
+
+
+
+
+
macro(enable_cuda_compilation name files)
- if (FLANG_EXPERIMENTAL_CUDA_RUNTIME)
+ if (FORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT STREQUAL "CUDA")
if (BUILD_SHARED_LIBS)
message(FATAL_ERROR
"BUILD_SHARED_LIBS is not supported for CUDA build of Fortran runtime"
@@ -50,17 +44,17 @@ macro(enable_cuda_compilation name files)
"${CUDA_COMPILE_OPTIONS}"
)
- if (EXISTS "${FLANG_LIBCUDACXX_PATH}/include")
+ if (EXISTS "${FORTRANRUNTIME_LIBCUDACXX_PATH}/include")
# When using libcudacxx headers files, we have to use them
# for all files of F18 runtime.
- include_directories(AFTER ${FLANG_LIBCUDACXX_PATH}/include)
+ include_directories(AFTER ${FORTRANRUNTIME_LIBCUDACXX_PATH}/include)
add_compile_definitions(RT_USE_LIBCUDACXX=1)
endif()
# Add an OBJECT library consisting of CUDA PTX.
llvm_add_library(${name}PTX OBJECT PARTIAL_SOURCES_INTENDED ${files})
set_property(TARGET obj.${name}PTX PROPERTY CUDA_PTX_COMPILATION ON)
- if (FLANG_CUDA_RUNTIME_PTX_WITHOUT_GLOBAL_VARS)
+ if (FORTRANRUNTIME_CUDA_RUNTIME_PTX_WITHOUT_GLOBAL_VARS)
target_compile_definitions(obj.${name}PTX
PRIVATE FLANG_RUNTIME_NO_GLOBAL_VAR_DEFS
)
@@ -69,24 +63,9 @@ macro(enable_cuda_compilation name files)
endmacro()
macro(enable_omp_offload_compilation files)
- if (NOT FLANG_EXPERIMENTAL_OMP_OFFLOAD_BUILD STREQUAL "off")
- # 'host_device' build only works with Clang compiler currently.
- # The build is done with the CMAKE_C/CXX_COMPILER, i.e. it does not use
- # the in-tree built Clang. We may have a mode that would use the in-tree
- # built Clang.
- #
- # 'nohost' is supposed to produce an LLVM Bitcode library,
- # and it has to be done with a C/C++ compiler producing LLVM Bitcode
- # compatible with the LLVM toolchain version distributed with the Flang
- # compiler.
- # In general, the in-tree built Clang should be used for 'nohost' build.
- # Note that 'nohost' build does not produce the host version of Flang
- # runtime library, so there will be two separate distributable objects.
- # 'nohost' build is a TODO.
-
- if (NOT FLANG_EXPERIMENTAL_OMP_OFFLOAD_BUILD STREQUAL "host_device")
- message(FATAL_ERROR "Unsupported OpenMP offload build of Flang runtime")
- endif()
+ if (FORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT STREQUAL "OpenMP")
+ # OpenMP offload build only works with Clang compiler currently.
+
if (BUILD_SHARED_LIBS)
message(FATAL_ERROR
"BUILD_SHARED_LIBS is not supported for OpenMP offload build of Fortran runtime"
@@ -111,13 +90,13 @@ macro(enable_omp_offload_compilation files)
"${all_amdgpu_architectures};${all_nvptx_architectures}"
)
# TODO: support auto detection on the build system.
- if (FLANG_OMP_DEVICE_ARCHITECTURES STREQUAL "all")
- set(FLANG_OMP_DEVICE_ARCHITECTURES ${all_gpu_architectures})
+ if (FORTRANRUNTIME_DEVICE_ARCHITECTURES STREQUAL "all")
+ set(FORTRANRUNTIME_DEVICE_ARCHITECTURES ${all_gpu_architectures})
endif()
- list(REMOVE_DUPLICATES FLANG_OMP_DEVICE_ARCHITECTURES)
+ list(REMOVE_DUPLICATES FORTRANRUNTIME_DEVICE_ARCHITECTURES)
string(REPLACE ";" "," compile_for_architectures
- "${FLANG_OMP_DEVICE_ARCHITECTURES}"
+ "${FORTRANRUNTIME_DEVICE_ARCHITECTURES}"
)
set(OMP_COMPILE_OPTIONS
@@ -138,7 +117,7 @@ macro(enable_omp_offload_compilation files)
)
else()
message(FATAL_ERROR
- "Flang runtime build is not supported for these compilers:\n"
+ "FortranRuntime build with OpenMP offload is not supported for these compilers:\n"
"CMAKE_CXX_COMPILER_ID: ${CMAKE_CXX_COMPILER_ID}\n"
"CMAKE_C_COMPILER_ID: ${CMAKE_C_COMPILER_ID}")
endif()
diff --git a/FortranRuntime/lib/Runtime/CMakeLists.txt b/FortranRuntime/lib/Runtime/CMakeLists.txt
index 87d34054172201..cc0161c05c57fa 100644
--- a/FortranRuntime/lib/Runtime/CMakeLists.txt
+++ b/FortranRuntime/lib/Runtime/CMakeLists.txt
@@ -111,7 +111,7 @@ endif()
-if (NOT DEFINED WIN32)
+if (NOT WIN32)
add_fortranruntime_library(FortranRuntime STATIC
${sources}
INSTALL_WITH_TOOLCHAIN
@@ -159,3 +159,7 @@ else()
FortranRuntime.dynamic_dbg
)
endif()
+
+if (FORTRANRUNTIME_ENABLE_CUF)
+ add_subdirectory(CUDA)
+endif()
diff --git a/FortranRuntime/lib/Runtime/CUDA/CMakeLists.txt b/FortranRuntime/lib/Runtime/CUDA/CMakeLists.txt
index f75b854d1eb3ba..78b98652d60813 100644
--- a/FortranRuntime/lib/Runtime/CUDA/CMakeLists.txt
+++ b/FortranRuntime/lib/Runtime/CUDA/CMakeLists.txt
@@ -6,17 +6,16 @@
#
#===------------------------------------------------------------------------===#
-include_directories(${CUDAToolkit_INCLUDE_DIRS})
-
# libCufRuntime depends on a certain version of CUDA. To be able to have
# multiple build of this library with different CUDA version, the version is
# added to the library name.
set(CUFRT_LIBNAME CufRuntime_cuda_${CUDAToolkit_VERSION_MAJOR})
-add_flang_library(${CUFRT_LIBNAME}
+add_fortranruntime_library(${CUFRT_LIBNAME}
allocator.cpp
descriptor.cpp
)
+target_include_directories(${CUFRT_LIBNAME} PRIVATE ${CUDAToolkit_INCLUDE_DIRS})
if (BUILD_SHARED_LIBS)
set(CUDA_RT_TARGET CUDA::cudart)
diff --git a/FortranRuntime/lib/Runtime/CUDA/allocator.cpp b/FortranRuntime/lib/Runtime/CUDA/allocator.cpp
index 2efd6bf0a95249..6401faede9fdf5 100644
--- a/FortranRuntime/lib/Runtime/CUDA/allocator.cpp
+++ b/FortranRuntime/lib/Runtime/CUDA/allocator.cpp
@@ -11,7 +11,7 @@
#include "../stat.h"
#include "../terminator.h"
#include "../type-info.h"
-#include "flang/ISO_Fortran_binding_wrapper.h"
+#include "flang/Common/ISO_Fortran_binding_wrapper.h"
#include "flang/Runtime/allocator-registry.h"
#include "flang/Support/Fortran.h"
diff --git a/FortranRuntime/unittests/CMakeLists.txt b/FortranRuntime/unittests/CMakeLists.txt
index 89e1c909d0f98e..d9533d853df6d7 100644
--- a/FortranRuntime/unittests/CMakeLists.txt
+++ b/FortranRuntime/unittests/CMakeLists.txt
@@ -6,24 +6,55 @@
#
#===------------------------------------------------------------------------===#
+# Add GTest if not already present.
+# Using a function so include_directories/LLVM_SUBPROJECT_TITLE does not propagate
function (build_gtest)
include_directories("${LLVM_INCLUDE_DIR}" "${LLVM_MAIN_INCLUDE_DIR}")
set(LLVM_SUBPROJECT_TITLE "Third-Party/Google Test")
- add_subdirectory(${LLVM_THIRD_PARTY_DIR}/unittest ${CMAKE_CURRENT_BINARY_DIR}/third-party/unittest)
+ add_subdirectory("${LLVM_THIRD_PARTY_DIR}/unittest" "${CMAKE_CURRENT_BINARY_DIR}/third-party/unittest")
endfunction ()
-
-# Add GTest if not already present
if (NOT TARGET llvm_gtest)
build_gtest()
endif ()
-# Target that depends on all unittests
-add_custom_target(FortranRuntimeUnitTests)
-set_target_properties(FortranRuntimeUnitTests PROPERTIES FOLDER "Fortran Runtime/Tests")
+
# Required because LLVMSupport is compiled with this option (by default).
set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreadedDLL)
+if (CXX_SUPPORTS_SUGGEST_OVERRIDE_FLAG)
+ add_compile_options("-Wno-suggest-override")
+endif()
+
+
+# Target that depends on all unittests
+add_custom_target(FortranRuntimeUnitTests)
+set_target_properties(FortranRuntimeUnitTests PROPERTIES FOLDER "Fortran Runtime/Meta")
+
+
+function(add_flang_unittest_offload_properties target)
+ # Set CUDA_RESOLVE_DEVICE_SYMBOLS.
+ if (FORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT STREQUAL "CUDA")
+ set_target_properties(${target}
+ PROPERTIES CUDA_RESOLVE_DEVICE_SYMBOLS ON
+ )
+ endif()
+
+ # Enable OpenMP offload during linking. We may need to replace
+ # LINK_OPTIONS with COMPILE_OPTIONS when there are OpenMP offload
+ # unittests.
+ #
+ # FIXME: replace 'native' in --offload-arch option with the list
+ # of targets that Fortran Runtime was built for.
+ if (FORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT STREQUAL "OpenMP")
+ set_target_properties(${target}
+ PROPERTIES LINK_OPTIONS
+ "-fopenmp;--offload-arch=native"
+ )
+ endif()
+endfunction()
+
+
function(add_fortranruntime_unittest test_dirname)
cmake_parse_arguments(ARG
""
@@ -36,6 +67,7 @@ function(add_fortranruntime_unittest test_dirname)
target_include_directories(${test_dirname} PRIVATE "${FORTRANRUNTIME_SOURCE_DIR}/include")
target_include_directories(${test_dirname} PRIVATE "${FLANG_SOURCE_DIR}/include")
target_link_libraries(${test_dirname} PRIVATE ${ARG_LINK_LIBS})
+ add_flang_unittest_offload_properties(${test_dirname})
endfunction()
function(add_fortranruntime_nongtest_unittest test_name)
@@ -61,6 +93,7 @@ function(add_fortranruntime_nongtest_unittest test_name)
if(NOT ARG_SLOW_TEST)
add_dependencies(FortranRuntimeUnitTests ${test_name}${suffix})
endif()
+ add_flang_unittest_offload_properties(${test_name}${suffix})
endfunction()
add_subdirectory(Common)
diff --git a/flang/docs/GettingStarted.md b/flang/docs/GettingStarted.md
index 1c85a6754b155b..e93f051c88d33e 100644
--- a/flang/docs/GettingStarted.md
+++ b/flang/docs/GettingStarted.md
@@ -209,7 +209,7 @@ mkdir build_flang_runtime
cd build_flang_runtime
cmake \
- -DFLANG_EXPERIMENTAL_CUDA_RUNTIME=ON \
+ -DFORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT=CUDA \
-DCMAKE_CUDA_ARCHITECTURES=80 \
-DCMAKE_C_COMPILER=clang \
-DCMAKE_CXX_COMPILER=clang++ \
@@ -231,7 +231,7 @@ mkdir build_flang_runtime
cd build_flang_runtime
cmake \
- -DFLANG_EXPERIMENTAL_CUDA_RUNTIME=ON \
+ -DFORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT=CUDA \
-DCMAKE_CUDA_ARCHITECTURES=80 \
-DCMAKE_C_COMPILER=clang \
-DCMAKE_CXX_COMPILER=clang++ \
@@ -258,7 +258,7 @@ build config:
For example:
```bash
- -DFLANG_EXPERIMENTAL_CUDA_RUNTIME=ON \
+ -DFORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT=CUDA \
-DCMAKE_CUDA_ARCHITECTURES=80 \
-DCMAKE_C_COMPILER=clang \
-DCMAKE_CXX_COMPILER=clang++ \
@@ -268,7 +268,7 @@ For example:
Or:
```bash
- -DFLANG_EXPERIMENTAL_CUDA_RUNTIME=ON \
+ -DFORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT=CUDA \
-DCMAKE_CUDA_ARCHITECTURES=80 \
-DCMAKE_C_COMPILER=gcc \
-DCMAKE_CXX_COMPILER=g++ \
@@ -288,10 +288,10 @@ mkdir build_flang_runtime
cd build_flang_runtime
cmake \
- -DFLANG_EXPERIMENTAL_OMP_OFFLOAD_BUILD="host_device" \
+ -DFORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT="OpenMP" \
-DCMAKE_C_COMPILER=clang \
-DCMAKE_CXX_COMPILER=clang++ \
- -DFLANG_OMP_DEVICE_ARCHITECTURES="all" \
+ -DFORTRANRUNTIME_DEVICE_ARCHITECTURES="all" \
../runtime/
make -j FortranRuntime
>From f6d9f371a968eefb5152ca47bceb51649dca92a9 Mon Sep 17 00:00:00 2001
From: Michael Kruse <llvm-project at meinersbur.de>
Date: Mon, 7 Oct 2024 15:55:34 +0200
Subject: [PATCH 10/32] Add documentation
---
FortranRuntime/README.md | 134 +++++++++++++++++++++++++++++++++--
flang/docs/GettingStarted.md | 21 +++---
llvm/runtimes/CMakeLists.txt | 1 +
3 files changed, 142 insertions(+), 14 deletions(-)
diff --git a/FortranRuntime/README.md b/FortranRuntime/README.md
index 6fd4b3359f7888..6018276f6d4c5a 100644
--- a/FortranRuntime/README.md
+++ b/FortranRuntime/README.md
@@ -1,20 +1,142 @@
+<!--===- README.md
+
+ 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
+
+-->
+
# Fortran Runtime
Fortran Runtime is the runtime library for code emitted by the Flang
compiler (https://flang.llvm.org).
+
## Getting Started
-### Bootstrap Build
+There are two build modes for the FortranRuntime. The bootstrap build, also called the in-tree build, and the runtime-only build, also called the out-of-tree build.
+Not to be confused with the terms [in-source and out-of-source](https://cmake.org/cmake/help/latest/manual/cmake.1.html#introduction-to-cmake-buildsystems) builds as defined by CMake. In an in-source build, the source directory and the build directory are identical, whereas with an out-of-source build the build artifacts are stored somewhere else, possibly in a subdirectory of the source directory. LLVM does not support in-source builds.
+
+
+### Requirements
-```sh
-cmake -S <path-to-llvm-project>/llvm -DLLVM_ENABLE_PROJECTS=flang -DLLVM_ENABLE_RUNTIMES=FortranRuntime
+Requirements:
+ * [Same as LLVM](https://llvm.org/docs/GettingStarted.html#requirements).
+ * While for LLVM C++14 suffices, Flang and FortranRuntime require a C++17-capable C++ compiler.
+
+
+### Bootstrap/In-Tree Build
+
+The bootstrap build will first build Clang and Flang, then use these compilers to compile the FortranRuntime.
+CMake will create a secondary build tree in configured with these just-built compilers. The secondary build will reuse the same build options (Flags, Debug/Release, ...) as the primary build. It will also ensure that once built, the FortranRuntime is found by Flang from either the build- or install-prefix. To enable, add `FortranRuntime` to `LLVM_ENABLE_RUNTIMES`:
+
+```bash
+cmake -S <path-to-llvm-project>/llvm \
+ -DNinja \
+ -DLLVM_ENABLE_PROJECTS=flang \
+ -DLLVM_ENABLE_RUNTIMES=FortranRuntime \
+ ...
```
-### Runtime-only build
+It is recommended to enable building OpenMP alongside Flang and FortranRuntime as well. This will build `omp_lib.mod` required to use OpenMP from Fortran. Building Compiler-RT may also be required, particularly on platforms that do not provide all C-ABI functionality (such as Windows).
-```sh
-cmake -S <path-to-llvm-project>/runtimes -DLLVM_ENABLE_RUNTIMES=FortranRuntime -DCMAKE_Fortran_COMPILER=<path-to-llvm-builddir-or-installprefix>/bin/flang-new
+```bash
+cmake -S <path-to-llvm-project>/llvm \
+ -DNinja \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DLLVM_ENABLE_PROJECTS="flang;openmp" \
+ -DLLVM_ENABLE_RUNTIMES="compiler-rt;FortranRuntime" \
+ ...
```
+By default, the enabled runtimes will only be built for the host platform (`-DLLVM_RUNTIME_TARGETS=default`). To add additional targets to support cross-compilation via `flang-new --target=<target-triple>`, add more triples to `LLVM_RUNTIME_TARGETS`, such as `-DLLVM_RUNTIME_TARGETS="default;aarch64-linux-gnu"`.
+
+After configuration, build, test, and install the runtime via
+
+```shell
+$ ninja FortranRuntime
+$ ninja check-FortranRuntime
+$ ninja install-FortranRuntime
+```
+
+
+### Runtime-only/Out-of-Tree Build
+
+Instead of building Clang and Flang from scratch, the Runtime-only build uses CMake's environment introspection to find a C, C++, and Fortran compiler. The compiler to be used can be controlled using CMake's standard mechanisms such as `CMAKE_CXX_COMPILER`, `CMAKE_CXX_COMPILER`, and `CMAKE_Fortran_COMPILER`. `CMAKE_Fortran_COMPILER` must be `flang-new` built from the same Git commit as FortranRuntime to ensure they are using the same ABI. The C and C++ compiler can be any compiler supporting the same ABI.
+
+In addition to the compiler, the build be able to find LLVM development tools such as `lit` and `FileCheck` that are not found in an LLVM's install directory. Use `CMAKE_BINARY_DIR` to point to directory where LLVM has been built.
+A simple build configuration maight look like the following:
+
+```bash
+cmake -S <path-to-llvm-project>/runtimes \
+ -GNinja \
+ -DLLVM_BINARY_DIR=<path-to-llvm-builddir> \
+ -DCMAKE_Fortran_COMPILER=<path-to-llvm-builddir>/bin/flang-new \
+ -DLLVM_ENABLE_RUNTIMES=FortranRuntime \
+ ...
+```
+
+uilding the FortranRuntime for cross-compilation triple, the target triple can be selected using `LLVM_DEFAULT_TARGET_TRIPLE` AND `LLVM_RUNTIMES_TARGET`. Of course, FortranRuntime can be built multiple times with different build configurations, but have to be located manually when using with the Flang driver using the `-L` option.
+
+A more complete build configuration could be the following:
+
+```bash
+cmake -S <path-to-llvm-project>/runtimes \
+ -GNinja \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DCMAKE_INSTALL_PREFIX="${HOME}/local" \
+ -DLLVM_ENABLE_RUNTIMES="compiler-rt;FortranRuntime" \
+ -DCMAKE_C_COMPILER=gcc \
+ -DCMAKE_CXX_COMPILER=g++ \
+ -DLLVM_BINARY_DIR=<path-to-llvm-builddir> \
+ -DLLVM_DIR=<path-to-llvm-builddir>/lib/cmake/llvm \
+ -DClang_DIR=<path-to-llvm-builddir>/lib/cmake/clang \
+ -DCMAKE_Fortran_COMPILER=<path-to-llvm-builddir-or-installprefix>/bin/flang-new \
+ -DLLVM_DEFAULT_TARGET_TRIPLE=x86_64-linux-gnu \
+ -DLLVM_RUNTIMES_TARGET=x86_64-linux-gnu \
+ ...
+```
+
+## Configuration Option Reference
+
+The FortranRuntime has the followign configuration options. This is in addition to the build options the LLVM_ENABLE_RUNTIMES mechanism and CMake itself provide.
+
+ * `FORTRANRUNTIME_INCLUDE_TESTS` (boolean; default: `ON`)
+
+ When `OFF`, does not add any tests, unittests, and omits the `check-FortranRuntime` build target.
+
+ * `FLANG_RUNTIME_F128_MATH_LIB` (default: `""`)
+
+ Determines the implementation of `REAL(16)` math functions. If set to `libquadmath`, uses `quadmath.h` and `-lquadmath` typically distributed with gcc. If empty, disables `REAL(16)` support. For any other value, introspects the compiler for `__float128` or 128-bit `long double` support. [More details](Real16MathSupport.md).
+
+ * `FORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT` (values: `"CUDA"`,`"OpenMP"`, `""` default: `""`)
+
+ When set to `CUDA`, builds a FortranRuntime with support for GPU accelerators using CUDA. `CMAKE_CUDA_COMPILER` must be set if not automatically detected by CMake. `nvcc` as well as `clang` are supported.
+
+ When set to `OpenMP`, builds a FortranRuntime with support for GPU accelerators using OpenMP offloading. Only Clang is supported for `CMAKE_C_COMPILER` and `CMAKE_CXX_COMPILER`.
+
+ * `FORTRANRUNTIME_ENABLE_CUF` (bool, default: `OFF`)
+
+ Compiles the `libCufRuntime_cuda_<CUDA-version>.a/.so` library. This is independent of `FORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT=CUDA` and only requires a [CUDA Toolkit installation](https://cmake.org/cmake/help/latest/module/FindCUDAToolkit.html) found (not `CMAKE_CUDA_COMPILER`).
+
+
+### CUDA Support
+
+With `-DFORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT=CUDA`, the following additional configuration options become available.
+
+ * `FORTRANRUNTIME_LIBCUDACXX_PATH` (path, default: `""`)
+
+ Path to libcu++ package installation.
+
+ * `FORTRANRUNTIME_CUDA_RUNTIME_PTX_WITHOUT_GLOBAL_VARS` (boolean, default: `OFF`)
+
+ Do not compile global variables' definitions when producing PTX library. Default is `OFF`, meaning global variable definitions are compiled by default.
+
+
+### OpenMP Offload Support
+
+With `-DFORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT=OpenMP`, the following additional configuration options become available.
+
+ * `FORTRANRUNTIME_DEVICE_ARCHITECTURES` (default: `"all"`)
+ A list of device architectures that the FortranRuntime is supporting. If `"all"` uses a pre-defined list of architectures. Same purpose as `LIBOMPTARGET_DEVICE_ARCHITECTURES` from liboffload.
diff --git a/flang/docs/GettingStarted.md b/flang/docs/GettingStarted.md
index e93f051c88d33e..4a6275a3b57730 100644
--- a/flang/docs/GettingStarted.md
+++ b/flang/docs/GettingStarted.md
@@ -30,10 +30,10 @@ https://llvm.org/docs/GettingStarted.html.
All of the examples below use GCC as the C/C++ compilers and ninja as the build
tool.
-### Building flang in tree
+### Building flang in tree (bootstrap build)
Building flang in tree means building flang along with all of the projects on
-which it depends. These projects include mlir, clang, flang, openmp, and
-compiler-rt. Note that compiler-rt is only needed to access libraries that
+which it depends. These projects include mlir, clang, flang, openmp,
+compiler-rt, and FortranRuntime. Note that compiler-rt is only needed to access libraries that
support 16 bit floating point numbers. It's not needed to run the automated
tests. You can use several different C++ compilers for most of the build,
includig GNU and clang. But building compiler-rt requres using the clang
@@ -82,7 +82,7 @@ cmake \
-DLLVM_TARGETS_TO_BUILD=host \
-DLLVM_LIT_ARGS=-v \
-DLLVM_ENABLE_PROJECTS="clang;mlir;flang;openmp" \
- -DLLVM_ENABLE_RUNTIMES="compiler-rt" \
+ -DLLVM_ENABLE_RUNTIMES="compiler-rt;FortranRuntime" \
../llvm-project/llvm
ninja
@@ -209,13 +209,14 @@ mkdir build_flang_runtime
cd build_flang_runtime
cmake \
+ -DLLVM_ENABLE_RUNTIMES=FortranRuntime \
-DFORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT=CUDA \
-DCMAKE_CUDA_ARCHITECTURES=80 \
-DCMAKE_C_COMPILER=clang \
-DCMAKE_CXX_COMPILER=clang++ \
-DCMAKE_CUDA_COMPILER=clang \
-DCMAKE_CUDA_HOST_COMPILER=clang++ \
- ../runtime/
+ ../runtimes/
make -j FortranRuntime
```
@@ -231,13 +232,14 @@ mkdir build_flang_runtime
cd build_flang_runtime
cmake \
+ -DLLVM_ENABLE_RUNTIMES=FortranRuntime \
-DFORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT=CUDA \
-DCMAKE_CUDA_ARCHITECTURES=80 \
-DCMAKE_C_COMPILER=clang \
-DCMAKE_CXX_COMPILER=clang++ \
-DCMAKE_CUDA_COMPILER=nvcc \
-DCMAKE_CUDA_HOST_COMPILER=clang++ \
- ../runtime/
+ ../runtimes/
make -j FortranRuntime
```
@@ -251,13 +253,14 @@ code. Note that the packaging of the libraries is different
between [Clang](https://clang.llvm.org/docs/OffloadingDesign.html#linking-target-device-code) and NVCC, so the library must be linked using
compatible compiler drivers.
-#### Building in-tree
+#### Building in-tree (bootstrap build)
One may build Flang runtime library along with building Flang itself
by providing these additional CMake variables on top of the Flang in-tree
build config:
For example:
```bash
+ -DLLVM_ENABLE_RUNTIMES=FortranRuntime \
-DFORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT=CUDA \
-DCMAKE_CUDA_ARCHITECTURES=80 \
-DCMAKE_C_COMPILER=clang \
@@ -268,6 +271,7 @@ For example:
Or:
```bash
+ -DLLVM_ENABLE_RUNTIMES=FortranRuntime \
-DFORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT=CUDA \
-DCMAKE_CUDA_ARCHITECTURES=80 \
-DCMAKE_C_COMPILER=gcc \
@@ -288,11 +292,12 @@ mkdir build_flang_runtime
cd build_flang_runtime
cmake \
+ -DLLVM_ENABLE_RUNTIMES=FortranRuntime \
-DFORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT="OpenMP" \
-DCMAKE_C_COMPILER=clang \
-DCMAKE_CXX_COMPILER=clang++ \
-DFORTRANRUNTIME_DEVICE_ARCHITECTURES="all" \
- ../runtime/
+ ../runtimes/
make -j FortranRuntime
```
diff --git a/llvm/runtimes/CMakeLists.txt b/llvm/runtimes/CMakeLists.txt
index 5da91169058724..4ee7c390f8ecd3 100644
--- a/llvm/runtimes/CMakeLists.txt
+++ b/llvm/runtimes/CMakeLists.txt
@@ -281,6 +281,7 @@ function(runtime_default_target)
PASSTHROUGH_PREFIXES LLVM_ENABLE_RUNTIMES
LLVM_USE_LINKER
CUDA # For runtimes that may look for the CUDA SDK (libc, offload)
+ FLANG_RUNTIME # Shared between Flang and FortranRuntime
${ARG_PREFIXES}
EXTRA_TARGETS ${extra_targets}
${test_targets}
>From 2e23147c9cc8a5e7d832d164663ef2bb8e2eb88e Mon Sep 17 00:00:00 2001
From: Michael Kruse <llvm-project at meinersbur.de>
Date: Mon, 7 Oct 2024 16:13:15 +0200
Subject: [PATCH 11/32] clang-format
---
FortranRuntime/test/Runtime/no-cpp-dep.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/FortranRuntime/test/Runtime/no-cpp-dep.c b/FortranRuntime/test/Runtime/no-cpp-dep.c
index f6760b75a148ff..971e7141678893 100644
--- a/FortranRuntime/test/Runtime/no-cpp-dep.c
+++ b/FortranRuntime/test/Runtime/no-cpp-dep.c
@@ -12,9 +12,9 @@ RUN: rm a.out
*/
#include "flang/Runtime/entry-names.h"
-#include <stdint.h>
#include <stdbool.h>
#include <stddef.h>
+#include <stdint.h>
/*
Manually add declarations for the runtime functions that we want to make sure
@@ -32,8 +32,8 @@ int32_t RTNAME(ArgumentCount)();
int32_t RTNAME(GetCommandArgument)(int32_t, const struct Descriptor *,
const struct Descriptor *, const struct Descriptor *);
int32_t RTNAME(GetEnvVariable)(const struct Descriptor *,
- const struct Descriptor *, const struct Descriptor *, bool ,
- const struct Descriptor *, const char *, int );
+ const struct Descriptor *, const struct Descriptor *, bool,
+ const struct Descriptor *, const char *, int);
int64_t RTNAME(SystemClockCount)(int kind);
int main() {
>From b293bdfaf632b8cde85739e9313a7eb7338c346e Mon Sep 17 00:00:00 2001
From: Michael Kruse <llvm-project at meinersbur.de>
Date: Mon, 7 Oct 2024 16:13:44 +0200
Subject: [PATCH 12/32] Undo avoiding C23-incompatibility warning
---
FortranRuntime/test/Runtime/no-cpp-dep.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/FortranRuntime/test/Runtime/no-cpp-dep.c b/FortranRuntime/test/Runtime/no-cpp-dep.c
index 971e7141678893..f68f2b2cf3b475 100644
--- a/FortranRuntime/test/Runtime/no-cpp-dep.c
+++ b/FortranRuntime/test/Runtime/no-cpp-dep.c
@@ -31,9 +31,7 @@ void RTNAME(ProgramStart)(
int32_t RTNAME(ArgumentCount)();
int32_t RTNAME(GetCommandArgument)(int32_t, const struct Descriptor *,
const struct Descriptor *, const struct Descriptor *);
-int32_t RTNAME(GetEnvVariable)(const struct Descriptor *,
- const struct Descriptor *, const struct Descriptor *, bool,
- const struct Descriptor *, const char *, int);
+int32_t RTNAME(GetEnvVariable)();
int64_t RTNAME(SystemClockCount)(int kind);
int main() {
@@ -41,7 +39,7 @@ int main() {
RTNAME(ProgramStart)(0, 0, 0, 0);
int32_t c = RTNAME(ArgumentCount)();
int32_t v = RTNAME(GetCommandArgument)(0, 0, 0, 0);
- int32_t e = RTNAME(GetEnvVariable)(NULL, NULL, NULL, false, NULL, "FOO", 0);
+ int32_t e = RTNAME(GetEnvVariable)("FOO", 0, 0);
int64_t t = RTNAME(SystemClockCount)(8);
return x + c + v + e;
}
>From 981dbcc0b57a62299e488b0516245aa24ef4b35d Mon Sep 17 00:00:00 2001
From: Michael Kruse <llvm-project at meinersbur.de>
Date: Mon, 7 Oct 2024 22:45:54 +0200
Subject: [PATCH 13/32] Formatting and release notes update
---
FortranRuntime/CMakeLists.txt | 2 +
FortranRuntime/README.md | 103 +++++++++++++-----
FortranRuntime/cmake/config.h.cmake.in | 8 ++
.../modules/AddFlangOffloadRuntime.cmake | 16 ++-
.../cmake/modules/AddFortranRuntime.cmake | 36 +++---
.../cmake/modules/FlangCommon.cmake | 12 ++
FortranRuntime/lib/CMakeLists.txt | 1 +
FortranRuntime/lib/Runtime/CMakeLists.txt | 14 +--
.../lib/Runtime/Float128Math/CMakeLists.txt | 6 +-
FortranRuntime/lib/Testing/CMakeLists.txt | 1 +
FortranRuntime/test/Driver/ctofortran.f90 | 3 +-
FortranRuntime/unittests/CMakeLists.txt | 1 -
flang/docs/GettingStarted.md | 19 ++--
flang/docs/ReleaseNotes.md | 7 ++
flang/lib/CMakeLists.txt | 2 +-
flang/lib/Common/CMakeLists.txt | 12 +-
flang/lib/Evaluate/CMakeLists.txt | 2 +-
flang/lib/Optimizer/Transforms/CMakeLists.txt | 1 -
flang/test/lib/CMakeLists.txt | 1 -
flang/tools/f18/CMakeLists.txt | 6 +-
flang/unittests/Evaluate/CMakeLists.txt | 3 +-
21 files changed, 176 insertions(+), 80 deletions(-)
diff --git a/FortranRuntime/CMakeLists.txt b/FortranRuntime/CMakeLists.txt
index fe5610f0c20816..e65cab7060cb02 100644
--- a/FortranRuntime/CMakeLists.txt
+++ b/FortranRuntime/CMakeLists.txt
@@ -156,4 +156,6 @@ add_subdirectory(lib)
if (FORTRANRUNTIME_INCLUDE_TESTS)
add_subdirectory(unittests)
add_subdirectory(test)
+else ()
+ add_custom_target(check-FortranRuntime)
endif()
diff --git a/FortranRuntime/README.md b/FortranRuntime/README.md
index 6018276f6d4c5a..cb578507f8c96e 100644
--- a/FortranRuntime/README.md
+++ b/FortranRuntime/README.md
@@ -8,27 +8,40 @@
# Fortran Runtime
-Fortran Runtime is the runtime library for code emitted by the Flang
-compiler (https://flang.llvm.org).
+Fortran Runtime is the runtime library for code emitted by the Flang compiler
+(https://flang.llvm.org).
## Getting Started
-There are two build modes for the FortranRuntime. The bootstrap build, also called the in-tree build, and the runtime-only build, also called the out-of-tree build.
-Not to be confused with the terms [in-source and out-of-source](https://cmake.org/cmake/help/latest/manual/cmake.1.html#introduction-to-cmake-buildsystems) builds as defined by CMake. In an in-source build, the source directory and the build directory are identical, whereas with an out-of-source build the build artifacts are stored somewhere else, possibly in a subdirectory of the source directory. LLVM does not support in-source builds.
+There are two build modes for the FortranRuntime. The bootstrap build, also
+called the in-tree build, and the runtime-only build, also called the
+out-of-tree build.
+Not to be confused with the terms
+[in-source and out-of-source](https://cmake.org/cmake/help/latest/manual/cmake.1.html#introduction-to-cmake-buildsystems)
+builds as defined by CMake. In an in-source build, the source directory and the
+build directory are identical, whereas with an out-of-source build the
+build artifacts are stored somewhere else, possibly in a subdirectory of the
+source directory. LLVM does not support in-source builds.
### Requirements
Requirements:
* [Same as LLVM](https://llvm.org/docs/GettingStarted.html#requirements).
- * While for LLVM C++14 suffices, Flang and FortranRuntime require a C++17-capable C++ compiler.
+ * While for LLVM C++14 suffices, Flang and FortranRuntime require a
+ C++17-capable C++ compiler.
### Bootstrap/In-Tree Build
-The bootstrap build will first build Clang and Flang, then use these compilers to compile the FortranRuntime.
-CMake will create a secondary build tree in configured with these just-built compilers. The secondary build will reuse the same build options (Flags, Debug/Release, ...) as the primary build. It will also ensure that once built, the FortranRuntime is found by Flang from either the build- or install-prefix. To enable, add `FortranRuntime` to `LLVM_ENABLE_RUNTIMES`:
+The bootstrap build will first build Clang and Flang, then use these compilers
+to compile the FortranRuntime. CMake will create a secondary build tree in
+configured with these just-built compilers. The secondary build will reuse the
+same build options (Flags, Debug/Release, ...) as the primary build. It will
+also ensure that once built, the FortranRuntime is found by Flang from either
+the build- or install-prefix. To enable, add `FortranRuntime` to
+`LLVM_ENABLE_RUNTIMES`:
```bash
cmake -S <path-to-llvm-project>/llvm \
@@ -38,7 +51,10 @@ cmake -S <path-to-llvm-project>/llvm \
...
```
-It is recommended to enable building OpenMP alongside Flang and FortranRuntime as well. This will build `omp_lib.mod` required to use OpenMP from Fortran. Building Compiler-RT may also be required, particularly on platforms that do not provide all C-ABI functionality (such as Windows).
+It is recommended to enable building OpenMP alongside Flang and FortranRuntime
+as well. This will build `omp_lib.mod` required to use OpenMP from Fortran.
+Building Compiler-RT may also be required, particularly on platforms that do
+not provide all C-ABI functionality (such as Windows).
```bash
cmake -S <path-to-llvm-project>/llvm \
@@ -49,23 +65,35 @@ cmake -S <path-to-llvm-project>/llvm \
...
```
-By default, the enabled runtimes will only be built for the host platform (`-DLLVM_RUNTIME_TARGETS=default`). To add additional targets to support cross-compilation via `flang-new --target=<target-triple>`, add more triples to `LLVM_RUNTIME_TARGETS`, such as `-DLLVM_RUNTIME_TARGETS="default;aarch64-linux-gnu"`.
+By default, the enabled runtimes will only be built for the host platform
+(`-DLLVM_RUNTIME_TARGETS=default`). To add additional targets to support
+cross-compilation via `flang-new --target=<target-triple>`, add more triples to
+`LLVM_RUNTIME_TARGETS`, such as
+`-DLLVM_RUNTIME_TARGETS="default;aarch64-linux-gnu"`.
-After configuration, build, test, and install the runtime via
+After configuration, build, test, and install the runtime(s) via
```shell
$ ninja FortranRuntime
$ ninja check-FortranRuntime
-$ ninja install-FortranRuntime
+$ ninja install
```
### Runtime-only/Out-of-Tree Build
-Instead of building Clang and Flang from scratch, the Runtime-only build uses CMake's environment introspection to find a C, C++, and Fortran compiler. The compiler to be used can be controlled using CMake's standard mechanisms such as `CMAKE_CXX_COMPILER`, `CMAKE_CXX_COMPILER`, and `CMAKE_Fortran_COMPILER`. `CMAKE_Fortran_COMPILER` must be `flang-new` built from the same Git commit as FortranRuntime to ensure they are using the same ABI. The C and C++ compiler can be any compiler supporting the same ABI.
+Instead of building Clang and Flang from scratch, the Runtime-only build uses
+CMake's environment introspection to find a C, C++, and Fortran compiler. The
+compiler to be used can be controlled using CMake's standard mechanisms such as
+`CMAKE_CXX_COMPILER`, `CMAKE_CXX_COMPILER`, and `CMAKE_Fortran_COMPILER`.
+`CMAKE_Fortran_COMPILER` must be `flang-new` built from the same Git commit as
+FortranRuntime to ensure they are using the same ABI. The C and C++ compiler
+can be any compiler supporting the same ABI.
-In addition to the compiler, the build be able to find LLVM development tools such as `lit` and `FileCheck` that are not found in an LLVM's install directory. Use `CMAKE_BINARY_DIR` to point to directory where LLVM has been built.
-A simple build configuration maight look like the following:
+In addition to the compiler, the build be able to find LLVM development tools
+such as `lit` and `FileCheck` that are not found in an LLVM's install directory.
+Use `CMAKE_BINARY_DIR` to point to directory where LLVM has been built.
+A simple build configuration might look like the following:
```bash
cmake -S <path-to-llvm-project>/runtimes \
@@ -76,7 +104,11 @@ cmake -S <path-to-llvm-project>/runtimes \
...
```
-uilding the FortranRuntime for cross-compilation triple, the target triple can be selected using `LLVM_DEFAULT_TARGET_TRIPLE` AND `LLVM_RUNTIMES_TARGET`. Of course, FortranRuntime can be built multiple times with different build configurations, but have to be located manually when using with the Flang driver using the `-L` option.
+Building the FortranRuntime for cross-compilation triple, the target triple can
+be selected using `LLVM_DEFAULT_TARGET_TRIPLE` AND `LLVM_RUNTIMES_TARGET`.
+Of course, FortranRuntime can be built multiple times with different build
+configurations, but have to be located manually when using with the Flang
+driver using the `-L` option.
A more complete build configuration could be the following:
@@ -99,30 +131,46 @@ cmake -S <path-to-llvm-project>/runtimes
## Configuration Option Reference
-The FortranRuntime has the followign configuration options. This is in addition to the build options the LLVM_ENABLE_RUNTIMES mechanism and CMake itself provide.
+The FortranRuntime has the followign configuration options. This is in
+addition to the build options the LLVM_ENABLE_RUNTIMES mechanism and
+CMake itself provide.
* `FORTRANRUNTIME_INCLUDE_TESTS` (boolean; default: `ON`)
- When `OFF`, does not add any tests, unittests, and omits the `check-FortranRuntime` build target.
+ When `OFF`, does not add any tests and unittests. The `check-FortranRuntime`
+ build target will do nothing.
* `FLANG_RUNTIME_F128_MATH_LIB` (default: `""`)
- Determines the implementation of `REAL(16)` math functions. If set to `libquadmath`, uses `quadmath.h` and `-lquadmath` typically distributed with gcc. If empty, disables `REAL(16)` support. For any other value, introspects the compiler for `__float128` or 128-bit `long double` support. [More details](Real16MathSupport.md).
+ Determines the implementation of `REAL(16)` math functions. If set to
+ `libquadmath`, uses `quadmath.h` and `-lquadmath` typically distributed with
+ gcc. If empty, disables `REAL(16)` support. For any other value, introspects
+ the compiler for `__float128` or 128-bit `long double` support.
+ [More details](docs/Real16MathSupport.md).
* `FORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT` (values: `"CUDA"`,`"OpenMP"`, `""` default: `""`)
- When set to `CUDA`, builds a FortranRuntime with support for GPU accelerators using CUDA. `CMAKE_CUDA_COMPILER` must be set if not automatically detected by CMake. `nvcc` as well as `clang` are supported.
+ When set to `CUDA`, builds a FortranRuntime with experimental support for GPU
+ accelerators using CUDA. `CMAKE_CUDA_COMPILER` must be set if not
+ automatically detected by CMake. `nvcc` as well as `clang` are supported.
- When set to `OpenMP`, builds a FortranRuntime with support for GPU accelerators using OpenMP offloading. Only Clang is supported for `CMAKE_C_COMPILER` and `CMAKE_CXX_COMPILER`.
+ When set to `OpenMP`, builds a FortranRuntime with experimental support for
+ GPU accelerators using OpenMP offloading. Only Clang is supported for
+ `CMAKE_C_COMPILER` and `CMAKE_CXX_COMPILER`.
* `FORTRANRUNTIME_ENABLE_CUF` (bool, default: `OFF`)
- Compiles the `libCufRuntime_cuda_<CUDA-version>.a/.so` library. This is independent of `FORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT=CUDA` and only requires a [CUDA Toolkit installation](https://cmake.org/cmake/help/latest/module/FindCUDAToolkit.html) found (not `CMAKE_CUDA_COMPILER`).
+ Compiles the `libCufRuntime_cuda_<CUDA-version>.a/.so` library. This is
+ independent of `FORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT=CUDA` and only
+ requires a
+ [CUDA Toolkit installation](https://cmake.org/cmake/help/latest/module/FindCUDAToolkit.html)
+ (no `CMAKE_CUDA_COMPILER`).
### CUDA Support
-With `-DFORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT=CUDA`, the following additional configuration options become available.
+With `-DFORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT=CUDA`, the following
+additional configuration options become available.
* `FORTRANRUNTIME_LIBCUDACXX_PATH` (path, default: `""`)
@@ -130,13 +178,18 @@ With `-DFORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT=CUDA`, the following additio
* `FORTRANRUNTIME_CUDA_RUNTIME_PTX_WITHOUT_GLOBAL_VARS` (boolean, default: `OFF`)
- Do not compile global variables' definitions when producing PTX library. Default is `OFF`, meaning global variable definitions are compiled by default.
+ Do not compile global variables' definitions when producing PTX library.
+ Default is `OFF`, meaning global variable definitions are compiled by
+ default.
### OpenMP Offload Support
-With `-DFORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT=OpenMP`, the following additional configuration options become available.
+With `-DFORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT=OpenMP`, the following
+additional configuration options become available.
* `FORTRANRUNTIME_DEVICE_ARCHITECTURES` (default: `"all"`)
- A list of device architectures that the FortranRuntime is supporting. If `"all"` uses a pre-defined list of architectures. Same purpose as `LIBOMPTARGET_DEVICE_ARCHITECTURES` from liboffload.
+ A list of device architectures that the FortranRuntime is supporting.
+ If `"all"` uses a pre-defined list of architectures. Same purpose as
+ `LIBOMPTARGET_DEVICE_ARCHITECTURES` from liboffload.
diff --git a/FortranRuntime/cmake/config.h.cmake.in b/FortranRuntime/cmake/config.h.cmake.in
index 0a1d1394b9bc49..4fa31c7e89ad7b 100644
--- a/FortranRuntime/cmake/config.h.cmake.in
+++ b/FortranRuntime/cmake/config.h.cmake.in
@@ -1,3 +1,11 @@
+//===-- cmake/config.h.cmake.in ---------------------------------*- C++ -*-===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
#ifndef FORTRAN_RUNTIME_CONFIG_H
#define FORTRAN_RUNTIME_CONFIG_H
diff --git a/FortranRuntime/cmake/modules/AddFlangOffloadRuntime.cmake b/FortranRuntime/cmake/modules/AddFlangOffloadRuntime.cmake
index ae6fcabbed9b92..8cfd02267dfdca 100644
--- a/FortranRuntime/cmake/modules/AddFlangOffloadRuntime.cmake
+++ b/FortranRuntime/cmake/modules/AddFlangOffloadRuntime.cmake
@@ -1,12 +1,10 @@
-
-
-
-
-
-
-
-
-
+#===-- cmake/modules/AddFlangOffloadRuntime.txt ----------------------------===#
+#
+# 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
+#
+#===------------------------------------------------------------------------===#
macro(enable_cuda_compilation name files)
if (FORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT STREQUAL "CUDA")
diff --git a/FortranRuntime/cmake/modules/AddFortranRuntime.cmake b/FortranRuntime/cmake/modules/AddFortranRuntime.cmake
index 316923ca632c20..841459e4dbd105 100644
--- a/FortranRuntime/cmake/modules/AddFortranRuntime.cmake
+++ b/FortranRuntime/cmake/modules/AddFortranRuntime.cmake
@@ -6,7 +6,7 @@
#
#===------------------------------------------------------------------------===#
-# Builds a library with common option for FortranRuntime.
+# Builds a library with common options for FortranRuntime.
#
# Usage:
#
@@ -16,11 +16,13 @@
# STATIC
# Build a static (.a/.lib) library
# OBJECT
-# Create only object- and Fortran module files without static/dynamic library
+# Create only object files without static/dynamic library
# INSTALL_WITH_TOOLCHAIN
-# Install library into Clang's resource directory so it can be found by the Flang driver during compilation, including tests
+# Install library into Clang's resource directory so it can be found by the
+# Flang driver during compilation, including tests
# EXCLUDE_FROM_ALL
-# Do not build library by default; typically used for libraries needed for testing only, no install
+# Do not build library by default; typically used for libraries needed for
+# testing only, no install
# LINK_TO_LLVM
# Library requires include path and linking to LLVM's Support component
# ADDITIONAL_HEADERS
@@ -65,22 +67,30 @@ function (add_fortranruntime_library name)
target_compile_features(${name} PRIVATE cxx_std_17)
if (LLVM_COMPILER_IS_GCC_COMPATIBLE)
- target_compile_options(${name} PRIVATE $<$<COMPILE_LANGUAGE:CXX>:-fno-exceptions -fno-rtti -fno-unwind-tables -fno-asynchronous-unwind-tables>)
+ target_compile_options(${name} PRIVATE
+ $<$<COMPILE_LANGUAGE:CXX>:-fno-exceptions -fno-rtti -fno-unwind-tables -fno-asynchronous-unwind-tables
+ )
elseif (MSVC)
- target_compile_options(${name} PRIVATE $<$<COMPILE_LANGUAGE:CXX>:/EHs-c- /GR->)
+ target_compile_options(${name} PRIVATE
+ $<$<COMPILE_LANGUAGE:CXX>:/EHs-c- /GR->
+ )
endif ()
# FortranRuntime's public headers
target_include_directories(${name} PRIVATE "${FORTRANRUNTIME_SOURCE_DIR}/include")
- # For ISO_Fortran_binding.h to be found (Accessed as #include "flang/ISO_Fortran_binding.h")
+ # For ISO_Fortran_binding.h to be found by the runtime itself (Accessed as #include "flang/ISO_Fortran_binding.h")
+ # User applications can use #include <ISO_Fortran_binding.h>
target_include_directories(${name} PRIVATE "${FLANG_SOURCE_DIR}/include")
- # For configured config.h for be found
+ # For FortranRuntime's configured config.h to be found
target_include_directories(${name} PRIVATE "${FORTRANRUNTIME_BINARY_DIR}")
- # Clang/Flang, targeting the MSVC ABI, including clang-cl, should only depends on msv(u)crt. LLVM still emits libgcc/compiler-rt functions for 128-bit integer math (__udivti3, __modti3, __fixsfti, __floattidf, ...) that msvc does not support.
- # We are injecting a dependency to Compiler-RT where these are implemented.
+ # Clang/Flang, targeting the MSVC ABI, including clang-cl, should only depends
+ # on msv(u)crt. LLVM still emits libgcc/compiler-rt functions for 128-bit
+ # integer math (__udivti3, __modti3, __fixsfti, __floattidf, ...) that msvc
+ # does not support. We are injecting a dependency to Compiler-RT where these
+ # are implemented.
if (MSVC AND (CMAKE_CXX_COMPILER_ID MATCHES ".*Clang") AND FORTRANRUNTIME_LIBCALL)
target_compile_options(${name} PRIVATE "$<$<COMPILE_LANGUAGE:CXX,C>:-Xclang>$<$<COMPILE_LANGUAGE:Fortran>:-Xflang>" "--dependent-lib=${FORTRANRUNTIME_LIBCALL}")
endif ()
@@ -96,9 +106,9 @@ function (add_fortranruntime_library name)
target_include_directories(${name} PRIVATE ${LLVM_INCLUDE_DIRS})
endif ()
- # If this is part of the toolchain, put it into the compiler's resource directory.
- # Otherwise it is part of testing and is not installed at all.
- # TODO: Consider multi-configuration builds
+ # If this is part of the toolchain, put it into the compiler's resource
+ # directory. Otherwise it is part of testing and is not installed at all.
+ # TODO: Consider multi-configuration builds (MSVC_IDE, "Ninja Multi-Config")
if (ARG_INSTALL_WITH_TOOLCHAIN)
set_target_properties(${name}
PROPERTIES
diff --git a/FortranRuntime/cmake/modules/FlangCommon.cmake b/FortranRuntime/cmake/modules/FlangCommon.cmake
index 34c91048f47887..d7194ad4d7ef56 100644
--- a/FortranRuntime/cmake/modules/FlangCommon.cmake
+++ b/FortranRuntime/cmake/modules/FlangCommon.cmake
@@ -1,3 +1,15 @@
+#===-- cmake/modules/FlangCommon.txt ----------------------------===#
+#
+# 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
+#
+#===------------------------------------------------------------------------===#
+#
+# CMake definitions shared betwween Flang and FortranRuntime
+#
+#===------------------------------------------------------------------------===#
+
# The out of tree builds of the compiler and the Fortran runtime
# must use the same setting of FLANG_RUNTIME_F128_MATH_LIB
# to be composable. Failure to synchronize this setting may result
diff --git a/FortranRuntime/lib/CMakeLists.txt b/FortranRuntime/lib/CMakeLists.txt
index 8c4382078a8e70..74c78b3fa3a493 100644
--- a/FortranRuntime/lib/CMakeLists.txt
+++ b/FortranRuntime/lib/CMakeLists.txt
@@ -10,3 +10,4 @@ add_subdirectory(Runtime)
if (FORTRANRUNTIME_INCLUDE_TESTS)
add_subdirectory(Testing)
endif ()
+
diff --git a/FortranRuntime/lib/Runtime/CMakeLists.txt b/FortranRuntime/lib/Runtime/CMakeLists.txt
index cc0161c05c57fa..b62556ff4b4e66 100644
--- a/FortranRuntime/lib/Runtime/CMakeLists.txt
+++ b/FortranRuntime/lib/Runtime/CMakeLists.txt
@@ -90,9 +90,6 @@ file(GLOB_RECURSE private_headers
"${FLANGRUNTIME_SOURCE_DIR}/lib/Common/*.h"
)
-
-
-
get_target_property(f128_sources
FortranFloat128MathILib INTERFACE_SOURCES
)
@@ -109,8 +106,6 @@ if (f128_sources)
list(APPEND sources ${f128_sources})
endif()
-
-
if (NOT WIN32)
add_fortranruntime_library(FortranRuntime STATIC
${sources}
@@ -118,7 +113,8 @@ if (NOT WIN32)
ADDITIONAL_HEADERS ${public_headers} ${private_headers}
)
- # For unittests that link to FortranRuntime. Should link to the static version of the library.
+ # For unittests that link to FortranRuntime. Should link to the static version
+ # of the library.
add_library(FortranRuntime.static ALIAS FortranRuntime)
add_library(FortranRuntime.unittest ALIAS FortranRuntime)
else()
@@ -131,7 +127,8 @@ else()
ADDITIONAL_HEADERS ${public_headers} ${private_headers}
)
- # Setting an unique Fortran_MODULE_DIRECTORY is required for each variant to write a different .mod file.
+ # Setting an unique Fortran_MODULE_DIRECTORY is required for each variant to
+ # write a different .mod file.
set_target_properties(${name}
PROPERTIES
MSVC_RUNTIME_LIBRARY ${msvc_lib}
@@ -145,7 +142,8 @@ else()
# unittests link against LLVMSupport which is compiled with /MD
add_win_fortranruntime_library(STATIC unittest MultiThreadedDLL EXCLUDE_FROM_ALL)
- # FIXME: Before DLL versions of the runtime can be used, exported definitions must be annotated with __declspec(dllexport).
+ # FIXME: Before DLL versions of the runtime can be used, exported definitions
+ # must be annotated with __declspec(dllexport).
add_win_fortranruntime_library(SHARED dynamic MultiThreadedDLL)
add_win_fortranruntime_library(SHARED dynamic_dbg MultiThreadedDebugDLL)
diff --git a/FortranRuntime/lib/Runtime/Float128Math/CMakeLists.txt b/FortranRuntime/lib/Runtime/Float128Math/CMakeLists.txt
index a55d39e88cd404..ed65da0a5ac71c 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/CMakeLists.txt
+++ b/FortranRuntime/lib/Runtime/Float128Math/CMakeLists.txt
@@ -88,9 +88,11 @@ if (FLANG_RUNTIME_F128_MATH_LIB)
"${FLANG_RUNTIME_F128_MATH_LIB}"
)
endif()
-
+
if (WIN32)
- # Do not create a FortranFloat128Math library under Windows, the Flang driver never links it. Instead, add the sources to the main FortranRuntime.lib.
+ # Do not create a FortranFloat128Math library under Windows, the Flang
+ # driver never links it. Instead, add the sources to the main
+ # FortranRuntime.lib.
target_sources(FortranFloat128MathILib INTERFACE ${sources})
target_compile_definitions(FortranFloat128MathILib INTERFACE HAS_QUADMATHLIB)
else ()
diff --git a/FortranRuntime/lib/Testing/CMakeLists.txt b/FortranRuntime/lib/Testing/CMakeLists.txt
index 75b38662c2a0fa..d5caada3fb68e8 100644
--- a/FortranRuntime/lib/Testing/CMakeLists.txt
+++ b/FortranRuntime/lib/Testing/CMakeLists.txt
@@ -17,3 +17,4 @@ add_fortranruntime_library(NonGTestTesting EXCLUDE_FROM_ALL LINK_TO_LLVM
ADDITIONAL_HEADERS
${public_headers}
)
+
diff --git a/FortranRuntime/test/Driver/ctofortran.f90 b/FortranRuntime/test/Driver/ctofortran.f90
index a9cbf166bfe46c..78eac32133b18e 100644
--- a/FortranRuntime/test/Driver/ctofortran.f90
+++ b/FortranRuntime/test/Driver/ctofortran.f90
@@ -1,9 +1,8 @@
+! UNSUPPORTED: system-windows
! RUN: split-file %s %t
! RUN: chmod +x %t/runtest.sh
! RUN: %t/runtest.sh %t %t/ffile.f90 %t/cfile.c %flang | FileCheck %s
-! UNSUPPORTED: system-windows
-
!--- ffile.f90
program fmain
interface
diff --git a/FortranRuntime/unittests/CMakeLists.txt b/FortranRuntime/unittests/CMakeLists.txt
index d9533d853df6d7..3733588b82624f 100644
--- a/FortranRuntime/unittests/CMakeLists.txt
+++ b/FortranRuntime/unittests/CMakeLists.txt
@@ -39,7 +39,6 @@ function(add_flang_unittest_offload_properties target)
PROPERTIES CUDA_RESOLVE_DEVICE_SYMBOLS ON
)
endif()
-
# Enable OpenMP offload during linking. We may need to replace
# LINK_OPTIONS with COMPILE_OPTIONS when there are OpenMP offload
# unittests.
diff --git a/flang/docs/GettingStarted.md b/flang/docs/GettingStarted.md
index 4a6275a3b57730..eb9049ad607570 100644
--- a/flang/docs/GettingStarted.md
+++ b/flang/docs/GettingStarted.md
@@ -197,13 +197,13 @@ Flang runtime can be built for accelerators in experimental mode, i.e.
complete enabling is WIP. CUDA and OpenMP target offload builds
are currently supported.
-#### Building out-of-tree
+#### Building out-of-tree (Runtime-only build)
##### CUDA build
Clang with NVPTX backend and NVCC compilers are supported.
```bash
-cd llvm-project/flang
+cd llvm-project
rm -rf build_flang_runtime
mkdir build_flang_runtime
cd build_flang_runtime
@@ -217,7 +217,7 @@ cmake \
-DCMAKE_CUDA_COMPILER=clang \
-DCMAKE_CUDA_HOST_COMPILER=clang++ \
../runtimes/
-make -j FortranRuntime
+make -j`nprocs` FortranRuntime
```
Note that the used version of `clang` must [support](https://releases.llvm.org/16.0.0/tools/clang/docs/ReleaseNotes.html#cuda-support)
@@ -226,7 +226,7 @@ CUDA toolkit installations, please use `-DCUDAToolkit_ROOT=/some/path`
to specify the compatible version.
```bash
-cd llvm-project/flang
+cd llvm-project
rm -rf build_flang_runtime
mkdir build_flang_runtime
cd build_flang_runtime
@@ -241,7 +241,7 @@ cmake \
-DCMAKE_CUDA_HOST_COMPILER=clang++ \
../runtimes/
-make -j FortranRuntime
+make -j`nprocs` FortranRuntime
```
Note that `nvcc` might limit support to certain
@@ -267,6 +267,7 @@ For example:
-DCMAKE_CXX_COMPILER=clang++ \
-DCMAKE_CUDA_COMPILER=clang \
-DCMAKE_CUDA_HOST_COMPILER=clang++ \
+ ../llvm
```
Or:
@@ -278,15 +279,17 @@ Or:
-DCMAKE_CXX_COMPILER=g++ \
-DCMAKE_CUDA_COMPILER=nvcc \
-DCMAKE_CUDA_HOST_COMPILER=g++ \
+ ../llvm
```
-Normal `make -j check-flang` will work with such CMake configuration.
+Normal `make -j`nprocs` check-flang` will work with such CMake configuration.
+Consider a lower value instead of `nprocs` appropriate to the available RAM.
##### OpenMP target offload build
Only Clang compiler is currently supported.
```bash
-cd llvm-project/flang
+cd llvm-project
rm -rf build_flang_runtime
mkdir build_flang_runtime
cd build_flang_runtime
@@ -299,7 +302,7 @@ cmake \
-DFORTRANRUNTIME_DEVICE_ARCHITECTURES="all" \
../runtimes/
-make -j FortranRuntime
+make -j`nprocs` FortranRuntime
```
The result of the build is a "device-only" library, i.e. the host
diff --git a/flang/docs/ReleaseNotes.md b/flang/docs/ReleaseNotes.md
index f0c956281915f4..80ebbb5481ba50 100644
--- a/flang/docs/ReleaseNotes.md
+++ b/flang/docs/ReleaseNotes.md
@@ -36,6 +36,13 @@ page](https://llvm.org/releases/).
## Build System Changes
+ * The Fortran Runtime library (libFortranRuntime) has been move to a new
+ top-level directory named "FortranRuntime". It now supports the
+ LLVM_ENABLE_RUNTIMES mechanism to build libFortranRuntime for multiple target
+ triples. libFortranRuntime.a will now be emitted into Clang's per-target
+ resource directory (next to libclang_rt) where it is also found by Flang's
+ driver.
+
## New Issues Found
diff --git a/flang/lib/CMakeLists.txt b/flang/lib/CMakeLists.txt
index 0ab7d1c888df96..a7cdb4819d7252 100644
--- a/flang/lib/CMakeLists.txt
+++ b/flang/lib/CMakeLists.txt
@@ -1,9 +1,9 @@
add_subdirectory(Common)
-add_subdirectory(Support)
add_subdirectory(Evaluate)
add_subdirectory(Lower)
add_subdirectory(Parser)
add_subdirectory(Semantics)
+add_subdirectory(Support)
add_subdirectory(Frontend)
add_subdirectory(FrontendTool)
diff --git a/flang/lib/Common/CMakeLists.txt b/flang/lib/Common/CMakeLists.txt
index 73af3bdd589162..f7fdc74a32ec8c 100644
--- a/flang/lib/Common/CMakeLists.txt
+++ b/flang/lib/Common/CMakeLists.txt
@@ -1,4 +1,12 @@
+#===-- lib/Common/CMakeLists.txt ------------------------------------===#
+#
+# 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
+#
+#===------------------------------------------------------------------------===#
+
add_flang_library(FortranCommon
- "${CMAKE_CURRENT_SOURCE_DIR}/../../../FortranRuntime/lib/Common/binary-to-decimal.cpp"
- "${CMAKE_CURRENT_SOURCE_DIR}/../../../FortranRuntime/lib/Common/decimal-to-binary.cpp"
+ "${FORTRANRUNTIME_SOURCE_DIR}/lib/Common/binary-to-decimal.cpp"
+ "${FORTRANRUNTIME_SOURCE_DIR}/lib/Common/decimal-to-binary.cpp"
)
diff --git a/flang/lib/Evaluate/CMakeLists.txt b/flang/lib/Evaluate/CMakeLists.txt
index 5f2e345b7bfb56..2847020adcc3ec 100644
--- a/flang/lib/Evaluate/CMakeLists.txt
+++ b/flang/lib/Evaluate/CMakeLists.txt
@@ -60,8 +60,8 @@ add_flang_library(FortranEvaluate
variable.cpp
LINK_LIBS
- FortranParser
FortranSupport
+ FortranParser
${LIBPGMATH}
${QUADMATHLIB}
diff --git a/flang/lib/Optimizer/Transforms/CMakeLists.txt b/flang/lib/Optimizer/Transforms/CMakeLists.txt
index 35794300dbc6aa..49baf063efe8a3 100644
--- a/flang/lib/Optimizer/Transforms/CMakeLists.txt
+++ b/flang/lib/Optimizer/Transforms/CMakeLists.txt
@@ -43,7 +43,6 @@ add_flang_library(FIRTransforms
FIRDialect
FIRDialectSupport
FIRSupport
- FortranCommon
FortranSupport
HLFIRDialect
MLIRAffineUtils
diff --git a/flang/test/lib/CMakeLists.txt b/flang/test/lib/CMakeLists.txt
index 687b107844c651..fc6ef10fab1f5a 100644
--- a/flang/test/lib/CMakeLists.txt
+++ b/flang/test/lib/CMakeLists.txt
@@ -1,2 +1 @@
-include_directories("${CMAKE_CURRENT_SOURCE_DIR}/../../../FortranRuntime/include")
add_subdirectory(Analysis)
diff --git a/flang/tools/f18/CMakeLists.txt b/flang/tools/f18/CMakeLists.txt
index 5f749a433f05cd..401c7cc2bdef79 100644
--- a/flang/tools/f18/CMakeLists.txt
+++ b/flang/tools/f18/CMakeLists.txt
@@ -6,7 +6,7 @@ set(LLVM_LINK_COMPONENTS
# Define the list of Fortran module files for which it is
# sufficient to generate the module file via -fsyntax-only.
-set(MODULES_WITHOUT_IMPLEMENTATION
+set(MODULES
"__fortran_builtins"
"__fortran_ieee_exceptions"
"__fortran_type_info"
@@ -23,8 +23,6 @@ set(MODULES_WITHOUT_IMPLEMENTATION
"iso_fortran_env_impl"
)
-set(MODULES ${MODULES_WITHOUT_IMPLEMENTATION})
-
# Check if 128-bit float computations can be done via long double.
check_cxx_source_compiles(
"#include <cfloat>
@@ -69,7 +67,7 @@ if (NOT CMAKE_CROSSCOMPILING)
else()
set(depends ${FLANG_INTRINSIC_MODULES_DIR}/__fortran_builtins.mod)
if(${filename} STREQUAL "iso_fortran_env_impl")
- set(sourcepath "${FLANG_SOURCE_DIR}/../FortranRuntime/lib/Runtime/${filename}.f90")
+ set(sourcepath "${FORTRANRUNTIME_SOURCE_DIR}/lib/Runtime/${filename}.f90")
endif()
if(${filename} STREQUAL "iso_fortran_env")
set(depends ${depends} ${FLANG_INTRINSIC_MODULES_DIR}/iso_fortran_env_impl.mod)
diff --git a/flang/unittests/Evaluate/CMakeLists.txt b/flang/unittests/Evaluate/CMakeLists.txt
index a7f763d7b17d85..324195348d045b 100644
--- a/flang/unittests/Evaluate/CMakeLists.txt
+++ b/flang/unittests/Evaluate/CMakeLists.txt
@@ -40,11 +40,11 @@ add_flang_nongtest_unittest(integer
)
add_flang_nongtest_unittest(intrinsics
- FortranSupport
FortranCommon
FortranEvaluateTesting
FortranEvaluate
FortranSemantics
+ FortranSupport
FortranParser
)
@@ -63,7 +63,6 @@ set(LLVM_REQUIRES_RTTI ON)
add_flang_nongtest_unittest(real
FortranEvaluateTesting
FortranEvaluate
- FortranCommon
FortranSupport
FortranSemantics
)
>From 8ba5c8b182bec2b66b82c9a745f07ddc2c1bec59 Mon Sep 17 00:00:00 2001
From: Michael Kruse <llvm-project at meinersbur.de>
Date: Tue, 8 Oct 2024 23:08:07 +0200
Subject: [PATCH 14/32] Compile fix after too aggressive cleanup
---
FortranRuntime/cmake/modules/AddFortranRuntime.cmake | 2 +-
FortranRuntime/lib/Runtime/CMakeLists.txt | 5 +++++
FortranRuntime/unittests/CMakeLists.txt | 3 +--
flang/lib/Evaluate/CMakeLists.txt | 1 +
4 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/FortranRuntime/cmake/modules/AddFortranRuntime.cmake b/FortranRuntime/cmake/modules/AddFortranRuntime.cmake
index 841459e4dbd105..e9563c6e3a60b9 100644
--- a/FortranRuntime/cmake/modules/AddFortranRuntime.cmake
+++ b/FortranRuntime/cmake/modules/AddFortranRuntime.cmake
@@ -68,7 +68,7 @@ function (add_fortranruntime_library name)
target_compile_features(${name} PRIVATE cxx_std_17)
if (LLVM_COMPILER_IS_GCC_COMPATIBLE)
target_compile_options(${name} PRIVATE
- $<$<COMPILE_LANGUAGE:CXX>:-fno-exceptions -fno-rtti -fno-unwind-tables -fno-asynchronous-unwind-tables
+ $<$<COMPILE_LANGUAGE:CXX>:-fno-exceptions -fno-rtti -fno-unwind-tables -fno-asynchronous-unwind-tables>
)
elseif (MSVC)
target_compile_options(${name} PRIVATE
diff --git a/FortranRuntime/lib/Runtime/CMakeLists.txt b/FortranRuntime/lib/Runtime/CMakeLists.txt
index b62556ff4b4e66..2465c9a9ed9bb8 100644
--- a/FortranRuntime/lib/Runtime/CMakeLists.txt
+++ b/FortranRuntime/lib/Runtime/CMakeLists.txt
@@ -90,6 +90,11 @@ file(GLOB_RECURSE private_headers
"${FLANGRUNTIME_SOURCE_DIR}/lib/Common/*.h"
)
+include(AddFlangOffloadRuntime)
+
+enable_cuda_compilation(FortranRuntime "${supported_files}")
+enable_omp_offload_compilation("${supported_files}")
+
get_target_property(f128_sources
FortranFloat128MathILib INTERFACE_SOURCES
)
diff --git a/FortranRuntime/unittests/CMakeLists.txt b/FortranRuntime/unittests/CMakeLists.txt
index 3733588b82624f..b57a0e1292590b 100644
--- a/FortranRuntime/unittests/CMakeLists.txt
+++ b/FortranRuntime/unittests/CMakeLists.txt
@@ -17,8 +17,6 @@ if (NOT TARGET llvm_gtest)
build_gtest()
endif ()
-
-
# Required because LLVMSupport is compiled with this option (by default).
set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreadedDLL)
@@ -92,6 +90,7 @@ function(add_fortranruntime_nongtest_unittest test_name)
if(NOT ARG_SLOW_TEST)
add_dependencies(FortranRuntimeUnitTests ${test_name}${suffix})
endif()
+
add_flang_unittest_offload_properties(${test_name}${suffix})
endfunction()
diff --git a/flang/lib/Evaluate/CMakeLists.txt b/flang/lib/Evaluate/CMakeLists.txt
index 2847020adcc3ec..1408f382255a8b 100644
--- a/flang/lib/Evaluate/CMakeLists.txt
+++ b/flang/lib/Evaluate/CMakeLists.txt
@@ -60,6 +60,7 @@ add_flang_library(FortranEvaluate
variable.cpp
LINK_LIBS
+ FortranCommon
FortranSupport
FortranParser
${LIBPGMATH}
>From 54b516786bd725e5b409d7ee6a4f55fe09a1baa9 Mon Sep 17 00:00:00 2001
From: Michael Kruse <llvm-project at meinersbur.de>
Date: Wed, 9 Oct 2024 09:48:46 +0200
Subject: [PATCH 15/32] CUDA/OpenMP build fix
---
...e.cmake => AddFortranOffloadRuntime.cmake} | 10 ++--
.../include/flang/Common/fast-int-set.h | 6 +-
FortranRuntime/lib/Runtime/CMakeLists.txt | 59 +++++++++++--------
.../lib/Runtime/allocator-registry.cpp | 4 +-
FortranRuntime/lib/Runtime/environment.cpp | 4 +-
FortranRuntime/lib/Runtime/unit.cpp | 4 +-
FortranRuntime/lib/Runtime/utf.cpp | 4 +-
FortranRuntime/test/Runtime/no-cpp-dep.c | 3 +
FortranRuntime/unittests/CMakeLists.txt | 6 +-
.../unittests/Runtime/CMakeLists.txt | 4 ++
.../unittests/Runtime/CUDA/AllocatorCUF.cpp | 2 +-
.../unittests/Runtime/CUDA/CMakeLists.txt | 19 ++++++
llvm/runtimes/CMakeLists.txt | 1 +
13 files changed, 82 insertions(+), 44 deletions(-)
rename FortranRuntime/cmake/modules/{AddFlangOffloadRuntime.cmake => AddFortranOffloadRuntime.cmake} (93%)
create mode 100644 FortranRuntime/unittests/Runtime/CUDA/CMakeLists.txt
diff --git a/FortranRuntime/cmake/modules/AddFlangOffloadRuntime.cmake b/FortranRuntime/cmake/modules/AddFortranOffloadRuntime.cmake
similarity index 93%
rename from FortranRuntime/cmake/modules/AddFlangOffloadRuntime.cmake
rename to FortranRuntime/cmake/modules/AddFortranOffloadRuntime.cmake
index 8cfd02267dfdca..d60a26ce0f8a86 100644
--- a/FortranRuntime/cmake/modules/AddFlangOffloadRuntime.cmake
+++ b/FortranRuntime/cmake/modules/AddFortranOffloadRuntime.cmake
@@ -1,4 +1,4 @@
-#===-- cmake/modules/AddFlangOffloadRuntime.txt ----------------------------===#
+#===-- cmake/modules/AddFortranOffloadRuntime.txt --------------------------===#
#
# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
# See https://llvm.org/LICENSE.txt for license information.
@@ -50,11 +50,11 @@ macro(enable_cuda_compilation name files)
endif()
# Add an OBJECT library consisting of CUDA PTX.
- llvm_add_library(${name}PTX OBJECT PARTIAL_SOURCES_INTENDED ${files})
- set_property(TARGET obj.${name}PTX PROPERTY CUDA_PTX_COMPILATION ON)
+ add_fortranruntime_library(${name}PTX OBJECT ${files})
+ set_property(TARGET ${name}PTX PROPERTY CUDA_PTX_COMPILATION ON)
if (FORTRANRUNTIME_CUDA_RUNTIME_PTX_WITHOUT_GLOBAL_VARS)
- target_compile_definitions(obj.${name}PTX
- PRIVATE FLANG_RUNTIME_NO_GLOBAL_VAR_DEFS
+ target_compile_definitions(${name}PTX
+ PRIVATE FORTRANRUNTIME_NO_GLOBAL_VAR_DEFS
)
endif()
endif()
diff --git a/FortranRuntime/include/flang/Common/fast-int-set.h b/FortranRuntime/include/flang/Common/fast-int-set.h
index 323ee4dc7e94d9..fe3f1632060b50 100644
--- a/FortranRuntime/include/flang/Common/fast-int-set.h
+++ b/FortranRuntime/include/flang/Common/fast-int-set.h
@@ -24,7 +24,7 @@
#ifndef FORTRAN_COMMON_FAST_INT_SET_H_
#define FORTRAN_COMMON_FAST_INT_SET_H_
-#include <optional>
+#include "flang/Common/optional.h"
namespace Fortran::common {
@@ -83,9 +83,9 @@ template <int N> class FastIntSet {
}
}
- std::optional<int> PopValue() {
+ optional<int> PopValue() {
if (IsEmpty()) {
- return std::nullopt;
+ return nullopt;
} else {
return value_[--size_];
}
diff --git a/FortranRuntime/lib/Runtime/CMakeLists.txt b/FortranRuntime/lib/Runtime/CMakeLists.txt
index 2465c9a9ed9bb8..678edde7947eb6 100644
--- a/FortranRuntime/lib/Runtime/CMakeLists.txt
+++ b/FortranRuntime/lib/Runtime/CMakeLists.txt
@@ -6,9 +6,10 @@
#
#===------------------------------------------------------------------------===#
-add_subdirectory(Float128Math)
+include(AddFortranOffloadRuntime)
-set(sources
+# List of files that are buildable for all devices.
+set(supported_sources
../Common/binary-to-decimal.cpp
../Common/decimal-to-binary.cpp
ISO_Fortran_binding.cpp
@@ -18,9 +19,6 @@ set(sources
assign.cpp
buffer.cpp
character.cpp
- command.cpp
- complex-powi.cpp
- complex-reduction.c
connection.cpp
copy.cpp
derived-api.cpp
@@ -31,9 +29,6 @@ set(sources
edit-input.cpp
edit-output.cpp
environment.cpp
- exceptions.cpp
- execute.cpp
- extensions.cpp
external-unit.cpp
extrema.cpp
file.cpp
@@ -45,9 +40,7 @@ set(sources
io-api-minimal.cpp
io-error.cpp
io-stmt.cpp
- iso_fortran_env_impl.f90
iostat.cpp
- main.cpp
matmul-transpose.cpp
matmul.cpp
memory.cpp
@@ -59,41 +52,49 @@ set(sources
product.cpp
pseudo-unit.cpp
ragged.cpp
- random.cpp
- reduce.cpp
- reduction.cpp
stat.cpp
- stop.cpp
sum.cpp
support.cpp
- temporary-stack.cpp
terminator.cpp
- time-intrinsic.cpp
tools.cpp
transformational.cpp
type-code.cpp
type-info.cpp
- unit-map.cpp
unit.cpp
+ unit-map.cpp
utf.cpp
)
-set(public_headers "")
+# List of source not used for GPU offloading.
+set(host_sources
+ command.cpp
+ complex-powi.cpp
+ complex-reduction.c
+ exceptions.cpp
+ execute.cpp
+ extensions.cpp
+ iso_fortran_env_impl.f90
+ main.cpp
+ random.cpp
+ reduce.cpp
+ reduction.cpp
+ stop.cpp
+ temporary-stack.cpp
+ time-intrinsic.cpp
+)
+
file(GLOB_RECURSE public_headers
"${FLANGRUNTIME_SOURCE_DIR}/include/flang/Runtime/*.h"
"${FLANGRUNTIME_SOURCE_DIR}/include/flang/Common/*.h"
)
-set(private_headers "")
file(GLOB_RECURSE private_headers
"${FLANGRUNTIME_SOURCE_DIR}/lib/Runtime/*.h"
"${FLANGRUNTIME_SOURCE_DIR}/lib/Common/*.h"
)
-include(AddFlangOffloadRuntime)
-enable_cuda_compilation(FortranRuntime "${supported_files}")
-enable_omp_offload_compilation("${supported_files}")
+add_subdirectory(Float128Math)
get_target_property(f128_sources
FortranFloat128MathILib INTERFACE_SOURCES
@@ -108,8 +109,12 @@ if (f128_sources)
APPEND PROPERTY COMPILE_DEFINITIONS
${f128_defs}
)
- list(APPEND sources ${f128_sources})
-endif()
+else ()
+ set(f128_sources "")
+endif ()
+
+
+set(sources ${supported_sources} ${host_sources} ${f128_sources})
if (NOT WIN32)
add_fortranruntime_library(FortranRuntime STATIC
@@ -118,6 +123,9 @@ if (NOT WIN32)
ADDITIONAL_HEADERS ${public_headers} ${private_headers}
)
+ enable_cuda_compilation(FortranRuntime "${supported_sources}")
+ enable_omp_offload_compilation("${supported_sources}")
+
# For unittests that link to FortranRuntime. Should link to the static version
# of the library.
add_library(FortranRuntime.static ALIAS FortranRuntime)
@@ -139,6 +147,9 @@ else()
MSVC_RUNTIME_LIBRARY ${msvc_lib}
Fortran_MODULE_DIRECTORY "module.${suffix}"
)
+
+ enable_cuda_compilation(FortranRuntime "${supported_sources}")
+ enable_omp_offload_compilation("${supported_sources}")
endfunction ()
add_win_fortranruntime_library(STATIC static MultiThreaded)
diff --git a/FortranRuntime/lib/Runtime/allocator-registry.cpp b/FortranRuntime/lib/Runtime/allocator-registry.cpp
index 68fb8b80680558..edd3685e83a820 100644
--- a/FortranRuntime/lib/Runtime/allocator-registry.cpp
+++ b/FortranRuntime/lib/Runtime/allocator-registry.cpp
@@ -11,11 +11,11 @@
namespace Fortran::runtime {
-#ifndef FLANG_RUNTIME_NO_GLOBAL_VAR_DEFS
+#ifndef FORTRANRUNTIME_NO_GLOBAL_VAR_DEFS
RT_OFFLOAD_VAR_GROUP_BEGIN
RT_VAR_ATTRS AllocatorRegistry allocatorRegistry;
RT_OFFLOAD_VAR_GROUP_END
-#endif // FLANG_RUNTIME_NO_GLOBAL_VAR_DEFS
+#endif // FORTRANRUNTIME_NO_GLOBAL_VAR_DEFS
RT_OFFLOAD_API_GROUP_BEGIN
RT_API_ATTRS void AllocatorRegistry::Register(int pos, Allocator_t allocator) {
diff --git a/FortranRuntime/lib/Runtime/environment.cpp b/FortranRuntime/lib/Runtime/environment.cpp
index 272914877988a5..9cbb198dd9141c 100644
--- a/FortranRuntime/lib/Runtime/environment.cpp
+++ b/FortranRuntime/lib/Runtime/environment.cpp
@@ -23,11 +23,11 @@ extern char **environ;
namespace Fortran::runtime {
-#ifndef FLANG_RUNTIME_NO_GLOBAL_VAR_DEFS
+#ifndef FORTRANRUNTIME_NO_GLOBAL_VAR_DEFS
RT_OFFLOAD_VAR_GROUP_BEGIN
RT_VAR_ATTRS ExecutionEnvironment executionEnvironment;
RT_OFFLOAD_VAR_GROUP_END
-#endif // FLANG_RUNTIME_NO_GLOBAL_VAR_DEFS
+#endif // FORTRANRUNTIME_NO_GLOBAL_VAR_DEFS
static void SetEnvironmentDefaults(const EnvironmentDefaultList *envDefaults) {
if (!envDefaults) {
diff --git a/FortranRuntime/lib/Runtime/unit.cpp b/FortranRuntime/lib/Runtime/unit.cpp
index 496679ee8ce5f4..f6e4dc2a7befd4 100644
--- a/FortranRuntime/lib/Runtime/unit.cpp
+++ b/FortranRuntime/lib/Runtime/unit.cpp
@@ -19,13 +19,13 @@
namespace Fortran::runtime::io {
-#ifndef FLANG_RUNTIME_NO_GLOBAL_VAR_DEFS
+#ifndef FORTRANRUNTIME_NO_GLOBAL_VAR_DEFS
RT_OFFLOAD_VAR_GROUP_BEGIN
RT_VAR_ATTRS ExternalFileUnit *defaultInput{nullptr}; // unit 5
RT_VAR_ATTRS ExternalFileUnit *defaultOutput{nullptr}; // unit 6
RT_VAR_ATTRS ExternalFileUnit *errorOutput{nullptr}; // unit 0 extension
RT_OFFLOAD_VAR_GROUP_END
-#endif // FLANG_RUNTIME_NO_GLOBAL_VAR_DEFS
+#endif // FORTRANRUNTIME_NO_GLOBAL_VAR_DEFS
RT_OFFLOAD_API_GROUP_BEGIN
diff --git a/FortranRuntime/lib/Runtime/utf.cpp b/FortranRuntime/lib/Runtime/utf.cpp
index 635451153d39a6..d2839f9cf3793a 100644
--- a/FortranRuntime/lib/Runtime/utf.cpp
+++ b/FortranRuntime/lib/Runtime/utf.cpp
@@ -10,7 +10,7 @@
namespace Fortran::runtime {
-#ifndef FLANG_RUNTIME_NO_GLOBAL_VAR_DEFS
+#ifndef FORTRANRUNTIME_NO_GLOBAL_VAR_DEFS
// clang-format off
RT_OFFLOAD_VAR_GROUP_BEGIN
const RT_CONST_VAR_ATTRS std::uint8_t UTF8FirstByteTable[256]{
@@ -41,7 +41,7 @@ const RT_CONST_VAR_ATTRS std::uint8_t UTF8FirstByteTable[256]{
};
RT_OFFLOAD_VAR_GROUP_END
// clang-format on
-#endif // FLANG_RUNTIME_NO_GLOBAL_VAR_DEFS
+#endif // FORTRANRUNTIME_NO_GLOBAL_VAR_DEFS
RT_OFFLOAD_API_GROUP_BEGIN
diff --git a/FortranRuntime/test/Runtime/no-cpp-dep.c b/FortranRuntime/test/Runtime/no-cpp-dep.c
index f68f2b2cf3b475..2cc5669a60d3a2 100644
--- a/FortranRuntime/test/Runtime/no-cpp-dep.c
+++ b/FortranRuntime/test/Runtime/no-cpp-dep.c
@@ -5,6 +5,9 @@ a C compiler.
UNSUPPORTED: system-windows
+FIXME: This currently fails with CUDA-enabled FortranRuntime because it needs
+ to link libcuda_rt.
+
RUN: %if system-aix %{ export OBJECT_MODE=64 %}
RUN: %cc -std=c99 %s -I%include %libruntime -lm \
RUN: %if system-aix %{-lpthread %}
diff --git a/FortranRuntime/unittests/CMakeLists.txt b/FortranRuntime/unittests/CMakeLists.txt
index b57a0e1292590b..1bb788651a8d33 100644
--- a/FortranRuntime/unittests/CMakeLists.txt
+++ b/FortranRuntime/unittests/CMakeLists.txt
@@ -30,7 +30,7 @@ add_custom_target(FortranRuntimeUnitTests)
set_target_properties(FortranRuntimeUnitTests PROPERTIES FOLDER "Fortran Runtime/Meta")
-function(add_flang_unittest_offload_properties target)
+function(add_fortranruntime_unittest_offload_properties target)
# Set CUDA_RESOLVE_DEVICE_SYMBOLS.
if (FORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT STREQUAL "CUDA")
set_target_properties(${target}
@@ -64,7 +64,7 @@ function(add_fortranruntime_unittest test_dirname)
target_include_directories(${test_dirname} PRIVATE "${FORTRANRUNTIME_SOURCE_DIR}/include")
target_include_directories(${test_dirname} PRIVATE "${FLANG_SOURCE_DIR}/include")
target_link_libraries(${test_dirname} PRIVATE ${ARG_LINK_LIBS})
- add_flang_unittest_offload_properties(${test_dirname})
+ add_fortranruntime_unittest_offload_properties(${test_dirname})
endfunction()
function(add_fortranruntime_nongtest_unittest test_name)
@@ -91,7 +91,7 @@ function(add_fortranruntime_nongtest_unittest test_name)
add_dependencies(FortranRuntimeUnitTests ${test_name}${suffix})
endif()
- add_flang_unittest_offload_properties(${test_name}${suffix})
+ add_fortranruntime_unittest_offload_properties(${test_name}${suffix})
endfunction()
add_subdirectory(Common)
diff --git a/FortranRuntime/unittests/Runtime/CMakeLists.txt b/FortranRuntime/unittests/Runtime/CMakeLists.txt
index b4c0d7f86c1878..e4439dcc8b3c7e 100644
--- a/FortranRuntime/unittests/Runtime/CMakeLists.txt
+++ b/FortranRuntime/unittests/Runtime/CMakeLists.txt
@@ -40,3 +40,7 @@ add_fortranruntime_unittest(FlangRuntimeTests
LINK_LIBS
FortranRuntime.unittest
)
+
+if (FORTRANRUNTIME_ENABLE_CUF)
+ add_subdirectory(CUDA)
+endif ()
diff --git a/FortranRuntime/unittests/Runtime/CUDA/AllocatorCUF.cpp b/FortranRuntime/unittests/Runtime/CUDA/AllocatorCUF.cpp
index d2c1600af8c631..bb1ea411cb7760 100644
--- a/FortranRuntime/unittests/Runtime/CUDA/AllocatorCUF.cpp
+++ b/FortranRuntime/unittests/Runtime/CUDA/AllocatorCUF.cpp
@@ -6,7 +6,7 @@
//
//===----------------------------------------------------------------------===//
-#include "../../../runtime/terminator.h"
+#include "../../../lib/Runtime/terminator.h"
#include "flang/Runtime/CUDA/allocator.h"
#include "flang/Runtime/CUDA/descriptor.h"
#include "flang/Runtime/allocatable.h"
diff --git a/FortranRuntime/unittests/Runtime/CUDA/CMakeLists.txt b/FortranRuntime/unittests/Runtime/CUDA/CMakeLists.txt
new file mode 100644
index 00000000000000..04321e65d733ad
--- /dev/null
+++ b/FortranRuntime/unittests/Runtime/CUDA/CMakeLists.txt
@@ -0,0 +1,19 @@
+#===-- unittests/Runtime/CUDA/CMakeLists.txt -------------------------------===#
+#
+# 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
+#
+#===------------------------------------------------------------------------===#
+
+add_fortranruntime_unittest(FlangCufRuntimeTests
+ AllocatorCUF.cpp
+)
+
+target_link_libraries(FlangCufRuntimeTests
+ PRIVATE
+ CufRuntime_cuda_${CUDAToolkit_VERSION_MAJOR}
+ FortranRuntime
+)
+
+target_include_directories(FlangCufRuntimeTests PRIVATE ${CUDAToolkit_INCLUDE_DIRS})
diff --git a/llvm/runtimes/CMakeLists.txt b/llvm/runtimes/CMakeLists.txt
index 4ee7c390f8ecd3..d589a809578035 100644
--- a/llvm/runtimes/CMakeLists.txt
+++ b/llvm/runtimes/CMakeLists.txt
@@ -474,6 +474,7 @@ if(build_runtimes)
if(LLVM_INCLUDE_TESTS)
foreach(dep FileCheck
clang
+ clang-offload-packager
flang-new
count
lld
>From 9f37b91f7843f2808e9e53df02d2cfa15a6355c4 Mon Sep 17 00:00:00 2001
From: Michael Kruse <llvm-project at meinersbur.de>
Date: Wed, 9 Oct 2024 11:12:53 +0200
Subject: [PATCH 16/32] Do not compile former libDecimal for devices
---
FortranRuntime/lib/Runtime/CMakeLists.txt | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/FortranRuntime/lib/Runtime/CMakeLists.txt b/FortranRuntime/lib/Runtime/CMakeLists.txt
index 678edde7947eb6..1b8944d7641fab 100644
--- a/FortranRuntime/lib/Runtime/CMakeLists.txt
+++ b/FortranRuntime/lib/Runtime/CMakeLists.txt
@@ -10,8 +10,6 @@ include(AddFortranOffloadRuntime)
# List of files that are buildable for all devices.
set(supported_sources
- ../Common/binary-to-decimal.cpp
- ../Common/decimal-to-binary.cpp
ISO_Fortran_binding.cpp
allocator-registry.cpp
allocatable.cpp
@@ -67,6 +65,8 @@ set(supported_sources
# List of source not used for GPU offloading.
set(host_sources
+ ../Common/binary-to-decimal.cpp
+ ../Common/decimal-to-binary.cpp
command.cpp
complex-powi.cpp
complex-reduction.c
>From 7123f2cc4d0d70e8e90871323b7901ad7380cc8c Mon Sep 17 00:00:00 2001
From: Michael Kruse <llvm-project at meinersbur.de>
Date: Fri, 11 Oct 2024 00:29:35 +0200
Subject: [PATCH 17/32] Undo leftover change of moving module_files to
FortranRuntime
---
llvm/runtimes/CMakeLists.txt | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/llvm/runtimes/CMakeLists.txt b/llvm/runtimes/CMakeLists.txt
index d589a809578035..80f1cf5d6b6ea6 100644
--- a/llvm/runtimes/CMakeLists.txt
+++ b/llvm/runtimes/CMakeLists.txt
@@ -513,9 +513,17 @@ if(build_runtimes)
endif()
if("openmp" IN_LIST LLVM_ENABLE_RUNTIMES)
- if (LLVM_TOOL_FLANG_BUILD AND "FortranRuntime" IN_LIST LLVM_ENABLE_PROJECTS)
- set(enable_fortran ENABLE_FORTRAN)
- endif ()
+ if (${LLVM_TOOL_FLANG_BUILD})
+ message(STATUS "Configuring build of omp_lib.mod and omp_lib_kinds.mod via flang-new")
+ set(LIBOMP_FORTRAN_MODULES_COMPILER "${CMAKE_BINARY_DIR}/bin/flang-new")
+ set(LIBOMP_MODULES_INSTALL_PATH "${CMAKE_INSTALL_INCLUDEDIR}/flang")
+ # TODO: This is a workaround until flang becomes a first-class project
+ # in llvm/CMakeList.txt. Until then, this line ensures that flang-new is
+ # built before "openmp" is built as a runtime project. Besides "flang-new"
+ # to build the compiler, we also need to add "module_files" to make sure
+ # that all .mod files are also properly build.
+ list(APPEND extra_deps "flang-new" "module_files")
+ endif()
foreach(dep opt llvm-link llvm-extract clang clang-offload-packager)
if(TARGET ${dep})
list(APPEND extra_deps ${dep})
>From cc21ca919551164acb87553f35ec76a00b095605 Mon Sep 17 00:00:00 2001
From: Michael Kruse <llvm-project at meinersbur.de>
Date: Tue, 15 Oct 2024 14:24:49 +0200
Subject: [PATCH 18/32] Merge 'keep common files in flang/'
---
FortranRuntime/cmake/config.h.cmake.in | 14 +--
.../Runtime/allocator-registry.h | 11 +-
.../Runtime/array-constructor.h | 48 +++++++
.../Runtime/descriptor.h | 22 +---
.../FortranRuntime/Runtime/io-api-funcs.h | 39 ++++++
.../FortranRuntime/Runtime/iostat-funcs.h | 23 ++++
.../Runtime/memory.h | 2 +-
.../Runtime/type-code.h | 2 +-
.../include/flang/Runtime/array-constructor.h | 118 ------------------
FortranRuntime/lib/Runtime/CMakeLists.txt | 4 +-
FortranRuntime/lib/Runtime/CUDA/allocator.cpp | 6 +-
.../lib/Runtime/CUDA/descriptor.cpp | 4 +-
.../lib/Runtime/Float128Math/math-entries.h | 4 +-
.../lib/Runtime/ISO_Fortran_binding.cpp | 6 +-
FortranRuntime/lib/Runtime/ISO_Fortran_util.h | 6 +-
FortranRuntime/lib/Runtime/allocatable.cpp | 10 +-
.../lib/Runtime/allocator-registry.cpp | 6 +-
.../lib/Runtime/array-constructor.cpp | 8 +-
FortranRuntime/lib/Runtime/assign.cpp | 2 +-
FortranRuntime/lib/Runtime/buffer.h | 4 +-
FortranRuntime/lib/Runtime/character.cpp | 6 +-
FortranRuntime/lib/Runtime/command.cpp | 2 +-
FortranRuntime/lib/Runtime/connection.h | 2 +-
FortranRuntime/lib/Runtime/copy.cpp | 4 +-
FortranRuntime/lib/Runtime/copy.h | 2 +-
FortranRuntime/lib/Runtime/derived-api.cpp | 2 +-
FortranRuntime/lib/Runtime/derived.cpp | 2 +-
FortranRuntime/lib/Runtime/descriptor-io.h | 8 +-
FortranRuntime/lib/Runtime/descriptor.cpp | 10 +-
FortranRuntime/lib/Runtime/dot-product.cpp | 8 +-
FortranRuntime/lib/Runtime/edit-input.cpp | 4 +-
FortranRuntime/lib/Runtime/edit-input.h | 2 +-
FortranRuntime/lib/Runtime/edit-output.cpp | 2 +-
FortranRuntime/lib/Runtime/edit-output.h | 4 +-
FortranRuntime/lib/Runtime/environment.cpp | 4 +-
FortranRuntime/lib/Runtime/execute.cpp | 2 +-
FortranRuntime/lib/Runtime/extensions.cpp | 8 +-
FortranRuntime/lib/Runtime/extrema.cpp | 2 +-
FortranRuntime/lib/Runtime/file.cpp | 4 +-
FortranRuntime/lib/Runtime/file.h | 4 +-
FortranRuntime/lib/Runtime/findloc.cpp | 2 +-
.../lib/Runtime/format-implementation.h | 6 +-
FortranRuntime/lib/Runtime/format.h | 2 +-
FortranRuntime/lib/Runtime/inquiry.cpp | 2 +-
FortranRuntime/lib/Runtime/internal-unit.cpp | 6 +-
FortranRuntime/lib/Runtime/internal-unit.h | 2 +-
FortranRuntime/lib/Runtime/io-api-common.h | 6 +-
FortranRuntime/lib/Runtime/io-api-minimal.cpp | 2 +-
FortranRuntime/lib/Runtime/io-api.cpp | 8 +-
FortranRuntime/lib/Runtime/io-error.cpp | 2 +-
FortranRuntime/lib/Runtime/io-error.h | 4 +-
FortranRuntime/lib/Runtime/io-stmt.cpp | 2 +-
FortranRuntime/lib/Runtime/io-stmt.h | 10 +-
FortranRuntime/lib/Runtime/iostat.cpp | 2 +-
.../lib/Runtime/matmul-transpose.cpp | 6 +-
FortranRuntime/lib/Runtime/matmul.cpp | 6 +-
FortranRuntime/lib/Runtime/memory.cpp | 4 +-
FortranRuntime/lib/Runtime/misc-intrinsic.cpp | 4 +-
FortranRuntime/lib/Runtime/namelist.cpp | 2 +-
FortranRuntime/lib/Runtime/namelist.h | 2 +-
.../lib/Runtime/numeric-templates.h | 4 +-
FortranRuntime/lib/Runtime/numeric.cpp | 2 +-
FortranRuntime/lib/Runtime/product.cpp | 2 +-
FortranRuntime/lib/Runtime/random-templates.h | 4 +-
FortranRuntime/lib/Runtime/random.cpp | 8 +-
FortranRuntime/lib/Runtime/reduce.cpp | 2 +-
.../lib/Runtime/reduction-templates.h | 4 +-
FortranRuntime/lib/Runtime/reduction.cpp | 2 +-
FortranRuntime/lib/Runtime/stack.h | 2 +-
FortranRuntime/lib/Runtime/stat.cpp | 2 +-
FortranRuntime/lib/Runtime/stat.h | 2 +-
FortranRuntime/lib/Runtime/sum.cpp | 2 +-
FortranRuntime/lib/Runtime/support.cpp | 2 +-
.../lib/Runtime/temporary-stack.cpp | 6 +-
FortranRuntime/lib/Runtime/time-intrinsic.cpp | 4 +-
FortranRuntime/lib/Runtime/tools.h | 8 +-
.../lib/Runtime/transformational.cpp | 4 +-
FortranRuntime/lib/Runtime/type-code.cpp | 2 +-
FortranRuntime/lib/Runtime/type-info.cpp | 10 +-
FortranRuntime/lib/Runtime/type-info.h | 4 +-
FortranRuntime/lib/Runtime/unit-map.h | 4 +-
FortranRuntime/lib/Runtime/unit.cpp | 4 +-
FortranRuntime/lib/Runtime/unit.h | 6 +-
FortranRuntime/lib/Runtime/utf.cpp | 4 +-
FortranRuntime/lib/Testing/CMakeLists.txt | 7 +-
FortranRuntime/test/lit.cfg.py | 2 +-
FortranRuntime/test/lit.site.cfg.py.in | 1 +
FortranRuntime/unittests/CMakeLists.txt | 2 -
.../unittests/Evaluate/CMakeLists.txt | 4 +-
.../Evaluate/ISO-Fortran-binding.cpp | 5 +-
FortranRuntime/unittests/Evaluate/reshape.cpp | 2 +-
.../unittests/Runtime/AccessTest.cpp | 2 +-
.../unittests/Runtime/Allocatable.cpp | 2 +-
.../unittests/Runtime/ArrayConstructor.cpp | 10 +-
.../unittests/Runtime/CUDA/AllocatorCUF.cpp | 12 +-
.../unittests/Runtime/CharacterTest.cpp | 2 +-
.../unittests/Runtime/CommandTest.cpp | 6 +-
FortranRuntime/unittests/Runtime/Derived.cpp | 6 +-
.../unittests/Runtime/ExternalIOTest.cpp | 6 +-
FortranRuntime/unittests/Runtime/Inquiry.cpp | 4 +-
.../unittests/Runtime/ListInputTest.cpp | 6 +-
.../unittests/Runtime/LogicalFormatTest.cpp | 4 +-
FortranRuntime/unittests/Runtime/Matmul.cpp | 8 +-
.../unittests/Runtime/MatmulTranspose.cpp | 8 +-
.../unittests/Runtime/MiscIntrinsic.cpp | 8 +-
FortranRuntime/unittests/Runtime/Namelist.cpp | 4 +-
FortranRuntime/unittests/Runtime/Numeric.cpp | 2 +-
.../unittests/Runtime/NumericalFormatTest.cpp | 4 +-
FortranRuntime/unittests/Runtime/Pointer.cpp | 4 +-
FortranRuntime/unittests/Runtime/Random.cpp | 6 +-
.../unittests/Runtime/Reduction.cpp | 8 +-
.../unittests/Runtime/RuntimeCrashTest.cpp | 4 +-
FortranRuntime/unittests/Runtime/Stop.cpp | 2 +-
FortranRuntime/unittests/Runtime/Support.cpp | 4 +-
.../unittests/Runtime/TemporaryStack.cpp | 8 +-
FortranRuntime/unittests/Runtime/Time.cpp | 2 +-
.../unittests/Runtime/Transformational.cpp | 6 +-
FortranRuntime/unittests/Runtime/tools.h | 6 +-
.../include/flang/Common/Fortran-consts.h | 0
.../Common/ISO_Fortran_binding_wrapper.h | 2 +-
flang/include/flang/Common/README.md | 25 ++++
.../include/flang/Common/api-attrs.h | 11 +-
.../flang/Common/binary-floating-point.h | 0
.../flang/Common/bit-population-count.h | 2 +-
.../include/flang/Common/constexpr-bitset.h | 2 +-
.../include/flang/Common/decimal.h | 0
.../include/flang/Common/enum-class.h | 2 +-
.../include/flang/Common/enum-set.h | 2 +-
.../include/flang/Common/fast-int-set.h | 10 +-
.../include/flang/Common/float128.h | 2 +-
.../include/flang/Common/format.h | 2 +-
.../include/flang/Common/idioms.h | 2 +-
.../flang/Common/leading-zero-bit-count.h | 2 +-
.../include/flang/Common/optional.h | 6 +-
.../include/flang/Common/real.h | 2 +-
.../include/flang/Common/reference-wrapper.h | 6 +-
.../include/flang/Common/restorer.h | 4 +-
.../include/flang/Common/target-rounding.h | 0
.../include/flang/Common/uint128.h | 4 +-
.../include/flang/Common/variant.h | 6 +-
.../include/flang/Common/visit.h | 4 +-
.../include/flang/Common/windows-include.h | 2 +-
flang/include/flang/ISO_Fortran_binding.h | 2 +-
flang/include/flang/Lower/Allocatable.h | 2 +-
.../flang/Optimizer/Builder/IntrinsicCall.h | 1 -
.../flang/Optimizer/Builder/MutableBox.h | 2 +-
.../flang/Optimizer/CodeGen/DescriptorModel.h | 2 +-
.../include/flang/Runtime/CUDA/allocator.h | 4 +-
.../include/flang/Runtime/CUDA/descriptor.h | 4 +-
flang/include/flang/Runtime/README.md | 27 ++++
.../include/flang/Runtime/allocatable.h | 7 +-
.../flang/Runtime/allocator-registry-consts.h | 20 +++
.../flang/Runtime/array-constructor-consts.h | 54 ++++++++
.../include/flang/Runtime/assign.h | 2 +-
.../include/flang/Runtime/c-or-cpp.h | 2 +-
.../include/flang/Runtime/character.h | 2 +-
.../include/flang/Runtime/command.h | 2 +-
.../include/flang/Runtime/cpp-type.h | 2 +-
.../include/flang/Runtime/derived-api.h | 2 +-
.../include/flang/Runtime/descriptor-consts.h | 73 +++++++++++
.../include/flang/Runtime/entry-names.h | 11 +-
.../include/flang/Runtime/exceptions.h | 4 +-
.../include/flang/Runtime/execute.h | 4 +-
.../include/flang/Runtime/extensions.h | 2 +-
.../flang/Runtime/freestanding-tools.h | 2 +-
.../include/flang/Runtime/inquiry.h | 4 +-
.../include/flang/Runtime/io-api.h | 7 +-
.../include/flang/Runtime/iostat.h | 6 +-
.../include/flang/Runtime}/magic-numbers.h | 6 +-
.../include/flang/Runtime/main.h | 2 +-
.../flang/Runtime/matmul-instances.inc | 0
.../include/flang/Runtime/matmul-transpose.h | 2 +-
.../include/flang/Runtime/matmul.h | 2 +-
.../include/flang/Runtime/misc-intrinsic.h | 2 +-
.../include/flang/Runtime/numeric.h | 2 +-
.../include/flang/Runtime/pointer.h | 6 +-
.../include/flang/Runtime/ragged.h | 4 +-
.../include/flang/Runtime/random.h | 0
.../include/flang/Runtime/reduce.h | 2 +-
.../include/flang/Runtime/reduction.h | 2 +-
.../include/flang/Runtime/stop.h | 2 +-
.../include/flang/Runtime/support.h | 2 +-
.../include/flang/Runtime/temporary-stack.h | 2 +-
.../include/flang/Runtime/time-intrinsic.h | 2 +-
.../include/flang/Runtime/transformational.h | 2 +-
.../include/flang/Support/Fortran-features.h | 6 +-
flang/include/flang/Support/Fortran.h | 8 +-
flang/include/flang/Support/MathOptionsBase.h | 6 +-
flang/include/flang/Support/Version.h | 6 +-
flang/include/flang/Support/default-kinds.h | 6 +-
flang/include/flang/Support/indirection.h | 6 +-
flang/include/flang/Support/interval.h | 6 +-
flang/include/flang/Support/template.h | 6 +-
flang/include/flang/Support/unwrap.h | 6 +-
flang/include/flang/Testing/README.md | 25 ++++
.../include/flang/Testing/fp-testing.h | 0
.../include/flang/Testing/testing.h | 0
flang/lib/Common/CMakeLists.txt | 6 +-
flang/lib/Common/README.md | 25 ++++
.../lib/Common/big-radix-floating-point.h | 0
.../lib/Common/binary-to-decimal.cpp | 0
.../lib/Common/decimal-to-binary.cpp | 0
flang/lib/Evaluate/fold-logical.cpp | 2 +-
flang/lib/Lower/ConvertVariable.cpp | 2 +-
.../Builder/Runtime/ArrayConstructor.cpp | 6 +-
flang/lib/Optimizer/CodeGen/CodeGen.cpp | 18 ++-
flang/lib/Semantics/compute-offsets.cpp | 8 +-
flang/lib/Testing/CMakeLists.txt | 20 +++
flang/lib/Testing/README.md | 25 ++++
.../lib/Testing/fp-testing.cpp | 0
.../lib/Testing/testing.cpp | 0
flang/module/__fortran_builtins.f90 | 2 +-
flang/module/__fortran_ieee_exceptions.f90 | 2 +-
flang/module/ieee_arithmetic.f90 | 2 +-
flang/module/iso_fortran_env.f90 | 2 +-
.../unittests/Common/CMakeLists.txt | 0
.../unittests/Common/FastIntSetTest.cpp | 4 +-
.../unittests/Decimal/CMakeLists.txt | 0
.../unittests/Decimal/quick-sanity-test.cpp | 8 --
.../unittests/Decimal/thorough-test.cpp | 8 --
flang/unittests/Evaluate/CMakeLists.txt | 4 +-
.../Builder/Runtime/AllocatableTest.cpp | 2 +-
222 files changed, 823 insertions(+), 554 deletions(-)
rename FortranRuntime/include/{flang => FortranRuntime}/Runtime/allocator-registry.h (82%)
create mode 100644 FortranRuntime/include/FortranRuntime/Runtime/array-constructor.h
rename FortranRuntime/include/{flang => FortranRuntime}/Runtime/descriptor.h (96%)
create mode 100644 FortranRuntime/include/FortranRuntime/Runtime/io-api-funcs.h
create mode 100644 FortranRuntime/include/FortranRuntime/Runtime/iostat-funcs.h
rename FortranRuntime/include/{flang => FortranRuntime}/Runtime/memory.h (98%)
rename FortranRuntime/include/{flang => FortranRuntime}/Runtime/type-code.h (97%)
delete mode 100644 FortranRuntime/include/flang/Runtime/array-constructor.h
rename {FortranRuntime => flang}/include/flang/Common/Fortran-consts.h (100%)
rename {FortranRuntime => flang}/include/flang/Common/ISO_Fortran_binding_wrapper.h (97%)
create mode 100644 flang/include/flang/Common/README.md
rename {FortranRuntime => flang}/include/flang/Common/api-attrs.h (97%)
rename {FortranRuntime => flang}/include/flang/Common/binary-floating-point.h (100%)
rename {FortranRuntime => flang}/include/flang/Common/bit-population-count.h (98%)
rename {FortranRuntime => flang}/include/flang/Common/constexpr-bitset.h (98%)
rename {FortranRuntime => flang}/include/flang/Common/decimal.h (100%)
rename {FortranRuntime => flang}/include/flang/Common/enum-class.h (98%)
rename {FortranRuntime => flang}/include/flang/Common/enum-set.h (99%)
rename {FortranRuntime => flang}/include/flang/Common/fast-int-set.h (95%)
rename {FortranRuntime => flang}/include/flang/Common/float128.h (96%)
rename {FortranRuntime => flang}/include/flang/Common/format.h (99%)
rename {FortranRuntime => flang}/include/flang/Common/idioms.h (99%)
rename {FortranRuntime => flang}/include/flang/Common/leading-zero-bit-count.h (98%)
rename {FortranRuntime => flang}/include/flang/Common/optional.h (98%)
rename {FortranRuntime => flang}/include/flang/Common/real.h (99%)
rename {FortranRuntime => flang}/include/flang/Common/reference-wrapper.h (96%)
rename {FortranRuntime => flang}/include/flang/Common/restorer.h (97%)
rename {FortranRuntime => flang}/include/flang/Common/target-rounding.h (100%)
rename {FortranRuntime => flang}/include/flang/Common/uint128.h (99%)
rename {FortranRuntime => flang}/include/flang/Common/variant.h (89%)
rename {FortranRuntime => flang}/include/flang/Common/visit.h (98%)
rename {FortranRuntime => flang}/include/flang/Common/windows-include.h (93%)
rename {FortranRuntime => flang}/include/flang/Runtime/CUDA/allocator.h (93%)
rename {FortranRuntime => flang}/include/flang/Runtime/CUDA/descriptor.h (91%)
create mode 100644 flang/include/flang/Runtime/README.md
rename {FortranRuntime => flang}/include/flang/Runtime/allocatable.h (97%)
create mode 100644 flang/include/flang/Runtime/allocator-registry-consts.h
create mode 100644 flang/include/flang/Runtime/array-constructor-consts.h
rename {FortranRuntime => flang}/include/flang/Runtime/assign.h (98%)
rename {FortranRuntime => flang}/include/flang/Runtime/c-or-cpp.h (95%)
rename {FortranRuntime => flang}/include/flang/Runtime/character.h (99%)
rename {FortranRuntime => flang}/include/flang/Runtime/command.h (98%)
rename {FortranRuntime => flang}/include/flang/Runtime/cpp-type.h (98%)
rename {FortranRuntime => flang}/include/flang/Runtime/derived-api.h (98%)
create mode 100644 flang/include/flang/Runtime/descriptor-consts.h
rename {FortranRuntime => flang}/include/flang/Runtime/entry-names.h (89%)
rename {FortranRuntime => flang}/include/flang/Runtime/exceptions.h (86%)
rename {FortranRuntime => flang}/include/flang/Runtime/execute.h (89%)
rename {FortranRuntime => flang}/include/flang/Runtime/extensions.h (97%)
rename {FortranRuntime => flang}/include/flang/Runtime/freestanding-tools.h (99%)
rename {FortranRuntime => flang}/include/flang/Runtime/inquiry.h (91%)
rename {FortranRuntime => flang}/include/flang/Runtime/io-api.h (98%)
rename {FortranRuntime => flang}/include/flang/Runtime/iostat.h (96%)
rename {FortranRuntime/include/flang/Common => flang/include/flang/Runtime}/magic-numbers.h (98%)
rename {FortranRuntime => flang}/include/flang/Runtime/main.h (95%)
rename {FortranRuntime => flang}/include/flang/Runtime/matmul-instances.inc (100%)
rename {FortranRuntime => flang}/include/flang/Runtime/matmul-transpose.h (97%)
rename {FortranRuntime => flang}/include/flang/Runtime/matmul.h (97%)
rename {FortranRuntime => flang}/include/flang/Runtime/misc-intrinsic.h (95%)
rename {FortranRuntime => flang}/include/flang/Runtime/numeric.h (99%)
rename {FortranRuntime => flang}/include/flang/Runtime/pointer.h (97%)
rename {FortranRuntime => flang}/include/flang/Runtime/ragged.h (96%)
rename {FortranRuntime => flang}/include/flang/Runtime/random.h (100%)
rename {FortranRuntime => flang}/include/flang/Runtime/reduce.h (99%)
rename {FortranRuntime => flang}/include/flang/Runtime/reduction.h (99%)
rename {FortranRuntime => flang}/include/flang/Runtime/stop.h (97%)
rename {FortranRuntime => flang}/include/flang/Runtime/support.h (97%)
rename {FortranRuntime => flang}/include/flang/Runtime/temporary-stack.h (98%)
rename {FortranRuntime => flang}/include/flang/Runtime/time-intrinsic.h (97%)
rename {FortranRuntime => flang}/include/flang/Runtime/transformational.h (99%)
create mode 100644 flang/include/flang/Testing/README.md
rename {FortranRuntime => flang}/include/flang/Testing/fp-testing.h (100%)
rename {FortranRuntime => flang}/include/flang/Testing/testing.h (100%)
create mode 100644 flang/lib/Common/README.md
rename {FortranRuntime => flang}/lib/Common/big-radix-floating-point.h (100%)
rename {FortranRuntime => flang}/lib/Common/binary-to-decimal.cpp (100%)
rename {FortranRuntime => flang}/lib/Common/decimal-to-binary.cpp (100%)
create mode 100644 flang/lib/Testing/CMakeLists.txt
create mode 100644 flang/lib/Testing/README.md
rename {FortranRuntime => flang}/lib/Testing/fp-testing.cpp (100%)
rename {FortranRuntime => flang}/lib/Testing/testing.cpp (100%)
rename {FortranRuntime => flang}/unittests/Common/CMakeLists.txt (100%)
rename {FortranRuntime => flang}/unittests/Common/FastIntSetTest.cpp (97%)
rename {FortranRuntime => flang}/unittests/Decimal/CMakeLists.txt (100%)
rename {FortranRuntime => flang}/unittests/Decimal/quick-sanity-test.cpp (92%)
rename {FortranRuntime => flang}/unittests/Decimal/thorough-test.cpp (86%)
diff --git a/FortranRuntime/cmake/config.h.cmake.in b/FortranRuntime/cmake/config.h.cmake.in
index 4fa31c7e89ad7b..8a4668b90addda 100644
--- a/FortranRuntime/cmake/config.h.cmake.in
+++ b/FortranRuntime/cmake/config.h.cmake.in
@@ -1,10 +1,10 @@
-//===-- cmake/config.h.cmake.in ---------------------------------*- C++ -*-===//
-//
-// 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
-//
-//===----------------------------------------------------------------------===//
+/*===-- cmake/config.cmake.in ---------------------------------------*- C -*-===
+ *
+ * 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
+ *
+ *===----------------------------------------------------------------------===*/
#ifndef FORTRAN_RUNTIME_CONFIG_H
#define FORTRAN_RUNTIME_CONFIG_H
diff --git a/FortranRuntime/include/flang/Runtime/allocator-registry.h b/FortranRuntime/include/FortranRuntime/Runtime/allocator-registry.h
similarity index 82%
rename from FortranRuntime/include/flang/Runtime/allocator-registry.h
rename to FortranRuntime/include/FortranRuntime/Runtime/allocator-registry.h
index 4e7d9bcedfb375..30a583b88c083e 100644
--- a/FortranRuntime/include/flang/Runtime/allocator-registry.h
+++ b/FortranRuntime/include/FortranRuntime/Runtime/allocator-registry.h
@@ -1,4 +1,4 @@
-//===-- include/flang/Runtime/allocator-registry.h --------------*- C++ -*-===//
+//===-- include/FortranRuntime/Runtime/allocator-registry.h -----*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -10,17 +10,10 @@
#define FORTRAN_RUNTIME_ALLOCATOR_REGISTRY_H_
#include "flang/Common/api-attrs.h"
+#include "flang/Runtime/allocator-registry-consts.h"
#include <cstdlib>
#include <vector>
-static constexpr unsigned kDefaultAllocator = 0;
-
-// Allocator used for CUF
-static constexpr unsigned kPinnedAllocatorPos = 1;
-static constexpr unsigned kDeviceAllocatorPos = 2;
-static constexpr unsigned kManagedAllocatorPos = 3;
-static constexpr unsigned kUnifiedAllocatorPos = 4;
-
#define MAX_ALLOCATOR 7 // 3 bits are reserved in the descriptor.
namespace Fortran::runtime {
diff --git a/FortranRuntime/include/FortranRuntime/Runtime/array-constructor.h b/FortranRuntime/include/FortranRuntime/Runtime/array-constructor.h
new file mode 100644
index 00000000000000..314d5e56599cd3
--- /dev/null
+++ b/FortranRuntime/include/FortranRuntime/Runtime/array-constructor.h
@@ -0,0 +1,48 @@
+//===-- include/FortranRuntime/Runtime/array-constructor.h ------*- C++ -*-===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+// External APIs to create temporary storage for array constructors when their
+// final extents or length parameters cannot be pre-computed.
+
+#ifndef FORTRAN_RUNTIME_ARRAY_CONSTRUCTOR_H_
+#define FORTRAN_RUNTIME_ARRAY_CONSTRUCTOR_H_
+
+#include "FortranRuntime/Runtime/descriptor.h"
+#include "flang/Runtime/array-constructor-consts.h"
+#include "flang/Runtime/entry-names.h"
+#include <cstdint>
+
+namespace Fortran::runtime {
+
+// Runtime data structure to hold information about the storage of
+// an array constructor being constructed.
+struct ArrayConstructorVector {
+ RT_API_ATTRS ArrayConstructorVector(class Descriptor &to,
+ SubscriptValue nextValuePosition, SubscriptValue actualAllocationSize,
+ const char *sourceFile, int sourceLine, bool useValueLengthParameters)
+ : to{to}, nextValuePosition{nextValuePosition},
+ actualAllocationSize{actualAllocationSize}, sourceFile{sourceFile},
+ sourceLine{sourceLine},
+ useValueLengthParameters_{useValueLengthParameters} {}
+
+ RT_API_ATTRS bool useValueLengthParameters() const {
+ return useValueLengthParameters_;
+ }
+
+ class Descriptor &to;
+ SubscriptValue nextValuePosition;
+ SubscriptValue actualAllocationSize;
+ const char *sourceFile;
+ int sourceLine;
+
+private:
+ unsigned char useValueLengthParameters_ : 1;
+};
+
+} // namespace Fortran::runtime
+#endif /* FORTRAN_RUNTIME_ARRAY_CONSTRUCTOR_H_ */
diff --git a/FortranRuntime/include/flang/Runtime/descriptor.h b/FortranRuntime/include/FortranRuntime/Runtime/descriptor.h
similarity index 96%
rename from FortranRuntime/include/flang/Runtime/descriptor.h
rename to FortranRuntime/include/FortranRuntime/Runtime/descriptor.h
index 867f4d4ee29ac0..f79ad6b9637a4a 100644
--- a/FortranRuntime/include/flang/Runtime/descriptor.h
+++ b/FortranRuntime/include/FortranRuntime/Runtime/descriptor.h
@@ -1,4 +1,4 @@
-//===-- include/flang/Runtime/descriptor.h ----------------------*- C++ -*-===//
+//===-- include/FortranRuntime/Runtime/descriptor.h -------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -18,9 +18,10 @@
// User C code is welcome to depend on that ISO_Fortran_binding.h file,
// but should never reference this internal header.
+#include "FortranRuntime/Runtime/memory.h"
+#include "FortranRuntime/Runtime/type-code.h"
#include "flang/Common/ISO_Fortran_binding_wrapper.h"
-#include "flang/Runtime/memory.h"
-#include "flang/Runtime/type-code.h"
+#include "flang/Runtime/descriptor-consts.h"
#include <algorithm>
#include <cassert>
#include <cinttypes>
@@ -28,14 +29,8 @@
#include <cstdio>
#include <cstring>
-namespace Fortran::runtime::typeInfo {
-using TypeParameterValue = std::int64_t;
-class DerivedType;
-} // namespace Fortran::runtime::typeInfo
-
namespace Fortran::runtime {
-using SubscriptValue = ISO::CFI_index_t;
class Terminator;
RT_VAR_GROUP_BEGIN
@@ -420,13 +415,6 @@ class Descriptor {
void Dump(FILE * = stdout) const;
-// Value of the addendum presence flag.
-#define _CFI_ADDENDUM_FLAG 1
-// Number of bits needed to be shifted when manipulating the allocator index.
-#define _CFI_ALLOCATOR_IDX_SHIFT 1
-// Allocator index mask.
-#define _CFI_ALLOCATOR_IDX_MASK 0b00001110
-
RT_API_ATTRS inline bool HasAddendum() const {
return raw_.extra & _CFI_ADDENDUM_FLAG;
}
@@ -464,6 +452,8 @@ class alignas(Descriptor) StaticDescriptor {
static constexpr bool hasAddendum{ADDENDUM || MAX_LEN_PARMS > 0};
static constexpr std::size_t byteSize{
Descriptor::SizeInBytes(maxRank, hasAddendum, maxLengthTypeParameters)};
+ static_assert(byteSize <=
+ MaxDescriptorSizeInBytes(maxRank, hasAddendum, maxLengthTypeParameters));
RT_OFFLOAD_VAR_GROUP_END
RT_API_ATTRS Descriptor &descriptor() {
diff --git a/FortranRuntime/include/FortranRuntime/Runtime/io-api-funcs.h b/FortranRuntime/include/FortranRuntime/Runtime/io-api-funcs.h
new file mode 100644
index 00000000000000..516fe25784656c
--- /dev/null
+++ b/FortranRuntime/include/FortranRuntime/Runtime/io-api-funcs.h
@@ -0,0 +1,39 @@
+//===-- include/FortranRuntime/Runtime/io-api-funcs.h -----------*- C++ -*-===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+// Defines API between compiled code and I/O runtime library.
+
+#ifndef FORTRAN_RUNTIME_IO_API_FUNCS_H_
+#define FORTRAN_RUNTIME_IO_API_FUNCS_H_
+
+#include "flang/Common/uint128.h"
+#include "flang/Runtime/entry-names.h"
+#include "flang/Runtime/io-api.h"
+#include "flang/Runtime/iostat.h"
+#include "flang/Runtime/magic-numbers.h"
+#include <cinttypes>
+#include <cstddef>
+
+namespace Fortran::runtime {
+class Descriptor;
+} // namespace Fortran::runtime
+
+namespace Fortran::runtime::io {
+
+struct NonTbpDefinedIoTable;
+class NamelistGroup;
+class IoStatementState;
+using Cookie = IoStatementState *;
+using ExternalUnit = int;
+using AsynchronousId = int;
+
+RT_API_ATTRS const char *InquiryKeywordHashDecode(
+ char *buffer, std::size_t, InquiryKeywordHash);
+
+} // namespace Fortran::runtime::io
+#endif /* FORTRAN_RUNTIME_IO_API_FUNCS_H_ */
diff --git a/FortranRuntime/include/FortranRuntime/Runtime/iostat-funcs.h b/FortranRuntime/include/FortranRuntime/Runtime/iostat-funcs.h
new file mode 100644
index 00000000000000..10906afb01673c
--- /dev/null
+++ b/FortranRuntime/include/FortranRuntime/Runtime/iostat-funcs.h
@@ -0,0 +1,23 @@
+//===-- include/FortranRuntime/Runtime/iostat-funcs.h -----------*- C++ -*-===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+// Defines the values returned by the runtime for IOSTAT= specifiers
+// on I/O statements.
+
+#ifndef FORTRAN_RUNTIME_IOSTAT_FUNCS_H_
+#define FORTRAN_RUNTIME_IOSTAT_FUNCS_H_
+
+#include "flang/Common/api-attrs.h"
+#include "flang/Runtime/iostat.h"
+
+namespace Fortran::runtime::io {
+
+RT_API_ATTRS const char *IostatErrorString(int);
+
+} // namespace Fortran::runtime::io
+#endif /* FORTRAN_RUNTIME_IOSTAT_FUNCS_H_ */
diff --git a/FortranRuntime/include/flang/Runtime/memory.h b/FortranRuntime/include/FortranRuntime/Runtime/memory.h
similarity index 98%
rename from FortranRuntime/include/flang/Runtime/memory.h
rename to FortranRuntime/include/FortranRuntime/Runtime/memory.h
index 84af4d7189c074..3e7fd2d9ea3e3b 100644
--- a/FortranRuntime/include/flang/Runtime/memory.h
+++ b/FortranRuntime/include/FortranRuntime/Runtime/memory.h
@@ -1,4 +1,4 @@
-//===-- include/flang/Runtime/memory.h --------------------------*- C++ -*-===//
+//===-- include/FortranRuntime/Runtime/memory.h -----------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/include/flang/Runtime/type-code.h b/FortranRuntime/include/FortranRuntime/Runtime/type-code.h
similarity index 97%
rename from FortranRuntime/include/flang/Runtime/type-code.h
rename to FortranRuntime/include/FortranRuntime/Runtime/type-code.h
index ec359f25dbdd12..92ff593410c12c 100644
--- a/FortranRuntime/include/flang/Runtime/type-code.h
+++ b/FortranRuntime/include/FortranRuntime/Runtime/type-code.h
@@ -1,4 +1,4 @@
-//===-- include/flang/Runtime/type-code.h -----------------------*- C++ -*-===//
+//===-- include/FortranRuntime/Runtime/type-code.h --------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/include/flang/Runtime/array-constructor.h b/FortranRuntime/include/flang/Runtime/array-constructor.h
deleted file mode 100644
index 82367756f5dc79..00000000000000
--- a/FortranRuntime/include/flang/Runtime/array-constructor.h
+++ /dev/null
@@ -1,118 +0,0 @@
-//===-- include/flang/Runtime/array-constructor.h ---------------*- C++ -*-===//
-//
-// 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
-//
-//===----------------------------------------------------------------------===//
-
-// External APIs to create temporary storage for array constructors when their
-// final extents or length parameters cannot be pre-computed.
-
-#ifndef FORTRAN_RUNTIME_ARRAY_CONSTRUCTOR_H_
-#define FORTRAN_RUNTIME_ARRAY_CONSTRUCTOR_H_
-
-#include "flang/Runtime/descriptor.h"
-#include "flang/Runtime/entry-names.h"
-#include <cstdint>
-
-namespace Fortran::runtime {
-
-// Runtime data structure to hold information about the storage of
-// an array constructor being constructed.
-struct ArrayConstructorVector {
- RT_API_ATTRS ArrayConstructorVector(class Descriptor &to,
- SubscriptValue nextValuePosition, SubscriptValue actualAllocationSize,
- const char *sourceFile, int sourceLine, bool useValueLengthParameters)
- : to{to}, nextValuePosition{nextValuePosition},
- actualAllocationSize{actualAllocationSize}, sourceFile{sourceFile},
- sourceLine{sourceLine},
- useValueLengthParameters_{useValueLengthParameters} {}
-
- RT_API_ATTRS bool useValueLengthParameters() const {
- return useValueLengthParameters_;
- }
-
- class Descriptor &to;
- SubscriptValue nextValuePosition;
- SubscriptValue actualAllocationSize;
- const char *sourceFile;
- int sourceLine;
-
-private:
- unsigned char useValueLengthParameters_ : 1;
-};
-
-// This file defines an API to "push" an evaluated array constructor value
-// "from" into some storage "to" of an array constructor. It can be seen as a
-// form of std::vector::push_back() implementation for Fortran array
-// constructors. In the APIs and ArrayConstructorVector struct above:
-//
-// - "to" is a ranked-1 descriptor whose declared type is already set to the
-// array constructor derived type. It may be already allocated, even before the
-// first call to this API, or it may be unallocated. "to" extent is increased
-// every time a "from" is pushed past its current extent. At this end of the
-// API calls, its extent is the extent of the array constructor. If "to" is
-// unallocated and its extent is not null, it is assumed this is the final array
-// constructor extent value, and the first allocation already "reserves" storage
-// space accordingly to avoid reallocations.
-// - "from" is a scalar or array descriptor for the evaluated array
-// constructor value that must be copied into the storage of "to" at
-// "nextValuePosition".
-// - "useValueLengthParameters" must be set to true if the array constructor
-// has length parameters and no type spec. If it is true and "to" is
-// unallocated, "to" will take the length parameters of "from". If it is true
-// and "to" is an allocated character array constructor, it will be checked
-// that "from" length matches the one from "to". When it is false, the
-// character length must already be set in "to" before the first call to this
-// API and "from" character lengths are allowed to mismatch from "to".
-// - "nextValuePosition" is the zero based sequence position of "from" in the
-// array constructor. It is updated after this call by the number of "from"
-// elements. It should be set to zero by the caller of this API before the first
-// call.
-// - "actualAllocationSize" is the current allocation size of "to" storage. It
-// may be bigger than "to" extent for reallocation optimization purposes, but
-// should never be smaller, unless this is the first call and "to" is
-// unallocated. It is updated by the runtime after each successful allocation or
-// reallocation. It should be set to "to" extent if "to" is allocated before the
-// first call of this API, and can be left undefined otherwise.
-//
-// Note that this API can be used with "to" being a variable (that can be
-// discontiguous). This can be done when the variable is the left hand side of
-// an assignment from an array constructor as long as:
-// - none of the ac-value overlaps with the variable,
-// - this is an intrinsic assignment that is not a whole allocatable
-// assignment, *and* for a type that has no components requiring user defined
-// assignments,
-// - the variable is properly finalized before using this API if its need to,
-// - "useValueLengthParameters" should be set to false in this case, even if
-// the array constructor has no type-spec, since the variable may have a
-// different character length than the array constructor values.
-
-extern "C" {
-// API to initialize an ArrayConstructorVector before any values are pushed to
-// it. Inlined code is only expected to allocate the "ArrayConstructorVector"
-// class instance storage with sufficient size (using
-// "2*sizeof(ArrayConstructorVector)" on the host should be safe regardless of
-// the target the runtime is compiled for). This avoids the need for the runtime
-// to maintain a state, or to use dynamic allocation for it. "vectorClassSize"
-// is used to validate that lowering allocated enough space for it.
-void RTDECL(InitArrayConstructorVector)(ArrayConstructorVector &vector,
- Descriptor &to, bool useValueLengthParameters, int vectorClassSize,
- const char *sourceFile = nullptr, int sourceLine = 0);
-
-// Generic API to push any kind of entity into the array constructor (any
-// Fortran type and any rank).
-void RTDECL(PushArrayConstructorValue)(
- ArrayConstructorVector &vector, const Descriptor &from);
-
-// API to push scalar array constructor value of:
-// - a numerical or logical type,
-// - or a derived type that has no length parameters, and no allocatable
-// component (that would require deep copies).
-// It requires no descriptor for the value that is passed via its base address.
-void RTDECL(PushArrayConstructorSimpleScalar)(
- ArrayConstructorVector &vector, void *from);
-} // extern "C"
-} // namespace Fortran::runtime
-#endif /* FORTRAN_RUNTIME_ARRAY_CONSTRUCTOR_H_ */
diff --git a/FortranRuntime/lib/Runtime/CMakeLists.txt b/FortranRuntime/lib/Runtime/CMakeLists.txt
index 1b8944d7641fab..1db5520d5eaedf 100644
--- a/FortranRuntime/lib/Runtime/CMakeLists.txt
+++ b/FortranRuntime/lib/Runtime/CMakeLists.txt
@@ -65,8 +65,8 @@ set(supported_sources
# List of source not used for GPU offloading.
set(host_sources
- ../Common/binary-to-decimal.cpp
- ../Common/decimal-to-binary.cpp
+ ${FLANG_SOURCE_DIR}/lib/Common/binary-to-decimal.cpp
+ ${FLANG_SOURCE_DIR}/lib/Common/decimal-to-binary.cpp
command.cpp
complex-powi.cpp
complex-reduction.c
diff --git a/FortranRuntime/lib/Runtime/CUDA/allocator.cpp b/FortranRuntime/lib/Runtime/CUDA/allocator.cpp
index 6401faede9fdf5..c9d62f6ea8f3bf 100644
--- a/FortranRuntime/lib/Runtime/CUDA/allocator.cpp
+++ b/FortranRuntime/lib/Runtime/CUDA/allocator.cpp
@@ -6,13 +6,13 @@
//
//===----------------------------------------------------------------------===//
-#include "flang/Runtime/CUDA/allocator.h"
+#include "FortranRuntime/Runtime/CUDA/allocator.h"
+#include "FortranRuntime/Runtime/allocator-registry.h"
#include "../derived.h"
#include "../stat.h"
#include "../terminator.h"
#include "../type-info.h"
-#include "flang/Common/ISO_Fortran_binding_wrapper.h"
-#include "flang/Runtime/allocator-registry.h"
+#include "flang/ISO_Fortran_binding_wrapper.h"
#include "flang/Support/Fortran.h"
#include "cuda_runtime.h"
diff --git a/FortranRuntime/lib/Runtime/CUDA/descriptor.cpp b/FortranRuntime/lib/Runtime/CUDA/descriptor.cpp
index 9664fea4ebc78a..94b5feca4ce4dc 100644
--- a/FortranRuntime/lib/Runtime/CUDA/descriptor.cpp
+++ b/FortranRuntime/lib/Runtime/CUDA/descriptor.cpp
@@ -6,8 +6,8 @@
//
//===----------------------------------------------------------------------===//
-#include "flang/Runtime/CUDA/descriptor.h"
-#include "flang/Runtime/CUDA/allocator.h"
+#include "FortranRuntime/Runtime/CUDA/descriptor.h"
+#include "FortranRuntime/Runtime/CUDA/allocator.h"
namespace Fortran::runtime::cuda {
extern "C" {
diff --git a/FortranRuntime/lib/Runtime/Float128Math/math-entries.h b/FortranRuntime/lib/Runtime/Float128Math/math-entries.h
index cb1e0130602260..1449000820f00e 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/math-entries.h
+++ b/FortranRuntime/lib/Runtime/Float128Math/math-entries.h
@@ -8,10 +8,10 @@
#ifndef FORTRAN_RUNTIME_FLOAT128MATH_MATH_ENTRIES_H_
#define FORTRAN_RUNTIME_FLOAT128MATH_MATH_ENTRIES_H_
-#include "flang/Common/float128.h"
-#include "flang/Runtime/entry-names.h"
#include "terminator.h"
#include "tools.h"
+#include "flang/Common/float128.h"
+#include "flang/Runtime/entry-names.h"
#include <cfloat>
#include <cmath>
#include <type_traits>
diff --git a/FortranRuntime/lib/Runtime/ISO_Fortran_binding.cpp b/FortranRuntime/lib/Runtime/ISO_Fortran_binding.cpp
index 9711b2bcf49757..997226b08e96a6 100644
--- a/FortranRuntime/lib/Runtime/ISO_Fortran_binding.cpp
+++ b/FortranRuntime/lib/Runtime/ISO_Fortran_binding.cpp
@@ -9,12 +9,12 @@
// Implements the required interoperability API from ISO_Fortran_binding.h
// as specified in section 18.5.5 of Fortran 2018.
+#include "FortranRuntime/Runtime/descriptor.h"
+#include "FortranRuntime/Runtime/type-code.h"
#include "ISO_Fortran_util.h"
+#include "terminator.h"
#include "flang/Common/ISO_Fortran_binding_wrapper.h"
-#include "flang/Runtime/descriptor.h"
#include "flang/Runtime/pointer.h"
-#include "flang/Runtime/type-code.h"
-#include "terminator.h"
#include <cstdlib>
namespace Fortran::ISO {
diff --git a/FortranRuntime/lib/Runtime/ISO_Fortran_util.h b/FortranRuntime/lib/Runtime/ISO_Fortran_util.h
index 7ab280733028af..e418266dddccc7 100644
--- a/FortranRuntime/lib/Runtime/ISO_Fortran_util.h
+++ b/FortranRuntime/lib/Runtime/ISO_Fortran_util.h
@@ -11,10 +11,10 @@
// Internal utils for establishing CFI_cdesc_t descriptors.
-#include "flang/Common/ISO_Fortran_binding_wrapper.h"
-#include "flang/Runtime/descriptor.h"
-#include "flang/Runtime/type-code.h"
+#include "FortranRuntime/Runtime/descriptor.h"
+#include "FortranRuntime/Runtime/type-code.h"
#include "terminator.h"
+#include "flang/Common/ISO_Fortran_binding_wrapper.h"
#include <cstdlib>
namespace Fortran::ISO {
diff --git a/FortranRuntime/lib/Runtime/allocatable.cpp b/FortranRuntime/lib/Runtime/allocatable.cpp
index 8b6c1a4c1477eb..4a3b89f4879c12 100644
--- a/FortranRuntime/lib/Runtime/allocatable.cpp
+++ b/FortranRuntime/lib/Runtime/allocatable.cpp
@@ -7,14 +7,18 @@
//===----------------------------------------------------------------------===//
#include "flang/Runtime/allocatable.h"
+#include "FortranRuntime/Runtime/descriptor.h"
#include "assign-impl.h"
#include "derived.h"
-#include "flang/Common/ISO_Fortran_binding_wrapper.h"
-#include "flang/Runtime/assign.h"
-#include "flang/Runtime/descriptor.h"
#include "stat.h"
#include "terminator.h"
#include "type-info.h"
+#include "flang/Common/ISO_Fortran_binding_wrapper.h"
+#include "flang/Runtime/assign.h"
+
+using Fortran::common::TypeCategory;
+
+
namespace Fortran::runtime {
extern "C" {
diff --git a/FortranRuntime/lib/Runtime/allocator-registry.cpp b/FortranRuntime/lib/Runtime/allocator-registry.cpp
index edd3685e83a820..17883e5c54870d 100644
--- a/FortranRuntime/lib/Runtime/allocator-registry.cpp
+++ b/FortranRuntime/lib/Runtime/allocator-registry.cpp
@@ -6,16 +6,16 @@
//
//===----------------------------------------------------------------------===//
-#include "flang/Runtime/allocator-registry.h"
+#include "FortranRuntime/Runtime/allocator-registry.h"
#include "terminator.h"
namespace Fortran::runtime {
-#ifndef FORTRANRUNTIME_NO_GLOBAL_VAR_DEFS
+#ifndef FLANG_RUNTIME_NO_GLOBAL_VAR_DEFS
RT_OFFLOAD_VAR_GROUP_BEGIN
RT_VAR_ATTRS AllocatorRegistry allocatorRegistry;
RT_OFFLOAD_VAR_GROUP_END
-#endif // FORTRANRUNTIME_NO_GLOBAL_VAR_DEFS
+#endif // FLANG_RUNTIME_NO_GLOBAL_VAR_DEFS
RT_OFFLOAD_API_GROUP_BEGIN
RT_API_ATTRS void AllocatorRegistry::Register(int pos, Allocator_t allocator) {
diff --git a/FortranRuntime/lib/Runtime/array-constructor.cpp b/FortranRuntime/lib/Runtime/array-constructor.cpp
index db57d4fc4c3f68..002dfba2c066f5 100644
--- a/FortranRuntime/lib/Runtime/array-constructor.cpp
+++ b/FortranRuntime/lib/Runtime/array-constructor.cpp
@@ -6,14 +6,14 @@
//
//===----------------------------------------------------------------------===//
-#include "flang/Runtime/array-constructor.h"
+#include "FortranRuntime/Runtime/array-constructor.h"
+#include "FortranRuntime/Runtime/descriptor.h"
#include "derived.h"
-#include "flang/Runtime/allocatable.h"
-#include "flang/Runtime/assign.h"
-#include "flang/Runtime/descriptor.h"
#include "terminator.h"
#include "tools.h"
#include "type-info.h"
+#include "flang/Runtime/allocatable.h"
+#include "flang/Runtime/assign.h"
namespace Fortran::runtime {
diff --git a/FortranRuntime/lib/Runtime/assign.cpp b/FortranRuntime/lib/Runtime/assign.cpp
index cc38e55e3a9e1e..3a1486ace928a2 100644
--- a/FortranRuntime/lib/Runtime/assign.cpp
+++ b/FortranRuntime/lib/Runtime/assign.cpp
@@ -7,9 +7,9 @@
//===----------------------------------------------------------------------===//
#include "flang/Runtime/assign.h"
+#include "FortranRuntime/Runtime/descriptor.h"
#include "assign-impl.h"
#include "derived.h"
-#include "flang/Runtime/descriptor.h"
#include "stat.h"
#include "terminator.h"
#include "tools.h"
diff --git a/FortranRuntime/lib/Runtime/buffer.h b/FortranRuntime/lib/Runtime/buffer.h
index dd3c19fa14392f..52df0f10813c25 100644
--- a/FortranRuntime/lib/Runtime/buffer.h
+++ b/FortranRuntime/lib/Runtime/buffer.h
@@ -11,9 +11,9 @@
#ifndef FORTRAN_RUNTIME_BUFFER_H_
#define FORTRAN_RUNTIME_BUFFER_H_
-#include "flang/Runtime/freestanding-tools.h"
-#include "flang/Runtime/memory.h"
+#include "FortranRuntime/Runtime/memory.h"
#include "io-error.h"
+#include "flang/Runtime/freestanding-tools.h"
#include <algorithm>
#include <cinttypes>
#include <cstring>
diff --git a/FortranRuntime/lib/Runtime/character.cpp b/FortranRuntime/lib/Runtime/character.cpp
index 32fc010c6c04dd..1f3edd6e80392e 100644
--- a/FortranRuntime/lib/Runtime/character.cpp
+++ b/FortranRuntime/lib/Runtime/character.cpp
@@ -7,13 +7,13 @@
//===----------------------------------------------------------------------===//
#include "flang/Runtime/character.h"
+#include "FortranRuntime/Runtime/descriptor.h"
+#include "terminator.h"
+#include "tools.h"
#include "flang/Common/bit-population-count.h"
#include "flang/Common/uint128.h"
#include "flang/Runtime/character.h"
#include "flang/Runtime/cpp-type.h"
-#include "flang/Runtime/descriptor.h"
-#include "terminator.h"
-#include "tools.h"
#include <algorithm>
#include <cstring>
diff --git a/FortranRuntime/lib/Runtime/command.cpp b/FortranRuntime/lib/Runtime/command.cpp
index dc57758d4f7955..64b2e62461dd58 100644
--- a/FortranRuntime/lib/Runtime/command.cpp
+++ b/FortranRuntime/lib/Runtime/command.cpp
@@ -7,8 +7,8 @@
//===----------------------------------------------------------------------===//
#include "flang/Runtime/command.h"
+#include "FortranRuntime/Runtime/descriptor.h"
#include "environment.h"
-#include "flang/Runtime/descriptor.h"
#include "stat.h"
#include "terminator.h"
#include "tools.h"
diff --git a/FortranRuntime/lib/Runtime/connection.h b/FortranRuntime/lib/Runtime/connection.h
index 92a3a9c3860a3e..e078bfb9f0f7e7 100644
--- a/FortranRuntime/lib/Runtime/connection.h
+++ b/FortranRuntime/lib/Runtime/connection.h
@@ -11,8 +11,8 @@
#ifndef FORTRAN_RUNTIME_CONNECTION_H_
#define FORTRAN_RUNTIME_CONNECTION_H_
-#include "flang/Common/optional.h"
#include "format.h"
+#include "flang/Common/optional.h"
#include <cinttypes>
namespace Fortran::runtime::io {
diff --git a/FortranRuntime/lib/Runtime/copy.cpp b/FortranRuntime/lib/Runtime/copy.cpp
index 39c7da45172a43..1049b925f68e5c 100644
--- a/FortranRuntime/lib/Runtime/copy.cpp
+++ b/FortranRuntime/lib/Runtime/copy.cpp
@@ -7,11 +7,11 @@
//===----------------------------------------------------------------------===//
#include "copy.h"
-#include "flang/Runtime/allocatable.h"
-#include "flang/Runtime/descriptor.h"
+#include "FortranRuntime/Runtime/descriptor.h"
#include "stack.h"
#include "terminator.h"
#include "type-info.h"
+#include "flang/Runtime/allocatable.h"
#include <cstring>
namespace Fortran::runtime {
diff --git a/FortranRuntime/lib/Runtime/copy.h b/FortranRuntime/lib/Runtime/copy.h
index f2c5b41718b71c..3d179d0bec91a7 100644
--- a/FortranRuntime/lib/Runtime/copy.h
+++ b/FortranRuntime/lib/Runtime/copy.h
@@ -12,7 +12,7 @@
#ifndef FORTRAN_RUNTIME_COPY_H_
#define FORTRAN_RUNTIME_COPY_H_
-#include "flang/Runtime/descriptor.h"
+#include "FortranRuntime/Runtime/descriptor.h"
namespace Fortran::runtime {
diff --git a/FortranRuntime/lib/Runtime/derived-api.cpp b/FortranRuntime/lib/Runtime/derived-api.cpp
index 4b68cdbbed7b2c..176fc0849f25cf 100644
--- a/FortranRuntime/lib/Runtime/derived-api.cpp
+++ b/FortranRuntime/lib/Runtime/derived-api.cpp
@@ -7,8 +7,8 @@
//===----------------------------------------------------------------------===//
#include "flang/Runtime/derived-api.h"
+#include "FortranRuntime/Runtime/descriptor.h"
#include "derived.h"
-#include "flang/Runtime/descriptor.h"
#include "terminator.h"
#include "tools.h"
#include "type-info.h"
diff --git a/FortranRuntime/lib/Runtime/derived.cpp b/FortranRuntime/lib/Runtime/derived.cpp
index 52bf54d62c8599..cb2dca24bb4758 100644
--- a/FortranRuntime/lib/Runtime/derived.cpp
+++ b/FortranRuntime/lib/Runtime/derived.cpp
@@ -7,7 +7,7 @@
//===----------------------------------------------------------------------===//
#include "derived.h"
-#include "flang/Runtime/descriptor.h"
+#include "FortranRuntime/Runtime/descriptor.h"
#include "stat.h"
#include "terminator.h"
#include "tools.h"
diff --git a/FortranRuntime/lib/Runtime/descriptor-io.h b/FortranRuntime/lib/Runtime/descriptor-io.h
index 2ccad0cea70a29..30d1bd48457728 100644
--- a/FortranRuntime/lib/Runtime/descriptor-io.h
+++ b/FortranRuntime/lib/Runtime/descriptor-io.h
@@ -14,17 +14,17 @@
// some scalar I/O data transfer APIs could be changed to bypass their use
// of descriptors in the future for better efficiency.)
+#include "FortranRuntime/Runtime/descriptor.h"
#include "edit-input.h"
#include "edit-output.h"
-#include "flang/Common/optional.h"
-#include "flang/Common/uint128.h"
-#include "flang/Runtime/cpp-type.h"
-#include "flang/Runtime/descriptor.h"
#include "io-stmt.h"
#include "namelist.h"
#include "terminator.h"
#include "type-info.h"
#include "unit.h"
+#include "flang/Common/optional.h"
+#include "flang/Common/uint128.h"
+#include "flang/Runtime/cpp-type.h"
namespace Fortran::runtime::io::descr {
template <typename A>
diff --git a/FortranRuntime/lib/Runtime/descriptor.cpp b/FortranRuntime/lib/Runtime/descriptor.cpp
index 6756134b06e7b1..96fd48eb6687a9 100644
--- a/FortranRuntime/lib/Runtime/descriptor.cpp
+++ b/FortranRuntime/lib/Runtime/descriptor.cpp
@@ -6,10 +6,10 @@
//
//===----------------------------------------------------------------------===//
-#include "flang/Runtime/descriptor.h"
+#include "FortranRuntime/Runtime/descriptor.h"
+#include "FortranRuntime/Runtime/allocator-registry.h"
#include "ISO_Fortran_util.h"
#include "derived.h"
-#include "flang/Runtime/allocator-registry.h"
#include "memory.h"
#include "stat.h"
#include "terminator.h"
@@ -141,8 +141,10 @@ RT_API_ATTRS OwningPtr<Descriptor> Descriptor::Create(
RT_API_ATTRS std::size_t Descriptor::SizeInBytes() const {
const DescriptorAddendum *addendum{Addendum()};
- return sizeof *this - sizeof(Dimension) + raw_.rank * sizeof(Dimension) +
- (addendum ? addendum->SizeInBytes() : 0);
+ std::size_t bytes{ sizeof *this - sizeof(Dimension) + raw_.rank * sizeof(Dimension) +
+ (addendum ? addendum->SizeInBytes() : 0)};
+ assert (bytes <= MaxDescriptorSizeInBytes(raw_.rank,addendum) && "Descriptor must fit compiler-allocated space");
+ return bytes;
}
RT_API_ATTRS std::size_t Descriptor::Elements() const {
diff --git a/FortranRuntime/lib/Runtime/dot-product.cpp b/FortranRuntime/lib/Runtime/dot-product.cpp
index ab1cfa58ef3d02..2992cbb1f39ad6 100644
--- a/FortranRuntime/lib/Runtime/dot-product.cpp
+++ b/FortranRuntime/lib/Runtime/dot-product.cpp
@@ -6,13 +6,13 @@
//
//===----------------------------------------------------------------------===//
-#include "flang/Common/float128.h"
-#include "flang/Runtime/cpp-type.h"
-#include "flang/Runtime/descriptor.h"
-#include "flang/Runtime/reduction.h"
+#include "FortranRuntime/Runtime/descriptor.h"
#include "float.h"
#include "terminator.h"
#include "tools.h"
+#include "flang/Common/float128.h"
+#include "flang/Runtime/cpp-type.h"
+#include "flang/Runtime/reduction.h"
#include <cfloat>
#include <cinttypes>
diff --git a/FortranRuntime/lib/Runtime/edit-input.cpp b/FortranRuntime/lib/Runtime/edit-input.cpp
index eaa9d0d7e641e7..6ebb0e7aca4ade 100644
--- a/FortranRuntime/lib/Runtime/edit-input.cpp
+++ b/FortranRuntime/lib/Runtime/edit-input.cpp
@@ -7,12 +7,12 @@
//===----------------------------------------------------------------------===//
#include "edit-input.h"
+#include "namelist.h"
+#include "utf.h"
#include "flang/Common/optional.h"
#include "flang/Common/real.h"
#include "flang/Common/uint128.h"
#include "flang/Runtime/freestanding-tools.h"
-#include "namelist.h"
-#include "utf.h"
#include <algorithm>
#include <cfenv>
diff --git a/FortranRuntime/lib/Runtime/edit-input.h b/FortranRuntime/lib/Runtime/edit-input.h
index 2eda81a6d4e11d..f88f6daa47be79 100644
--- a/FortranRuntime/lib/Runtime/edit-input.h
+++ b/FortranRuntime/lib/Runtime/edit-input.h
@@ -9,9 +9,9 @@
#ifndef FORTRAN_RUNTIME_EDIT_INPUT_H_
#define FORTRAN_RUNTIME_EDIT_INPUT_H_
-#include "flang/Common/decimal.h"
#include "format.h"
#include "io-stmt.h"
+#include "flang/Common/decimal.h"
namespace Fortran::runtime::io {
diff --git a/FortranRuntime/lib/Runtime/edit-output.cpp b/FortranRuntime/lib/Runtime/edit-output.cpp
index 1fab7db6d3b187..ccaf8085f016fd 100644
--- a/FortranRuntime/lib/Runtime/edit-output.cpp
+++ b/FortranRuntime/lib/Runtime/edit-output.cpp
@@ -8,9 +8,9 @@
#include "edit-output.h"
#include "emit-encoded.h"
+#include "utf.h"
#include "flang/Common/real.h"
#include "flang/Common/uint128.h"
-#include "utf.h"
#include <algorithm>
namespace Fortran::runtime::io {
diff --git a/FortranRuntime/lib/Runtime/edit-output.h b/FortranRuntime/lib/Runtime/edit-output.h
index cb25b68a35f05b..7e6c6cdedde3ac 100644
--- a/FortranRuntime/lib/Runtime/edit-output.h
+++ b/FortranRuntime/lib/Runtime/edit-output.h
@@ -18,10 +18,10 @@
// Drives the same fast binary-to-decimal formatting templates used
// in the f18 front-end.
-#include "flang/Common/decimal.h"
-#include "flang/Common/uint128.h"
#include "format.h"
#include "io-stmt.h"
+#include "flang/Common/decimal.h"
+#include "flang/Common/uint128.h"
namespace Fortran::runtime::io {
diff --git a/FortranRuntime/lib/Runtime/environment.cpp b/FortranRuntime/lib/Runtime/environment.cpp
index 9cbb198dd9141c..272914877988a5 100644
--- a/FortranRuntime/lib/Runtime/environment.cpp
+++ b/FortranRuntime/lib/Runtime/environment.cpp
@@ -23,11 +23,11 @@ extern char **environ;
namespace Fortran::runtime {
-#ifndef FORTRANRUNTIME_NO_GLOBAL_VAR_DEFS
+#ifndef FLANG_RUNTIME_NO_GLOBAL_VAR_DEFS
RT_OFFLOAD_VAR_GROUP_BEGIN
RT_VAR_ATTRS ExecutionEnvironment executionEnvironment;
RT_OFFLOAD_VAR_GROUP_END
-#endif // FORTRANRUNTIME_NO_GLOBAL_VAR_DEFS
+#endif // FLANG_RUNTIME_NO_GLOBAL_VAR_DEFS
static void SetEnvironmentDefaults(const EnvironmentDefaultList *envDefaults) {
if (!envDefaults) {
diff --git a/FortranRuntime/lib/Runtime/execute.cpp b/FortranRuntime/lib/Runtime/execute.cpp
index 54f28d052873b4..b333c61c8a59f4 100644
--- a/FortranRuntime/lib/Runtime/execute.cpp
+++ b/FortranRuntime/lib/Runtime/execute.cpp
@@ -7,8 +7,8 @@
//===----------------------------------------------------------------------===//
#include "flang/Runtime/execute.h"
+#include "FortranRuntime/Runtime/descriptor.h"
#include "environment.h"
-#include "flang/Runtime/descriptor.h"
#include "stat.h"
#include "terminator.h"
#include "tools.h"
diff --git a/FortranRuntime/lib/Runtime/extensions.cpp b/FortranRuntime/lib/Runtime/extensions.cpp
index 94bfa3059e6b45..bb25fe6ee9d886 100644
--- a/FortranRuntime/lib/Runtime/extensions.cpp
+++ b/FortranRuntime/lib/Runtime/extensions.cpp
@@ -10,12 +10,12 @@
// extensions that will eventually be implemented in Fortran.
#include "flang/Runtime/extensions.h"
-#include "flang/Runtime/command.h"
-#include "flang/Runtime/descriptor.h"
-#include "flang/Runtime/entry-names.h"
-#include "flang/Runtime/io-api.h"
+#include "FortranRuntime/Runtime/descriptor.h"
+#include "FortranRuntime/Runtime/io-api-funcs.h"
#include "terminator.h"
#include "tools.h"
+#include "flang/Runtime/command.h"
+#include "flang/Runtime/entry-names.h"
#include <chrono>
#include <cstring>
#include <ctime>
diff --git a/FortranRuntime/lib/Runtime/extrema.cpp b/FortranRuntime/lib/Runtime/extrema.cpp
index 0809cb1d5f2ae2..be9da63d7bd6b8 100644
--- a/FortranRuntime/lib/Runtime/extrema.cpp
+++ b/FortranRuntime/lib/Runtime/extrema.cpp
@@ -10,10 +10,10 @@
// and shapes and (for MAXLOC & MINLOC) result integer kinds. Also implements
// NORM2 using common infrastructure.
+#include "reduction-templates.h"
#include "flang/Common/float128.h"
#include "flang/Runtime/character.h"
#include "flang/Runtime/reduction.h"
-#include "reduction-templates.h"
#include <algorithm>
#include <cfloat>
#include <cinttypes>
diff --git a/FortranRuntime/lib/Runtime/file.cpp b/FortranRuntime/lib/Runtime/file.cpp
index 80829d844881e8..de52dafd12df9a 100644
--- a/FortranRuntime/lib/Runtime/file.cpp
+++ b/FortranRuntime/lib/Runtime/file.cpp
@@ -7,9 +7,9 @@
//===----------------------------------------------------------------------===//
#include "file.h"
+#include "FortranRuntime/Runtime/memory.h"
#include "tools.h"
-#include "flang/Common/magic-numbers.h"
-#include "flang/Runtime/memory.h"
+#include "flang/Runtime/magic-numbers.h"
#include <algorithm>
#include <cerrno>
#include <cstring>
diff --git a/FortranRuntime/lib/Runtime/file.h b/FortranRuntime/lib/Runtime/file.h
index 66d62756634b24..60ddf2a2741610 100644
--- a/FortranRuntime/lib/Runtime/file.h
+++ b/FortranRuntime/lib/Runtime/file.h
@@ -11,9 +11,9 @@
#ifndef FORTRAN_RUNTIME_FILE_H_
#define FORTRAN_RUNTIME_FILE_H_
-#include "flang/Common/optional.h"
-#include "flang/Runtime/memory.h"
+#include "FortranRuntime/Runtime/memory.h"
#include "io-error.h"
+#include "flang/Common/optional.h"
#include <cinttypes>
namespace Fortran::runtime::io {
diff --git a/FortranRuntime/lib/Runtime/findloc.cpp b/FortranRuntime/lib/Runtime/findloc.cpp
index 47c51fbcef4939..da5fe0c0a0a467 100644
--- a/FortranRuntime/lib/Runtime/findloc.cpp
+++ b/FortranRuntime/lib/Runtime/findloc.cpp
@@ -9,9 +9,9 @@
// Implements FINDLOC for all required operand types and shapes and result
// integer kinds.
+#include "reduction-templates.h"
#include "flang/Runtime/character.h"
#include "flang/Runtime/reduction.h"
-#include "reduction-templates.h"
#include <cinttypes>
#include <complex>
diff --git a/FortranRuntime/lib/Runtime/format-implementation.h b/FortranRuntime/lib/Runtime/format-implementation.h
index 8d0d0f3376eafc..f17f0a2cb4bfd9 100644
--- a/FortranRuntime/lib/Runtime/format-implementation.h
+++ b/FortranRuntime/lib/Runtime/format-implementation.h
@@ -12,12 +12,12 @@
#define FORTRAN_RUNTIME_FORMAT_IMPLEMENTATION_H_
#include "emit-encoded.h"
-#include "flang/Common/decimal.h"
-#include "flang/Common/format.h"
-#include "flang/Runtime/main.h"
#include "format.h"
#include "io-stmt.h"
#include "memory.h"
+#include "flang/Common/decimal.h"
+#include "flang/Common/format.h"
+#include "flang/Runtime/main.h"
#include <algorithm>
#include <cstring>
#include <limits>
diff --git a/FortranRuntime/lib/Runtime/format.h b/FortranRuntime/lib/Runtime/format.h
index 3e0807ee452a7e..098a251a04d568 100644
--- a/FortranRuntime/lib/Runtime/format.h
+++ b/FortranRuntime/lib/Runtime/format.h
@@ -12,11 +12,11 @@
#define FORTRAN_RUNTIME_FORMAT_H_
#include "environment.h"
+#include "io-error.h"
#include "flang/Common/Fortran-consts.h"
#include "flang/Common/decimal.h"
#include "flang/Common/optional.h"
#include "flang/Runtime/freestanding-tools.h"
-#include "io-error.h"
#include <cinttypes>
namespace Fortran::runtime {
diff --git a/FortranRuntime/lib/Runtime/inquiry.cpp b/FortranRuntime/lib/Runtime/inquiry.cpp
index 172b46037d6c4b..c24492754b4f43 100644
--- a/FortranRuntime/lib/Runtime/inquiry.cpp
+++ b/FortranRuntime/lib/Runtime/inquiry.cpp
@@ -10,8 +10,8 @@
// inquire about shape information of arrays -- LBOUND and SIZE.
#include "flang/Runtime/inquiry.h"
+#include "FortranRuntime/Runtime/descriptor.h"
#include "copy.h"
-#include "flang/Runtime/descriptor.h"
#include "terminator.h"
#include "tools.h"
#include <algorithm>
diff --git a/FortranRuntime/lib/Runtime/internal-unit.cpp b/FortranRuntime/lib/Runtime/internal-unit.cpp
index 81b937ba63d4b8..4494de9dddc1a1 100644
--- a/FortranRuntime/lib/Runtime/internal-unit.cpp
+++ b/FortranRuntime/lib/Runtime/internal-unit.cpp
@@ -7,9 +7,9 @@
//===----------------------------------------------------------------------===//
#include "internal-unit.h"
-#include "flang/Runtime/descriptor.h"
-#include "flang/Runtime/freestanding-tools.h"
+#include "FortranRuntime/Runtime/descriptor.h"
#include "io-error.h"
+#include "flang/Runtime/freestanding-tools.h"
#include <algorithm>
#include <type_traits>
@@ -36,6 +36,8 @@ RT_API_ATTRS InternalDescriptorUnit<DIR>::InternalDescriptorUnit(
Descriptor &d{descriptor()};
RUNTIME_CHECK(
terminator, that.SizeInBytes() <= d.SizeInBytes(maxRank, true, 0));
+ RUNTIME_CHECK(terminator,
+ that.SizeInBytes() <= MaxDescriptorSizeInBytes(maxRank, true, 0));
new (&d) Descriptor{that};
d.Check();
internalIoCharKind = thatType->second;
diff --git a/FortranRuntime/lib/Runtime/internal-unit.h b/FortranRuntime/lib/Runtime/internal-unit.h
index c4107696810f2b..7579016f14646d 100644
--- a/FortranRuntime/lib/Runtime/internal-unit.h
+++ b/FortranRuntime/lib/Runtime/internal-unit.h
@@ -11,8 +11,8 @@
#ifndef FORTRAN_RUNTIME_INTERNAL_UNIT_H_
#define FORTRAN_RUNTIME_INTERNAL_UNIT_H_
+#include "FortranRuntime/Runtime/descriptor.h"
#include "connection.h"
-#include "flang/Runtime/descriptor.h"
#include <cinttypes>
#include <type_traits>
diff --git a/FortranRuntime/lib/Runtime/io-api-common.h b/FortranRuntime/lib/Runtime/io-api-common.h
index 427666723501a2..fed1d11d6ce6a6 100644
--- a/FortranRuntime/lib/Runtime/io-api-common.h
+++ b/FortranRuntime/lib/Runtime/io-api-common.h
@@ -9,12 +9,12 @@
#ifndef FORTRAN_RUNTIME_IO_API_COMMON_H_
#define FORTRAN_RUNTIME_IO_API_COMMON_H_
-#include "flang/Common/api-attrs.h"
-#include "flang/Common/optional.h"
-#include "flang/Runtime/io-api.h"
+#include "FortranRuntime/Runtime/io-api-funcs.h"
#include "io-stmt.h"
#include "terminator.h"
#include "unit.h"
+#include "flang/Common/api-attrs.h"
+#include "flang/Common/optional.h"
namespace Fortran::runtime::io {
diff --git a/FortranRuntime/lib/Runtime/io-api-minimal.cpp b/FortranRuntime/lib/Runtime/io-api-minimal.cpp
index 683694bd63c068..8cde2333804572 100644
--- a/FortranRuntime/lib/Runtime/io-api-minimal.cpp
+++ b/FortranRuntime/lib/Runtime/io-api-minimal.cpp
@@ -9,8 +9,8 @@
// Implements the subset of the I/O statement API needed for basic
// list-directed output (PRINT *) of intrinsic types.
+#include "FortranRuntime/Runtime/io-api-funcs.h"
#include "edit-output.h"
-#include "flang/Runtime/io-api.h"
#include "format.h"
#include "io-api-common.h"
#include "io-stmt.h"
diff --git a/FortranRuntime/lib/Runtime/io-api.cpp b/FortranRuntime/lib/Runtime/io-api.cpp
index 102ea26b359111..fa95d68a004b51 100644
--- a/FortranRuntime/lib/Runtime/io-api.cpp
+++ b/FortranRuntime/lib/Runtime/io-api.cpp
@@ -13,20 +13,20 @@
// OutputReal{32,64}, OutputComplex{32,64}, OutputAscii, & EndIoStatement()
// are in runtime/io-api-minimal.cpp.
-#include "flang/Runtime/io-api.h"
+#include "FortranRuntime/Runtime/descriptor.h"
+#include "FortranRuntime/Runtime/io-api-funcs.h"
+#include "FortranRuntime/Runtime/memory.h"
#include "descriptor-io.h"
#include "edit-input.h"
#include "edit-output.h"
#include "environment.h"
-#include "flang/Common/optional.h"
-#include "flang/Runtime/descriptor.h"
-#include "flang/Runtime/memory.h"
#include "format.h"
#include "io-api-common.h"
#include "io-stmt.h"
#include "terminator.h"
#include "tools.h"
#include "unit.h"
+#include "flang/Common/optional.h"
#include <cstdlib>
#include <memory>
diff --git a/FortranRuntime/lib/Runtime/io-error.cpp b/FortranRuntime/lib/Runtime/io-error.cpp
index 400b211c1c418e..053667462058de 100644
--- a/FortranRuntime/lib/Runtime/io-error.cpp
+++ b/FortranRuntime/lib/Runtime/io-error.cpp
@@ -9,7 +9,7 @@
#include "io-error.h"
#include "config.h"
#include "tools.h"
-#include "flang/Common/magic-numbers.h"
+#include "flang/Runtime/magic-numbers.h"
#include <cerrno>
#include <cstdarg>
#include <cstdio>
diff --git a/FortranRuntime/lib/Runtime/io-error.h b/FortranRuntime/lib/Runtime/io-error.h
index 7388a2134ed0d3..e2018cc2ea0ab1 100644
--- a/FortranRuntime/lib/Runtime/io-error.h
+++ b/FortranRuntime/lib/Runtime/io-error.h
@@ -15,8 +15,8 @@
#ifndef FORTRAN_RUNTIME_IO_ERROR_H_
#define FORTRAN_RUNTIME_IO_ERROR_H_
-#include "flang/Runtime/iostat.h"
-#include "flang/Runtime/memory.h"
+#include "FortranRuntime/Runtime/iostat-funcs.h"
+#include "FortranRuntime/Runtime/memory.h"
#include "terminator.h"
#include <cinttypes>
diff --git a/FortranRuntime/lib/Runtime/io-stmt.cpp b/FortranRuntime/lib/Runtime/io-stmt.cpp
index 5be5d98ace0d8a..fe02e221671665 100644
--- a/FortranRuntime/lib/Runtime/io-stmt.cpp
+++ b/FortranRuntime/lib/Runtime/io-stmt.cpp
@@ -7,9 +7,9 @@
//===----------------------------------------------------------------------===//
#include "io-stmt.h"
+#include "FortranRuntime/Runtime/memory.h"
#include "connection.h"
#include "emit-encoded.h"
-#include "flang/Runtime/memory.h"
#include "format.h"
#include "tools.h"
#include "unit.h"
diff --git a/FortranRuntime/lib/Runtime/io-stmt.h b/FortranRuntime/lib/Runtime/io-stmt.h
index 79a8b28c8aa19f..21746ff1966218 100644
--- a/FortranRuntime/lib/Runtime/io-stmt.h
+++ b/FortranRuntime/lib/Runtime/io-stmt.h
@@ -11,16 +11,16 @@
#ifndef FORTRAN_RUNTIME_IO_STMT_H_
#define FORTRAN_RUNTIME_IO_STMT_H_
+#include "FortranRuntime/Runtime/descriptor.h"
+#include "FortranRuntime/Runtime/io-api-funcs.h"
#include "connection.h"
#include "file.h"
-#include "flang/Common/optional.h"
-#include "flang/Common/reference-wrapper.h"
-#include "flang/Common/visit.h"
-#include "flang/Runtime/descriptor.h"
-#include "flang/Runtime/io-api.h"
#include "format.h"
#include "internal-unit.h"
#include "io-error.h"
+#include "flang/Common/optional.h"
+#include "flang/Common/reference-wrapper.h"
+#include "flang/Common/visit.h"
#include <flang/Common/variant.h>
#include <functional>
#include <type_traits>
diff --git a/FortranRuntime/lib/Runtime/iostat.cpp b/FortranRuntime/lib/Runtime/iostat.cpp
index f23567be4910da..8d769a09252fd6 100644
--- a/FortranRuntime/lib/Runtime/iostat.cpp
+++ b/FortranRuntime/lib/Runtime/iostat.cpp
@@ -6,7 +6,7 @@
//
//===----------------------------------------------------------------------===//
-#include "flang/Runtime/iostat.h"
+#include "FortranRuntime/Runtime/iostat-funcs.h"
namespace Fortran::runtime::io {
RT_OFFLOAD_API_GROUP_BEGIN
diff --git a/FortranRuntime/lib/Runtime/matmul-transpose.cpp b/FortranRuntime/lib/Runtime/matmul-transpose.cpp
index 3b4b487daa335e..ec5388e3fca793 100644
--- a/FortranRuntime/lib/Runtime/matmul-transpose.cpp
+++ b/FortranRuntime/lib/Runtime/matmul-transpose.cpp
@@ -21,12 +21,12 @@
// to use the faster BLAS routines.
#include "flang/Runtime/matmul-transpose.h"
+#include "FortranRuntime/Runtime/descriptor.h"
+#include "terminator.h"
+#include "tools.h"
#include "flang/Common/optional.h"
#include "flang/Runtime/c-or-cpp.h"
#include "flang/Runtime/cpp-type.h"
-#include "flang/Runtime/descriptor.h"
-#include "terminator.h"
-#include "tools.h"
#include <cstring>
namespace {
diff --git a/FortranRuntime/lib/Runtime/matmul.cpp b/FortranRuntime/lib/Runtime/matmul.cpp
index 62674316bc6a57..01be7f7c75bc45 100644
--- a/FortranRuntime/lib/Runtime/matmul.cpp
+++ b/FortranRuntime/lib/Runtime/matmul.cpp
@@ -20,12 +20,12 @@
// Places where BLAS routines could be called are marked as TODO items.
#include "flang/Runtime/matmul.h"
+#include "FortranRuntime/Runtime/descriptor.h"
+#include "terminator.h"
+#include "tools.h"
#include "flang/Common/optional.h"
#include "flang/Runtime/c-or-cpp.h"
#include "flang/Runtime/cpp-type.h"
-#include "flang/Runtime/descriptor.h"
-#include "terminator.h"
-#include "tools.h"
#include <cstring>
namespace {
diff --git a/FortranRuntime/lib/Runtime/memory.cpp b/FortranRuntime/lib/Runtime/memory.cpp
index bf2c4cd4a35470..a4cebf7edc6c64 100644
--- a/FortranRuntime/lib/Runtime/memory.cpp
+++ b/FortranRuntime/lib/Runtime/memory.cpp
@@ -6,10 +6,10 @@
//
//===----------------------------------------------------------------------===//
-#include "flang/Runtime/memory.h"
-#include "flang/Runtime/freestanding-tools.h"
+#include "FortranRuntime/Runtime/memory.h"
#include "terminator.h"
#include "tools.h"
+#include "flang/Runtime/freestanding-tools.h"
#include <cstdlib>
namespace Fortran::runtime {
diff --git a/FortranRuntime/lib/Runtime/misc-intrinsic.cpp b/FortranRuntime/lib/Runtime/misc-intrinsic.cpp
index a0f41e4e3f156c..91a3b136e009a5 100644
--- a/FortranRuntime/lib/Runtime/misc-intrinsic.cpp
+++ b/FortranRuntime/lib/Runtime/misc-intrinsic.cpp
@@ -7,10 +7,10 @@
//===----------------------------------------------------------------------===//
#include "flang/Runtime/misc-intrinsic.h"
-#include "flang/Common/optional.h"
-#include "flang/Runtime/descriptor.h"
+#include "FortranRuntime/Runtime/descriptor.h"
#include "terminator.h"
#include "tools.h"
+#include "flang/Common/optional.h"
#include <algorithm>
#include <cstdio>
#include <cstring>
diff --git a/FortranRuntime/lib/Runtime/namelist.cpp b/FortranRuntime/lib/Runtime/namelist.cpp
index 1c8942fc375c43..46036549bcd316 100644
--- a/FortranRuntime/lib/Runtime/namelist.cpp
+++ b/FortranRuntime/lib/Runtime/namelist.cpp
@@ -7,9 +7,9 @@
//===----------------------------------------------------------------------===//
#include "namelist.h"
+#include "FortranRuntime/Runtime/io-api-funcs.h"
#include "descriptor-io.h"
#include "emit-encoded.h"
-#include "flang/Runtime/io-api.h"
#include "io-stmt.h"
#include <algorithm>
#include <cstring>
diff --git a/FortranRuntime/lib/Runtime/namelist.h b/FortranRuntime/lib/Runtime/namelist.h
index 2c4d331ae05e85..04432f8a08cb97 100644
--- a/FortranRuntime/lib/Runtime/namelist.h
+++ b/FortranRuntime/lib/Runtime/namelist.h
@@ -11,8 +11,8 @@
#ifndef FORTRAN_RUNTIME_NAMELIST_H_
#define FORTRAN_RUNTIME_NAMELIST_H_
-#include "flang/Common/api-attrs.h"
#include "non-tbp-dio.h"
+#include "flang/Common/api-attrs.h"
#include <cstddef>
diff --git a/FortranRuntime/lib/Runtime/numeric-templates.h b/FortranRuntime/lib/Runtime/numeric-templates.h
index f0045e8ee36e20..159b8b0b9579ad 100644
--- a/FortranRuntime/lib/Runtime/numeric-templates.h
+++ b/FortranRuntime/lib/Runtime/numeric-templates.h
@@ -18,10 +18,10 @@
#ifndef FORTRAN_RUNTIME_NUMERIC_TEMPLATES_H_
#define FORTRAN_RUNTIME_NUMERIC_TEMPLATES_H_
-#include "flang/Common/api-attrs.h"
-#include "flang/Common/float128.h"
#include "terminator.h"
#include "tools.h"
+#include "flang/Common/api-attrs.h"
+#include "flang/Common/float128.h"
#include <cstdint>
#include <limits>
diff --git a/FortranRuntime/lib/Runtime/numeric.cpp b/FortranRuntime/lib/Runtime/numeric.cpp
index a3fcfeaa9ee266..b0f68a7fc81d29 100644
--- a/FortranRuntime/lib/Runtime/numeric.cpp
+++ b/FortranRuntime/lib/Runtime/numeric.cpp
@@ -7,10 +7,10 @@
//===----------------------------------------------------------------------===//
#include "flang/Runtime/numeric.h"
-#include "flang/Common/float128.h"
#include "numeric-templates.h"
#include "terminator.h"
#include "tools.h"
+#include "flang/Common/float128.h"
#include <cfloat>
#include <climits>
#include <cmath>
diff --git a/FortranRuntime/lib/Runtime/product.cpp b/FortranRuntime/lib/Runtime/product.cpp
index 8c11bf4144919e..e4a6e81bd0c508 100644
--- a/FortranRuntime/lib/Runtime/product.cpp
+++ b/FortranRuntime/lib/Runtime/product.cpp
@@ -8,9 +8,9 @@
// Implements PRODUCT for all required operand types and shapes.
+#include "reduction-templates.h"
#include "flang/Common/float128.h"
#include "flang/Runtime/reduction.h"
-#include "reduction-templates.h"
#include <cfloat>
#include <cinttypes>
#include <complex>
diff --git a/FortranRuntime/lib/Runtime/random-templates.h b/FortranRuntime/lib/Runtime/random-templates.h
index 801484225bc211..9faa9c7cfa7002 100644
--- a/FortranRuntime/lib/Runtime/random-templates.h
+++ b/FortranRuntime/lib/Runtime/random-templates.h
@@ -9,10 +9,10 @@
#ifndef FORTRAN_RUNTIME_RANDOM_TEMPLATES_H_
#define FORTRAN_RUNTIME_RANDOM_TEMPLATES_H_
-#include "flang/Common/optional.h"
-#include "flang/Runtime/descriptor.h"
+#include "FortranRuntime/Runtime/descriptor.h"
#include "lock.h"
#include "numeric-templates.h"
+#include "flang/Common/optional.h"
#include <algorithm>
#include <random>
diff --git a/FortranRuntime/lib/Runtime/random.cpp b/FortranRuntime/lib/Runtime/random.cpp
index 8e1561960d48be..911b59b508eb4f 100644
--- a/FortranRuntime/lib/Runtime/random.cpp
+++ b/FortranRuntime/lib/Runtime/random.cpp
@@ -10,14 +10,14 @@
// RANDOM_SEED.
#include "flang/Runtime/random.h"
+#include "FortranRuntime/Runtime/descriptor.h"
+#include "lock.h"
+#include "random-templates.h"
+#include "terminator.h"
#include "flang/Common/float128.h"
#include "flang/Common/leading-zero-bit-count.h"
#include "flang/Common/uint128.h"
#include "flang/Runtime/cpp-type.h"
-#include "flang/Runtime/descriptor.h"
-#include "lock.h"
-#include "random-templates.h"
-#include "terminator.h"
#include <cmath>
#include <cstdint>
#include <limits>
diff --git a/FortranRuntime/lib/Runtime/reduce.cpp b/FortranRuntime/lib/Runtime/reduce.cpp
index 4d33c2a714e5af..a020ffef6fe6a5 100644
--- a/FortranRuntime/lib/Runtime/reduce.cpp
+++ b/FortranRuntime/lib/Runtime/reduce.cpp
@@ -9,7 +9,7 @@
// REDUCE() implementation
#include "flang/Runtime/reduce.h"
-#include "flang/Runtime/descriptor.h"
+#include "FortranRuntime/Runtime/descriptor.h"
#include "reduction-templates.h"
#include "terminator.h"
#include "tools.h"
diff --git a/FortranRuntime/lib/Runtime/reduction-templates.h b/FortranRuntime/lib/Runtime/reduction-templates.h
index 30ae641ba7b3ac..714584ec613ba3 100644
--- a/FortranRuntime/lib/Runtime/reduction-templates.h
+++ b/FortranRuntime/lib/Runtime/reduction-templates.h
@@ -21,11 +21,11 @@
#ifndef FORTRAN_RUNTIME_REDUCTION_TEMPLATES_H_
#define FORTRAN_RUNTIME_REDUCTION_TEMPLATES_H_
-#include "flang/Runtime/cpp-type.h"
-#include "flang/Runtime/descriptor.h"
+#include "FortranRuntime/Runtime/descriptor.h"
#include "numeric-templates.h"
#include "terminator.h"
#include "tools.h"
+#include "flang/Runtime/cpp-type.h"
#include <algorithm>
namespace Fortran::runtime {
diff --git a/FortranRuntime/lib/Runtime/reduction.cpp b/FortranRuntime/lib/Runtime/reduction.cpp
index f4e1f2aa6818d5..21930fee07ead7 100644
--- a/FortranRuntime/lib/Runtime/reduction.cpp
+++ b/FortranRuntime/lib/Runtime/reduction.cpp
@@ -14,7 +14,7 @@
// NORM2, MAXLOC, MINLOC, MAXVAL, and MINVAL are in extrema.cpp.
#include "flang/Runtime/reduction.h"
-#include "flang/Runtime/descriptor.h"
+#include "FortranRuntime/Runtime/descriptor.h"
#include "reduction-templates.h"
#include <cinttypes>
diff --git a/FortranRuntime/lib/Runtime/stack.h b/FortranRuntime/lib/Runtime/stack.h
index dc5b6101d3da0f..36e2d0a103a887 100644
--- a/FortranRuntime/lib/Runtime/stack.h
+++ b/FortranRuntime/lib/Runtime/stack.h
@@ -13,7 +13,7 @@
#ifndef FORTRAN_RUNTIME_STACK_H_
#define FORTRAN_RUNTIME_STACK_H_
-#include "flang/Runtime/memory.h"
+#include "FortranRuntime/Runtime/memory.h"
#include "terminator.h"
namespace Fortran::runtime {
diff --git a/FortranRuntime/lib/Runtime/stat.cpp b/FortranRuntime/lib/Runtime/stat.cpp
index 01ae922e080865..1af6c43102518b 100644
--- a/FortranRuntime/lib/Runtime/stat.cpp
+++ b/FortranRuntime/lib/Runtime/stat.cpp
@@ -7,7 +7,7 @@
//===----------------------------------------------------------------------===//
#include "stat.h"
-#include "flang/Runtime/descriptor.h"
+#include "FortranRuntime/Runtime/descriptor.h"
#include "terminator.h"
#include "tools.h"
diff --git a/FortranRuntime/lib/Runtime/stat.h b/FortranRuntime/lib/Runtime/stat.h
index a679f9da16dd46..eccd69024d726b 100644
--- a/FortranRuntime/lib/Runtime/stat.h
+++ b/FortranRuntime/lib/Runtime/stat.h
@@ -13,7 +13,7 @@
#define FORTRAN_RUNTIME_STAT_H_
#include "flang/Common/ISO_Fortran_binding_wrapper.h"
#include "flang/Common/api-attrs.h"
-#include "flang/Common/magic-numbers.h"
+#include "flang/Runtime/magic-numbers.h"
namespace Fortran::runtime {
class Descriptor;
diff --git a/FortranRuntime/lib/Runtime/sum.cpp b/FortranRuntime/lib/Runtime/sum.cpp
index e33b77e20f0f11..64982b9fd53690 100644
--- a/FortranRuntime/lib/Runtime/sum.cpp
+++ b/FortranRuntime/lib/Runtime/sum.cpp
@@ -12,9 +12,9 @@
// cancellation on intermediate results by using "Kahan summation"
// (basically the same as manual "double-double").
+#include "reduction-templates.h"
#include "flang/Common/float128.h"
#include "flang/Runtime/reduction.h"
-#include "reduction-templates.h"
#include <cfloat>
#include <cinttypes>
#include <complex>
diff --git a/FortranRuntime/lib/Runtime/support.cpp b/FortranRuntime/lib/Runtime/support.cpp
index 0a39ff24b0cafc..798d502ba248e2 100644
--- a/FortranRuntime/lib/Runtime/support.cpp
+++ b/FortranRuntime/lib/Runtime/support.cpp
@@ -7,8 +7,8 @@
//===----------------------------------------------------------------------===//
#include "flang/Runtime/support.h"
+#include "FortranRuntime/Runtime/descriptor.h"
#include "ISO_Fortran_util.h"
-#include "flang/Runtime/descriptor.h"
#include "type-info.h"
namespace Fortran::runtime {
diff --git a/FortranRuntime/lib/Runtime/temporary-stack.cpp b/FortranRuntime/lib/Runtime/temporary-stack.cpp
index f944dfb7aa1471..d8ff08e51cc211 100644
--- a/FortranRuntime/lib/Runtime/temporary-stack.cpp
+++ b/FortranRuntime/lib/Runtime/temporary-stack.cpp
@@ -10,11 +10,11 @@
// temporaries. For use in HLFIR lowering.
#include "flang/Runtime/temporary-stack.h"
+#include "FortranRuntime/Runtime/descriptor.h"
+#include "FortranRuntime/Runtime/memory.h"
+#include "terminator.h"
#include "flang/Common/ISO_Fortran_binding_wrapper.h"
#include "flang/Runtime/assign.h"
-#include "flang/Runtime/descriptor.h"
-#include "flang/Runtime/memory.h"
-#include "terminator.h"
namespace {
diff --git a/FortranRuntime/lib/Runtime/time-intrinsic.cpp b/FortranRuntime/lib/Runtime/time-intrinsic.cpp
index 4b362c90c52f25..15c42077c0afd5 100644
--- a/FortranRuntime/lib/Runtime/time-intrinsic.cpp
+++ b/FortranRuntime/lib/Runtime/time-intrinsic.cpp
@@ -9,10 +9,10 @@
// Implements time-related intrinsic subroutines.
#include "flang/Runtime/time-intrinsic.h"
-#include "flang/Runtime/cpp-type.h"
-#include "flang/Runtime/descriptor.h"
+#include "FortranRuntime/Runtime/descriptor.h"
#include "terminator.h"
#include "tools.h"
+#include "flang/Runtime/cpp-type.h"
#include <algorithm>
#include <cstdint>
#include <cstdio>
diff --git a/FortranRuntime/lib/Runtime/tools.h b/FortranRuntime/lib/Runtime/tools.h
index 4058767ca283a9..332ffac77f2595 100644
--- a/FortranRuntime/lib/Runtime/tools.h
+++ b/FortranRuntime/lib/Runtime/tools.h
@@ -9,13 +9,13 @@
#ifndef FORTRAN_RUNTIME_TOOLS_H_
#define FORTRAN_RUNTIME_TOOLS_H_
+#include "FortranRuntime/Runtime/descriptor.h"
+#include "FortranRuntime/Runtime/memory.h"
+#include "stat.h"
+#include "terminator.h"
#include "flang/Common/optional.h"
#include "flang/Runtime/cpp-type.h"
-#include "flang/Runtime/descriptor.h"
#include "flang/Runtime/freestanding-tools.h"
-#include "flang/Runtime/memory.h"
-#include "stat.h"
-#include "terminator.h"
#include <cstring>
#include <functional>
#include <map>
diff --git a/FortranRuntime/lib/Runtime/transformational.cpp b/FortranRuntime/lib/Runtime/transformational.cpp
index 66dc5bd4939bae..28dd02a28036de 100644
--- a/FortranRuntime/lib/Runtime/transformational.cpp
+++ b/FortranRuntime/lib/Runtime/transformational.cpp
@@ -17,11 +17,11 @@
// of the standard but it more likely to conform with its intent.
#include "flang/Runtime/transformational.h"
+#include "FortranRuntime/Runtime/descriptor.h"
#include "copy.h"
-#include "flang/Common/float128.h"
-#include "flang/Runtime/descriptor.h"
#include "terminator.h"
#include "tools.h"
+#include "flang/Common/float128.h"
namespace Fortran::runtime {
diff --git a/FortranRuntime/lib/Runtime/type-code.cpp b/FortranRuntime/lib/Runtime/type-code.cpp
index 2709ca1be75a53..16f5497bc7a709 100644
--- a/FortranRuntime/lib/Runtime/type-code.cpp
+++ b/FortranRuntime/lib/Runtime/type-code.cpp
@@ -6,7 +6,7 @@
//
//===----------------------------------------------------------------------===//
-#include "flang/Runtime/type-code.h"
+#include "FortranRuntime/Runtime/type-code.h"
#include <cstdint>
namespace Fortran::runtime {
diff --git a/FortranRuntime/lib/Runtime/type-info.cpp b/FortranRuntime/lib/Runtime/type-info.cpp
index 24fc9c33d92819..19e9211fc063f4 100644
--- a/FortranRuntime/lib/Runtime/type-info.cpp
+++ b/FortranRuntime/lib/Runtime/type-info.cpp
@@ -84,10 +84,14 @@ RT_API_ATTRS std::size_t Component::SizeInBytes(
return GetElementByteSize(instance) * GetElements(instance);
} else if (category() == TypeCategory::Derived) {
const DerivedType *type{derivedType()};
- return Descriptor::SizeInBytes(
- rank_, true, type ? type->LenParameters() : 0);
+ auto bytes {Descriptor::SizeInBytes(
+ rank_, true, type ? type->LenParameters() : 0)};
+ assert(bytes <= MaxDescriptorSizeInBytes( rank_, true, type ? type->LenParameters() : 0));
+ return bytes;
} else {
- return Descriptor::SizeInBytes(rank_);
+ auto bytes{ Descriptor::SizeInBytes(rank_)};
+ assert(bytes <= MaxDescriptorSizeInBytes( rank_));
+ return bytes;
}
}
diff --git a/FortranRuntime/lib/Runtime/type-info.h b/FortranRuntime/lib/Runtime/type-info.h
index ff3523bcb2b8eb..150942547c2ee8 100644
--- a/FortranRuntime/lib/Runtime/type-info.h
+++ b/FortranRuntime/lib/Runtime/type-info.h
@@ -12,11 +12,11 @@
// A C++ perspective of the derived type description schemata in
// flang/module/__fortran_type_info.f90.
+#include "FortranRuntime/Runtime/descriptor.h"
+#include "terminator.h"
#include "flang/Common/Fortran-consts.h"
#include "flang/Common/bit-population-count.h"
#include "flang/Common/optional.h"
-#include "flang/Runtime/descriptor.h"
-#include "terminator.h"
#include <cinttypes>
#include <memory>
diff --git a/FortranRuntime/lib/Runtime/unit-map.h b/FortranRuntime/lib/Runtime/unit-map.h
index 4e61246f9a2d86..f37e2df7f3b15a 100644
--- a/FortranRuntime/lib/Runtime/unit-map.h
+++ b/FortranRuntime/lib/Runtime/unit-map.h
@@ -12,10 +12,10 @@
#ifndef FORTRAN_RUNTIME_UNIT_MAP_H_
#define FORTRAN_RUNTIME_UNIT_MAP_H_
-#include "flang/Common/fast-int-set.h"
-#include "flang/Runtime/memory.h"
+#include "FortranRuntime/Runtime/memory.h"
#include "lock.h"
#include "unit.h"
+#include "flang/Common/fast-int-set.h"
#include <cstdint>
#include <cstdlib>
diff --git a/FortranRuntime/lib/Runtime/unit.cpp b/FortranRuntime/lib/Runtime/unit.cpp
index f6e4dc2a7befd4..496679ee8ce5f4 100644
--- a/FortranRuntime/lib/Runtime/unit.cpp
+++ b/FortranRuntime/lib/Runtime/unit.cpp
@@ -19,13 +19,13 @@
namespace Fortran::runtime::io {
-#ifndef FORTRANRUNTIME_NO_GLOBAL_VAR_DEFS
+#ifndef FLANG_RUNTIME_NO_GLOBAL_VAR_DEFS
RT_OFFLOAD_VAR_GROUP_BEGIN
RT_VAR_ATTRS ExternalFileUnit *defaultInput{nullptr}; // unit 5
RT_VAR_ATTRS ExternalFileUnit *defaultOutput{nullptr}; // unit 6
RT_VAR_ATTRS ExternalFileUnit *errorOutput{nullptr}; // unit 0 extension
RT_OFFLOAD_VAR_GROUP_END
-#endif // FORTRANRUNTIME_NO_GLOBAL_VAR_DEFS
+#endif // FLANG_RUNTIME_NO_GLOBAL_VAR_DEFS
RT_OFFLOAD_API_GROUP_BEGIN
diff --git a/FortranRuntime/lib/Runtime/unit.h b/FortranRuntime/lib/Runtime/unit.h
index 993fbf2977cebf..4a7444aedbe5b6 100644
--- a/FortranRuntime/lib/Runtime/unit.h
+++ b/FortranRuntime/lib/Runtime/unit.h
@@ -11,18 +11,18 @@
#ifndef FORTRAN_RUNTIME_UNIT_H_
#define FORTRAN_RUNTIME_UNIT_H_
+#include "FortranRuntime/Runtime/memory.h"
#include "buffer.h"
#include "connection.h"
#include "environment.h"
#include "file.h"
-#include "flang/Common/constexpr-bitset.h"
-#include "flang/Common/optional.h"
-#include "flang/Runtime/memory.h"
#include "format.h"
#include "io-error.h"
#include "io-stmt.h"
#include "lock.h"
#include "terminator.h"
+#include "flang/Common/constexpr-bitset.h"
+#include "flang/Common/optional.h"
#include <cstdlib>
#include <cstring>
#include <flang/Common/variant.h>
diff --git a/FortranRuntime/lib/Runtime/utf.cpp b/FortranRuntime/lib/Runtime/utf.cpp
index d2839f9cf3793a..635451153d39a6 100644
--- a/FortranRuntime/lib/Runtime/utf.cpp
+++ b/FortranRuntime/lib/Runtime/utf.cpp
@@ -10,7 +10,7 @@
namespace Fortran::runtime {
-#ifndef FORTRANRUNTIME_NO_GLOBAL_VAR_DEFS
+#ifndef FLANG_RUNTIME_NO_GLOBAL_VAR_DEFS
// clang-format off
RT_OFFLOAD_VAR_GROUP_BEGIN
const RT_CONST_VAR_ATTRS std::uint8_t UTF8FirstByteTable[256]{
@@ -41,7 +41,7 @@ const RT_CONST_VAR_ATTRS std::uint8_t UTF8FirstByteTable[256]{
};
RT_OFFLOAD_VAR_GROUP_END
// clang-format on
-#endif // FORTRANRUNTIME_NO_GLOBAL_VAR_DEFS
+#endif // FLANG_RUNTIME_NO_GLOBAL_VAR_DEFS
RT_OFFLOAD_API_GROUP_BEGIN
diff --git a/FortranRuntime/lib/Testing/CMakeLists.txt b/FortranRuntime/lib/Testing/CMakeLists.txt
index d5caada3fb68e8..41ad0d7314dd37 100644
--- a/FortranRuntime/lib/Testing/CMakeLists.txt
+++ b/FortranRuntime/lib/Testing/CMakeLists.txt
@@ -8,13 +8,12 @@
set(public_headers "")
file(GLOB_RECURSE public_headers
- "${FLANGRUNTIME_SOURCE_DIR}/lib/Testing/*.h"
+ "${FLANG_SOURCE_DIR}/lib/Testing/*.h"
)
add_fortranruntime_library(NonGTestTesting EXCLUDE_FROM_ALL LINK_TO_LLVM
- testing.cpp
- fp-testing.cpp
+ ${FLANG_SOURCE_DIR}/lib/Testing/testing.cpp
+ ${FLANG_SOURCE_DIR}/lib/Testing/fp-testing.cpp
ADDITIONAL_HEADERS
${public_headers}
)
-
diff --git a/FortranRuntime/test/lit.cfg.py b/FortranRuntime/test/lit.cfg.py
index a9f47f142bb884..1b9041111b72e8 100644
--- a/FortranRuntime/test/lit.cfg.py
+++ b/FortranRuntime/test/lit.cfg.py
@@ -73,7 +73,7 @@
# Define some variables to help us test that the flang runtime doesn't depend on
# the C++ runtime libraries. For this we need a C compiler.
libruntime = os.path.join(config.fortranruntime_build_lib_dir, "libFortranRuntime.a")
-include = os.path.join(config.fortranruntime_source_dir, "include")
+include = os.path.join(config.flang_source_dir, "include")
tools.append(
ToolSubst("%cc", command=config.cc, extra_args=isysroot_flag, unresolved="fatal")
)
diff --git a/FortranRuntime/test/lit.site.cfg.py.in b/FortranRuntime/test/lit.site.cfg.py.in
index d860d297ebd7c3..a21fc128086eae 100644
--- a/FortranRuntime/test/lit.site.cfg.py.in
+++ b/FortranRuntime/test/lit.site.cfg.py.in
@@ -4,6 +4,7 @@ import sys
config.llvm_tools_dir = "@LLVM_TOOLS_DIR@"
config.build_lib_dir = "@FORTRANRUNTIME_BUILD_LIB_DIR@"
+config.flang_source_dir = "@FLANG_SOURCE_DIR@"
config.fortranruntime_source_dir = "@FORTRANRUNTIME_SOURCE_DIR@"
config.fortranruntime_binary_test_dir = os.path.dirname(__file__)
config.fortranruntime_build_lib_dir = "@FORTRANRUNTIME_BUILD_LIB_DIR@"
diff --git a/FortranRuntime/unittests/CMakeLists.txt b/FortranRuntime/unittests/CMakeLists.txt
index 1bb788651a8d33..592f2ef7ce42ab 100644
--- a/FortranRuntime/unittests/CMakeLists.txt
+++ b/FortranRuntime/unittests/CMakeLists.txt
@@ -94,7 +94,5 @@ function(add_fortranruntime_nongtest_unittest test_name)
add_fortranruntime_unittest_offload_properties(${test_name}${suffix})
endfunction()
-add_subdirectory(Common)
-add_subdirectory(Decimal)
add_subdirectory(Evaluate)
add_subdirectory(Runtime)
diff --git a/FortranRuntime/unittests/Evaluate/CMakeLists.txt b/FortranRuntime/unittests/Evaluate/CMakeLists.txt
index 567832a2f15bcb..fd3a5755dd1227 100644
--- a/FortranRuntime/unittests/Evaluate/CMakeLists.txt
+++ b/FortranRuntime/unittests/Evaluate/CMakeLists.txt
@@ -7,13 +7,13 @@
#===------------------------------------------------------------------------===#
add_fortranruntime_nongtest_unittest(reshape
-reshape.cpp
+ reshape.cpp
LINK_LIBS
FortranRuntime.unittest
)
add_fortranruntime_nongtest_unittest(ISO-Fortran-binding
-ISO-Fortran-binding.cpp
+ ISO-Fortran-binding.cpp
LINK_LIBS
FortranRuntime.unittest
)
diff --git a/FortranRuntime/unittests/Evaluate/ISO-Fortran-binding.cpp b/FortranRuntime/unittests/Evaluate/ISO-Fortran-binding.cpp
index d2546e0c22d2d6..b68dfbcbd5b335 100644
--- a/FortranRuntime/unittests/Evaluate/ISO-Fortran-binding.cpp
+++ b/FortranRuntime/unittests/Evaluate/ISO-Fortran-binding.cpp
@@ -6,8 +6,8 @@
//
//===----------------------------------------------------------------------===//
+#include "FortranRuntime/Runtime/descriptor.h"
#include "flang/Common/ISO_Fortran_binding_wrapper.h"
-#include "flang/Runtime/descriptor.h"
#include "flang/Testing/testing.h"
#include "llvm/Support/raw_ostream.h"
#include <type_traits>
@@ -28,6 +28,9 @@ template <int rank> class Test_CFI_CDESC_T {
MATCH(false, std::is_const<type>::value);
MATCH(false, std::is_volatile<type>::value);
// suitable in size
+ MATCH(true,
+ Descriptor::SizeInBytes(rank_, false) <=
+ MaxDescriptorSizeInBytes(rank_, false));
if (rank > 0) {
MATCH(sizeof(dvStorage_), Descriptor::SizeInBytes(rank_, false));
} else { // C++ implementation over-allocates for rank=0 by 24bytes.
diff --git a/FortranRuntime/unittests/Evaluate/reshape.cpp b/FortranRuntime/unittests/Evaluate/reshape.cpp
index a93afd2a3c90cd..0233ab37e25c6e 100644
--- a/FortranRuntime/unittests/Evaluate/reshape.cpp
+++ b/FortranRuntime/unittests/Evaluate/reshape.cpp
@@ -6,7 +6,7 @@
//
//===----------------------------------------------------------------------===//
-#include "flang/Runtime/descriptor.h"
+#include "FortranRuntime/Runtime/descriptor.h"
#include "flang/Runtime/transformational.h"
#include "flang/Testing/testing.h"
#include <cinttypes>
diff --git a/FortranRuntime/unittests/Runtime/AccessTest.cpp b/FortranRuntime/unittests/Runtime/AccessTest.cpp
index 3e9feaf945b66d..e72386cc9ac247 100644
--- a/FortranRuntime/unittests/Runtime/AccessTest.cpp
+++ b/FortranRuntime/unittests/Runtime/AccessTest.cpp
@@ -10,9 +10,9 @@
#ifndef _WIN32
#include "CrashHandlerFixture.h"
+#include "gtest/gtest.h"
#include "flang/Runtime/extensions.h"
#include "llvm/ADT/Twine.h"
-#include "gtest/gtest.h"
#include <fcntl.h>
#include <sys/stat.h>
diff --git a/FortranRuntime/unittests/Runtime/Allocatable.cpp b/FortranRuntime/unittests/Runtime/Allocatable.cpp
index c01f85598d21ed..8e10dc408ceae8 100644
--- a/FortranRuntime/unittests/Runtime/Allocatable.cpp
+++ b/FortranRuntime/unittests/Runtime/Allocatable.cpp
@@ -7,8 +7,8 @@
//===----------------------------------------------------------------------===//
#include "flang/Runtime/allocatable.h"
-#include "tools.h"
#include "gtest/gtest.h"
+#include "tools.h"
using namespace Fortran::runtime;
diff --git a/FortranRuntime/unittests/Runtime/ArrayConstructor.cpp b/FortranRuntime/unittests/Runtime/ArrayConstructor.cpp
index 9011da304b6bc3..9d9a4ddae8689f 100644
--- a/FortranRuntime/unittests/Runtime/ArrayConstructor.cpp
+++ b/FortranRuntime/unittests/Runtime/ArrayConstructor.cpp
@@ -6,13 +6,13 @@
//
//===----------------------------------------------------------------------===//
+#include "FortranRuntime/Runtime/array-constructor.h"
+#include "FortranRuntime/Runtime/descriptor.h"
+#include "FortranRuntime/Runtime/type-code.h"
+#include "gtest/gtest.h"
+#include "tools.h"
#include "flang/Runtime/allocatable.h"
-#include "flang/Runtime/array-constructor.h"
#include "flang/Runtime/cpp-type.h"
-#include "flang/Runtime/descriptor.h"
-#include "flang/Runtime/type-code.h"
-#include "tools.h"
-#include "gtest/gtest.h"
#include <memory>
diff --git a/FortranRuntime/unittests/Runtime/CUDA/AllocatorCUF.cpp b/FortranRuntime/unittests/Runtime/CUDA/AllocatorCUF.cpp
index bb1ea411cb7760..d2a2e5a11abf80 100644
--- a/FortranRuntime/unittests/Runtime/CUDA/AllocatorCUF.cpp
+++ b/FortranRuntime/unittests/Runtime/CUDA/AllocatorCUF.cpp
@@ -6,13 +6,13 @@
//
//===----------------------------------------------------------------------===//
-#include "../../../lib/Runtime/terminator.h"
-#include "flang/Runtime/CUDA/allocator.h"
-#include "flang/Runtime/CUDA/descriptor.h"
-#include "flang/Runtime/allocatable.h"
-#include "flang/Runtime/allocator-registry.h"
-#include "flang/Support/Fortran.h"
+#include "FortranRuntime/Runtime/CUDA/allocator.h"
+#include "FortranRuntime/Runtime/CUDA/descriptor.h"
+#include "FortranRuntime/Runtime/allocatable.h"
+#include "FortranRuntime/Runtime/allocator-registry.h"
#include "gtest/gtest.h"
+#include "../../../runtime/terminator.h"
+#include "flang/Support/Fortran.h"
#include "cuda_runtime.h"
diff --git a/FortranRuntime/unittests/Runtime/CharacterTest.cpp b/FortranRuntime/unittests/Runtime/CharacterTest.cpp
index 8829f5e43265b0..610061e2122cd5 100644
--- a/FortranRuntime/unittests/Runtime/CharacterTest.cpp
+++ b/FortranRuntime/unittests/Runtime/CharacterTest.cpp
@@ -10,7 +10,7 @@
// in Fortran.
#include "flang/Runtime/character.h"
-#include "flang/Runtime/descriptor.h"
+#include "FortranRuntime/Runtime/descriptor.h"
#include "gtest/gtest.h"
#include <cstring>
#include <functional>
diff --git a/FortranRuntime/unittests/Runtime/CommandTest.cpp b/FortranRuntime/unittests/Runtime/CommandTest.cpp
index aa79ce381ba8d0..a7d68508c5abca 100644
--- a/FortranRuntime/unittests/Runtime/CommandTest.cpp
+++ b/FortranRuntime/unittests/Runtime/CommandTest.cpp
@@ -7,12 +7,12 @@
//===----------------------------------------------------------------------===//
#include "flang/Runtime/command.h"
-#include "flang/Runtime/descriptor.h"
+#include "FortranRuntime/Runtime/descriptor.h"
+#include "gmock/gmock.h"
+#include "gtest/gtest.h"
#include "flang/Runtime/execute.h"
#include "flang/Runtime/extensions.h"
#include "flang/Runtime/main.h"
-#include "gmock/gmock.h"
-#include "gtest/gtest.h"
#include <cstddef>
#include <cstdlib>
diff --git a/FortranRuntime/unittests/Runtime/Derived.cpp b/FortranRuntime/unittests/Runtime/Derived.cpp
index 11b732fe10b790..22361352fdf5d9 100644
--- a/FortranRuntime/unittests/Runtime/Derived.cpp
+++ b/FortranRuntime/unittests/Runtime/Derived.cpp
@@ -6,10 +6,10 @@
//
//===----------------------------------------------------------------------===//
-#include "flang/Runtime/derived-api.h"
-#include "flang/Runtime/descriptor.h"
-#include "tools.h"
+#include "FortranRuntime/Runtime/descriptor.h"
#include "gtest/gtest.h"
+#include "tools.h"
+#include "flang/Runtime/derived-api.h"
using namespace Fortran::runtime;
diff --git a/FortranRuntime/unittests/Runtime/ExternalIOTest.cpp b/FortranRuntime/unittests/Runtime/ExternalIOTest.cpp
index 00c2fd76ce0c04..7ff4aa3c14bdc5 100644
--- a/FortranRuntime/unittests/Runtime/ExternalIOTest.cpp
+++ b/FortranRuntime/unittests/Runtime/ExternalIOTest.cpp
@@ -11,12 +11,12 @@
//===----------------------------------------------------------------------===//
#include "CrashHandlerFixture.h"
-#include "flang/Runtime/descriptor.h"
-#include "flang/Runtime/io-api.h"
+#include "FortranRuntime/Runtime/descriptor.h"
+#include "FortranRuntime/Runtime/io-api-funcs.h"
+#include "gtest/gtest.h"
#include "flang/Runtime/main.h"
#include "flang/Runtime/stop.h"
#include "llvm/Support/raw_ostream.h"
-#include "gtest/gtest.h"
#include <cstring>
#include <string_view>
diff --git a/FortranRuntime/unittests/Runtime/Inquiry.cpp b/FortranRuntime/unittests/Runtime/Inquiry.cpp
index 204a97a1088ac0..3e5f0037177f1c 100644
--- a/FortranRuntime/unittests/Runtime/Inquiry.cpp
+++ b/FortranRuntime/unittests/Runtime/Inquiry.cpp
@@ -7,9 +7,9 @@
//===----------------------------------------------------------------------===//
#include "flang/Runtime/inquiry.h"
-#include "flang/Runtime/type-code.h"
-#include "tools.h"
+#include "FortranRuntime/Runtime/type-code.h"
#include "gtest/gtest.h"
+#include "tools.h"
using namespace Fortran::runtime;
using Fortran::common::TypeCategory;
diff --git a/FortranRuntime/unittests/Runtime/ListInputTest.cpp b/FortranRuntime/unittests/Runtime/ListInputTest.cpp
index 4c30d6ed750141..e0fe4dfeac3949 100644
--- a/FortranRuntime/unittests/Runtime/ListInputTest.cpp
+++ b/FortranRuntime/unittests/Runtime/ListInputTest.cpp
@@ -6,10 +6,10 @@
//
//===----------------------------------------------------------------------===//
-#include "../../lib/Runtime/io-error.h"
#include "CrashHandlerFixture.h"
-#include "flang/Runtime/descriptor.h"
-#include "flang/Runtime/io-api.h"
+#include "FortranRuntime/Runtime/descriptor.h"
+#include "FortranRuntime/Runtime/io-api-funcs.h"
+#include "../../lib/Runtime/io-error.h"
using namespace Fortran::runtime;
using namespace Fortran::runtime::io;
diff --git a/FortranRuntime/unittests/Runtime/LogicalFormatTest.cpp b/FortranRuntime/unittests/Runtime/LogicalFormatTest.cpp
index 928fddec50c874..9fa0c2f4260edb 100644
--- a/FortranRuntime/unittests/Runtime/LogicalFormatTest.cpp
+++ b/FortranRuntime/unittests/Runtime/LogicalFormatTest.cpp
@@ -7,8 +7,8 @@
//===----------------------------------------------------------------------===//
#include "CrashHandlerFixture.h"
-#include "flang/Runtime/descriptor.h"
-#include "flang/Runtime/io-api.h"
+#include "FortranRuntime/Runtime/descriptor.h"
+#include "FortranRuntime/Runtime/io-api-funcs.h"
#include <algorithm>
#include <array>
#include <cstring>
diff --git a/FortranRuntime/unittests/Runtime/Matmul.cpp b/FortranRuntime/unittests/Runtime/Matmul.cpp
index cfa5d18cc36d33..6eb4012e785ff1 100644
--- a/FortranRuntime/unittests/Runtime/Matmul.cpp
+++ b/FortranRuntime/unittests/Runtime/Matmul.cpp
@@ -7,12 +7,12 @@
//===----------------------------------------------------------------------===//
#include "flang/Runtime/matmul.h"
+#include "FortranRuntime/Runtime/descriptor.h"
+#include "FortranRuntime/Runtime/type-code.h"
+#include "gtest/gtest.h"
+#include "tools.h"
#include "flang/Runtime/allocatable.h"
#include "flang/Runtime/cpp-type.h"
-#include "flang/Runtime/descriptor.h"
-#include "flang/Runtime/type-code.h"
-#include "tools.h"
-#include "gtest/gtest.h"
using namespace Fortran::runtime;
using Fortran::common::TypeCategory;
diff --git a/FortranRuntime/unittests/Runtime/MatmulTranspose.cpp b/FortranRuntime/unittests/Runtime/MatmulTranspose.cpp
index 146c2283fb1aca..199062f820c303 100644
--- a/FortranRuntime/unittests/Runtime/MatmulTranspose.cpp
+++ b/FortranRuntime/unittests/Runtime/MatmulTranspose.cpp
@@ -6,13 +6,13 @@
//
//===----------------------------------------------------------------------===//
+#include "FortranRuntime/Runtime/descriptor.h"
+#include "FortranRuntime/Runtime/type-code.h"
+#include "gtest/gtest.h"
+#include "tools.h"
#include "flang/Runtime/allocatable.h"
#include "flang/Runtime/cpp-type.h"
-#include "flang/Runtime/descriptor.h"
#include "flang/Runtime/matmul-transpose.h"
-#include "flang/Runtime/type-code.h"
-#include "tools.h"
-#include "gtest/gtest.h"
using namespace Fortran::runtime;
using Fortran::common::TypeCategory;
diff --git a/FortranRuntime/unittests/Runtime/MiscIntrinsic.cpp b/FortranRuntime/unittests/Runtime/MiscIntrinsic.cpp
index 08229b5e48f0dd..1033dda9d636f7 100644
--- a/FortranRuntime/unittests/Runtime/MiscIntrinsic.cpp
+++ b/FortranRuntime/unittests/Runtime/MiscIntrinsic.cpp
@@ -6,12 +6,12 @@
//
//===----------------------------------------------------------------------===//
-#include "flang/Runtime//misc-intrinsic.h"
+#include "FortranRuntime/Runtime/descriptor.h"
+#include "gtest/gtest.h"
+#include "tools.h"
#include "flang/Runtime/allocatable.h"
#include "flang/Runtime/cpp-type.h"
-#include "flang/Runtime/descriptor.h"
-#include "tools.h"
-#include "gtest/gtest.h"
+#include "flang/Runtime/misc-intrinsic.h"
using namespace Fortran::runtime;
diff --git a/FortranRuntime/unittests/Runtime/Namelist.cpp b/FortranRuntime/unittests/Runtime/Namelist.cpp
index 7b834dec49c3c4..544ab85234fd65 100644
--- a/FortranRuntime/unittests/Runtime/Namelist.cpp
+++ b/FortranRuntime/unittests/Runtime/Namelist.cpp
@@ -8,8 +8,8 @@
#include "../../lib/Runtime/namelist.h"
#include "CrashHandlerFixture.h"
-#include "flang/Runtime/descriptor.h"
-#include "flang/Runtime/io-api.h"
+#include "FortranRuntime/Runtime/descriptor.h"
+#include "FortranRuntime/Runtime/io-api-funcs.h"
#include "tools.h"
#include <algorithm>
#include <cinttypes>
diff --git a/FortranRuntime/unittests/Runtime/Numeric.cpp b/FortranRuntime/unittests/Runtime/Numeric.cpp
index fb595ae262c324..d15919b972bca7 100644
--- a/FortranRuntime/unittests/Runtime/Numeric.cpp
+++ b/FortranRuntime/unittests/Runtime/Numeric.cpp
@@ -7,8 +7,8 @@
//===----------------------------------------------------------------------===//
#include "flang/Runtime/numeric.h"
-#include "flang/Common/float128.h"
#include "gtest/gtest.h"
+#include "flang/Common/float128.h"
#include <cmath>
#include <limits>
diff --git a/FortranRuntime/unittests/Runtime/NumericalFormatTest.cpp b/FortranRuntime/unittests/Runtime/NumericalFormatTest.cpp
index 8a1dd6de1449b9..c588c739686bed 100644
--- a/FortranRuntime/unittests/Runtime/NumericalFormatTest.cpp
+++ b/FortranRuntime/unittests/Runtime/NumericalFormatTest.cpp
@@ -7,8 +7,8 @@
//===----------------------------------------------------------------------===//
#include "CrashHandlerFixture.h"
-#include "flang/Runtime/descriptor.h"
-#include "flang/Runtime/io-api.h"
+#include "FortranRuntime/Runtime/descriptor.h"
+#include "FortranRuntime/Runtime/io-api-funcs.h"
#include <algorithm>
#include <array>
#include <cstring>
diff --git a/FortranRuntime/unittests/Runtime/Pointer.cpp b/FortranRuntime/unittests/Runtime/Pointer.cpp
index a05bd70a64bb9f..733cd42232875f 100644
--- a/FortranRuntime/unittests/Runtime/Pointer.cpp
+++ b/FortranRuntime/unittests/Runtime/Pointer.cpp
@@ -7,9 +7,9 @@
//===----------------------------------------------------------------------===//
#include "flang/Runtime/pointer.h"
-#include "flang/Runtime/descriptor.h"
-#include "tools.h"
+#include "FortranRuntime/Runtime/descriptor.h"
#include "gtest/gtest.h"
+#include "tools.h"
using namespace Fortran::runtime;
diff --git a/FortranRuntime/unittests/Runtime/Random.cpp b/FortranRuntime/unittests/Runtime/Random.cpp
index 4e4b59cbcf40e7..81497a682660a8 100644
--- a/FortranRuntime/unittests/Runtime/Random.cpp
+++ b/FortranRuntime/unittests/Runtime/Random.cpp
@@ -6,9 +6,9 @@
//
//===----------------------------------------------------------------------===//
-#include "flang/Runtime//random.h"
-#include "flang/Runtime/descriptor.h"
-#include "flang/Runtime/type-code.h"
+#include "flang/Runtime/random.h"
+#include "FortranRuntime/Runtime/descriptor.h"
+#include "FortranRuntime/Runtime/type-code.h"
#include "gtest/gtest.h"
#include <cmath>
diff --git a/FortranRuntime/unittests/Runtime/Reduction.cpp b/FortranRuntime/unittests/Runtime/Reduction.cpp
index c35f6e2fa6a41b..a382f4b7a71770 100644
--- a/FortranRuntime/unittests/Runtime/Reduction.cpp
+++ b/FortranRuntime/unittests/Runtime/Reduction.cpp
@@ -7,14 +7,14 @@
//===----------------------------------------------------------------------===//
#include "flang/Runtime/reduction.h"
+#include "FortranRuntime/Runtime/descriptor.h"
+#include "FortranRuntime/Runtime/type-code.h"
+#include "gtest/gtest.h"
+#include "tools.h"
#include "flang/Common/float128.h"
#include "flang/Runtime/allocatable.h"
#include "flang/Runtime/cpp-type.h"
-#include "flang/Runtime/descriptor.h"
#include "flang/Runtime/reduce.h"
-#include "flang/Runtime/type-code.h"
-#include "tools.h"
-#include "gtest/gtest.h"
#include <cstdint>
#include <cstring>
#include <string>
diff --git a/FortranRuntime/unittests/Runtime/RuntimeCrashTest.cpp b/FortranRuntime/unittests/Runtime/RuntimeCrashTest.cpp
index 61580a8d46792f..7ce1ee796d739b 100644
--- a/FortranRuntime/unittests/Runtime/RuntimeCrashTest.cpp
+++ b/FortranRuntime/unittests/Runtime/RuntimeCrashTest.cpp
@@ -10,11 +10,11 @@
/// runtime components and ensure the test fixture handles crashes as we expect.
//
//===----------------------------------------------------------------------===//
-#include "../../lib/Runtime/terminator.h"
#include "CrashHandlerFixture.h"
+#include "tools.h"
+#include "../../lib/Runtime/terminator.h"
#include "flang/Runtime/io-api.h"
#include "flang/Runtime/transformational.h"
-#include "tools.h"
#include <gtest/gtest.h>
using namespace Fortran::runtime;
diff --git a/FortranRuntime/unittests/Runtime/Stop.cpp b/FortranRuntime/unittests/Runtime/Stop.cpp
index 5fd8deaad21d6b..c12ec097068438 100644
--- a/FortranRuntime/unittests/Runtime/Stop.cpp
+++ b/FortranRuntime/unittests/Runtime/Stop.cpp
@@ -10,8 +10,8 @@
//
//===----------------------------------------------------------------------===//
#include "flang/Runtime/stop.h"
-#include "../../lib/Runtime/environment.h"
#include "CrashHandlerFixture.h"
+#include "../../lib/Runtime/environment.h"
#include <cstdlib>
#include <gtest/gtest.h>
diff --git a/FortranRuntime/unittests/Runtime/Support.cpp b/FortranRuntime/unittests/Runtime/Support.cpp
index 38c0d6efaf9db7..05328e6baa411c 100644
--- a/FortranRuntime/unittests/Runtime/Support.cpp
+++ b/FortranRuntime/unittests/Runtime/Support.cpp
@@ -7,9 +7,9 @@
//===----------------------------------------------------------------------===//
#include "flang/Runtime/support.h"
-#include "flang/Runtime/descriptor.h"
-#include "tools.h"
+#include "FortranRuntime/Runtime/descriptor.h"
#include "gtest/gtest.h"
+#include "tools.h"
using namespace Fortran::runtime;
using Fortran::common::TypeCategory;
diff --git a/FortranRuntime/unittests/Runtime/TemporaryStack.cpp b/FortranRuntime/unittests/Runtime/TemporaryStack.cpp
index 63d99416ea64cb..b0b1041f0f09e7 100644
--- a/FortranRuntime/unittests/Runtime/TemporaryStack.cpp
+++ b/FortranRuntime/unittests/Runtime/TemporaryStack.cpp
@@ -6,14 +6,14 @@
//
//===----------------------------------------------------------------------===//
+#include "FortranRuntime/Runtime/descriptor.h"
+#include "FortranRuntime/Runtime/type-code.h"
+#include "gtest/gtest.h"
+#include "tools.h"
#include "flang/Common/ISO_Fortran_binding_wrapper.h"
#include "flang/Runtime/allocatable.h"
#include "flang/Runtime/cpp-type.h"
-#include "flang/Runtime/descriptor.h"
#include "flang/Runtime/temporary-stack.h"
-#include "flang/Runtime/type-code.h"
-#include "tools.h"
-#include "gtest/gtest.h"
#include <vector>
using namespace Fortran::runtime;
diff --git a/FortranRuntime/unittests/Runtime/Time.cpp b/FortranRuntime/unittests/Runtime/Time.cpp
index 6fd00d669a9575..548c0834e34a36 100644
--- a/FortranRuntime/unittests/Runtime/Time.cpp
+++ b/FortranRuntime/unittests/Runtime/Time.cpp
@@ -6,8 +6,8 @@
//
//===----------------------------------------------------------------------===//
-#include "flang/Runtime/time-intrinsic.h"
#include "gtest/gtest.h"
+#include "flang/Runtime/time-intrinsic.h"
#include <algorithm>
#include <cctype>
#include <cerrno>
diff --git a/FortranRuntime/unittests/Runtime/Transformational.cpp b/FortranRuntime/unittests/Runtime/Transformational.cpp
index b5a4e0e8e9588b..6b8903750d0aec 100644
--- a/FortranRuntime/unittests/Runtime/Transformational.cpp
+++ b/FortranRuntime/unittests/Runtime/Transformational.cpp
@@ -7,10 +7,10 @@
//===----------------------------------------------------------------------===//
#include "flang/Runtime/transformational.h"
-#include "flang/Common/float128.h"
-#include "flang/Runtime/type-code.h"
-#include "tools.h"
+#include "FortranRuntime/Runtime/type-code.h"
#include "gtest/gtest.h"
+#include "tools.h"
+#include "flang/Common/float128.h"
#include <vector>
using namespace Fortran::runtime;
diff --git a/FortranRuntime/unittests/Runtime/tools.h b/FortranRuntime/unittests/Runtime/tools.h
index 702103d225ab72..8000d83fc0c394 100644
--- a/FortranRuntime/unittests/Runtime/tools.h
+++ b/FortranRuntime/unittests/Runtime/tools.h
@@ -9,11 +9,11 @@
#ifndef FORTRAN_UNITTESTS_RUNTIME_TOOLS_H_
#define FORTRAN_UNITTESTS_RUNTIME_TOOLS_H_
+#include "FortranRuntime/Runtime/descriptor.h"
+#include "FortranRuntime/Runtime/type-code.h"
+#include "gtest/gtest.h"
#include "flang/Runtime/allocatable.h"
#include "flang/Runtime/cpp-type.h"
-#include "flang/Runtime/descriptor.h"
-#include "flang/Runtime/type-code.h"
-#include "gtest/gtest.h"
#include <cstdint>
#include <cstring>
#include <vector>
diff --git a/FortranRuntime/include/flang/Common/Fortran-consts.h b/flang/include/flang/Common/Fortran-consts.h
similarity index 100%
rename from FortranRuntime/include/flang/Common/Fortran-consts.h
rename to flang/include/flang/Common/Fortran-consts.h
diff --git a/FortranRuntime/include/flang/Common/ISO_Fortran_binding_wrapper.h b/flang/include/flang/Common/ISO_Fortran_binding_wrapper.h
similarity index 97%
rename from FortranRuntime/include/flang/Common/ISO_Fortran_binding_wrapper.h
rename to flang/include/flang/Common/ISO_Fortran_binding_wrapper.h
index 2c0fdc123c8759..ccfc360dfc820c 100644
--- a/FortranRuntime/include/flang/Common/ISO_Fortran_binding_wrapper.h
+++ b/flang/include/flang/Common/ISO_Fortran_binding_wrapper.h
@@ -22,7 +22,7 @@
/* clang-format off */
#include <stddef.h>
-#include "flang/Common/api-attrs.h"
+#include "flang/Common/api-attrs.h"
#ifdef __cplusplus
namespace Fortran {
namespace ISO {
diff --git a/flang/include/flang/Common/README.md b/flang/include/flang/Common/README.md
new file mode 100644
index 00000000000000..a722732fb76407
--- /dev/null
+++ b/flang/include/flang/Common/README.md
@@ -0,0 +1,25 @@
+Files in this directory are used by Flang (the compiler) and FortranRuntime
+(the runtime library for Flang-compiled programs). They must be compatible by
+both. For definitions used only by Flang, consider
+`flang/{lib,include/flang}/Support` instead. For definitions used only by
+FortranRuntime, consider `FortranRuntime/{lib,include/FortranRuntime}/Runtime`.
+
+The requirements for common code include:
+
+ * No dependence to LLVM, including LLVMSupport.
+
+ * No link-dependence to the C++ runtime. This means that e.g. `std::string`
+ cannot be used.
+
+ * No use of `std::optional<T>`; `fortran::common::optional<T>` can be used
+ instead.
+
+ * Preprocessor macros from `config.h` and CMake
+ `(target/add)_compile_definitions` must be defined by both build scripts.
+ See `flang/cmake/modules/FlangCommon.cmake`.
+
+ * Some header files are included from `.c` files.
+ `#include <flang/Common/c-or-cpp.h>` can help to support C++ and C.
+
+ * Global declarations may need to be annotated using definitions from
+ `api-attrs.h`.
diff --git a/FortranRuntime/include/flang/Common/api-attrs.h b/flang/include/flang/Common/api-attrs.h
similarity index 97%
rename from FortranRuntime/include/flang/Common/api-attrs.h
rename to flang/include/flang/Common/api-attrs.h
index 9a3001fb255c11..d73e60996bc81f 100644
--- a/FortranRuntime/include/flang/Common/api-attrs.h
+++ b/flang/include/flang/Common/api-attrs.h
@@ -1,10 +1,11 @@
-/*===-- include/flang/Common/api-attrs.h ----------------------------*- C -*-===
+/*===-- include/flang/Common/api-attrs.h ---------------------------*- C -*-=//
*
* 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
*
- *===----------------------------------------------------------------------===*/
+ *===------------------------------------------------------------------------===
+ */
/*
* The file defines a set macros that can be used to apply
@@ -12,8 +13,8 @@
* declared/defined/used in Flang runtime library.
*/
-#ifndef FORTRAN_COMMON_API_ATTRS_H_
-#define FORTRAN_COMMON_API_ATTRS_H_
+#ifndef FORTRAN_RUNTIME_API_ATTRS_H_
+#define FORTRAN_RUNTIME_API_ATTRS_H_
/*
* RT_EXT_API_GROUP_BEGIN/END pair is placed around definitions
@@ -177,4 +178,4 @@
#define RT_DEVICE_NOINLINE_HOST_INLINE inline
#endif
-#endif /* FORTRAN_COMMON_API_ATTRS_H_ */
+#endif /* !FORTRAN_RUNTIME_API_ATTRS_H_ */
diff --git a/FortranRuntime/include/flang/Common/binary-floating-point.h b/flang/include/flang/Common/binary-floating-point.h
similarity index 100%
rename from FortranRuntime/include/flang/Common/binary-floating-point.h
rename to flang/include/flang/Common/binary-floating-point.h
diff --git a/FortranRuntime/include/flang/Common/bit-population-count.h b/flang/include/flang/Common/bit-population-count.h
similarity index 98%
rename from FortranRuntime/include/flang/Common/bit-population-count.h
rename to flang/include/flang/Common/bit-population-count.h
index 59ade914d14d85..e1aeb78f9a3765 100644
--- a/FortranRuntime/include/flang/Common/bit-population-count.h
+++ b/flang/include/flang/Common/bit-population-count.h
@@ -93,4 +93,4 @@ template <typename INT> inline constexpr int TrailingZeroBitCount(INT x) {
}
}
} // namespace Fortran::common
-#endif /* FORTRAN_COMMON_BIT_POPULATION_COUNT_H_ */
+#endif // FORTRAN_COMMON_BIT_POPULATION_COUNT_H_
diff --git a/FortranRuntime/include/flang/Common/constexpr-bitset.h b/flang/include/flang/Common/constexpr-bitset.h
similarity index 98%
rename from FortranRuntime/include/flang/Common/constexpr-bitset.h
rename to flang/include/flang/Common/constexpr-bitset.h
index 093b247b5f4eff..1aafb6eff84c61 100644
--- a/FortranRuntime/include/flang/Common/constexpr-bitset.h
+++ b/flang/include/flang/Common/constexpr-bitset.h
@@ -144,4 +144,4 @@ template <int BITS> class BitSet {
Word bits_{0};
};
} // namespace Fortran::common
-#endif /* FORTRAN_COMMON_CONSTEXPR_BITSET_H_ */
+#endif // FORTRAN_COMMON_CONSTEXPR_BITSET_H_
diff --git a/FortranRuntime/include/flang/Common/decimal.h b/flang/include/flang/Common/decimal.h
similarity index 100%
rename from FortranRuntime/include/flang/Common/decimal.h
rename to flang/include/flang/Common/decimal.h
diff --git a/FortranRuntime/include/flang/Common/enum-class.h b/flang/include/flang/Common/enum-class.h
similarity index 98%
rename from FortranRuntime/include/flang/Common/enum-class.h
rename to flang/include/flang/Common/enum-class.h
index 787648ffec48e8..41575d45091a8d 100644
--- a/FortranRuntime/include/flang/Common/enum-class.h
+++ b/flang/include/flang/Common/enum-class.h
@@ -69,4 +69,4 @@ constexpr std::array<std::string_view, ITEMS> EnumNames(const char *p) {
}
} // namespace Fortran::common
-#endif /* FORTRAN_COMMON_ENUM_CLASS_H_ */
+#endif // FORTRAN_COMMON_ENUM_CLASS_H_
diff --git a/FortranRuntime/include/flang/Common/enum-set.h b/flang/include/flang/Common/enum-set.h
similarity index 99%
rename from FortranRuntime/include/flang/Common/enum-set.h
rename to flang/include/flang/Common/enum-set.h
index 6100fc5e2e31c5..5290b76debee88 100644
--- a/FortranRuntime/include/flang/Common/enum-set.h
+++ b/flang/include/flang/Common/enum-set.h
@@ -228,4 +228,4 @@ struct std::hash<Fortran::common::EnumSet<ENUM, values>> {
return std::hash(x.bitset());
}
};
-#endif /* FORTRAN_COMMON_ENUM_SET_H_ */
+#endif // FORTRAN_COMMON_ENUM_SET_H_
diff --git a/FortranRuntime/include/flang/Common/fast-int-set.h b/flang/include/flang/Common/fast-int-set.h
similarity index 95%
rename from FortranRuntime/include/flang/Common/fast-int-set.h
rename to flang/include/flang/Common/fast-int-set.h
index fe3f1632060b50..d1c9c756a44a65 100644
--- a/FortranRuntime/include/flang/Common/fast-int-set.h
+++ b/flang/include/flang/Common/fast-int-set.h
@@ -1,4 +1,4 @@
-//===-- include/flang/Common/fast-int-set.h ---------------------*- C++ -*-===//
+//===-- include/flang/Common/fast-int-set.h --------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -24,7 +24,7 @@
#ifndef FORTRAN_COMMON_FAST_INT_SET_H_
#define FORTRAN_COMMON_FAST_INT_SET_H_
-#include "flang/Common/optional.h"
+#include <optional>
namespace Fortran::common {
@@ -83,9 +83,9 @@ template <int N> class FastIntSet {
}
}
- optional<int> PopValue() {
+ std::optional<int> PopValue() {
if (IsEmpty()) {
- return nullopt;
+ return std::nullopt;
} else {
return value_[--size_];
}
@@ -103,4 +103,4 @@ template <int N> class FastIntSet {
bool isFullyInitialized_{false}; // memory was cleared
};
} // namespace Fortran::common
-#endif /* FORTRAN_COMMON_FAST_INT_SET_H_ */
+#endif // FORTRAN_COMMON_FAST_INT_SET_H_
diff --git a/FortranRuntime/include/flang/Common/float128.h b/flang/include/flang/Common/float128.h
similarity index 96%
rename from FortranRuntime/include/flang/Common/float128.h
rename to flang/include/flang/Common/float128.h
index a7036bf679e5ae..2e76bc0a162e61 100644
--- a/FortranRuntime/include/flang/Common/float128.h
+++ b/flang/include/flang/Common/float128.h
@@ -1,4 +1,4 @@
-/*===-- include/flang/Common/float128.h -----------------------------*- C -*-===
+/*===-- flang/Common/float128.h ----------------------------------*- C -*-===
*
* Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
* See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/include/flang/Common/format.h b/flang/include/flang/Common/format.h
similarity index 99%
rename from FortranRuntime/include/flang/Common/format.h
rename to flang/include/flang/Common/format.h
index 6f4dfc8d2376b7..138e84b72b733d 100644
--- a/FortranRuntime/include/flang/Common/format.h
+++ b/flang/include/flang/Common/format.h
@@ -901,4 +901,4 @@ template <typename CHAR> bool FormatValidator<CHAR>::Check() {
}
} // namespace Fortran::common
-#endif /* FORTRAN_COMMON_FORMAT_H_ */
+#endif // FORTRAN_COMMON_FORMAT_H_
diff --git a/FortranRuntime/include/flang/Common/idioms.h b/flang/include/flang/Common/idioms.h
similarity index 99%
rename from FortranRuntime/include/flang/Common/idioms.h
rename to flang/include/flang/Common/idioms.h
index 1ae0c0b35112e9..99f383ec75b999 100644
--- a/FortranRuntime/include/flang/Common/idioms.h
+++ b/flang/include/flang/Common/idioms.h
@@ -150,4 +150,4 @@ template <typename A, typename... B>
using IfNoLvalue = std::enable_if_t<(... && !std::is_lvalue_reference_v<B>), A>;
template <typename... RVREF> using NoLvalue = IfNoLvalue<void, RVREF...>;
} // namespace Fortran::common
-#endif /* FORTRAN_COMMON_IDIOMS_H_ */
+#endif // FORTRAN_COMMON_IDIOMS_H_
diff --git a/FortranRuntime/include/flang/Common/leading-zero-bit-count.h b/flang/include/flang/Common/leading-zero-bit-count.h
similarity index 98%
rename from FortranRuntime/include/flang/Common/leading-zero-bit-count.h
rename to flang/include/flang/Common/leading-zero-bit-count.h
index e788bfa9bcfd08..a296e0b446917f 100644
--- a/FortranRuntime/include/flang/Common/leading-zero-bit-count.h
+++ b/flang/include/flang/Common/leading-zero-bit-count.h
@@ -93,4 +93,4 @@ template <typename A> inline constexpr int BitsNeededFor(A x) {
return 8 * sizeof x - LeadingZeroBitCount(x);
}
} // namespace Fortran::common
-#endif /* FORTRAN_COMMON_LEADING_ZERO_BIT_COUNT_H_ */
+#endif // FORTRAN_COMMON_LEADING_ZERO_BIT_COUNT_H_
diff --git a/FortranRuntime/include/flang/Common/optional.h b/flang/include/flang/Common/optional.h
similarity index 98%
rename from FortranRuntime/include/flang/Common/optional.h
rename to flang/include/flang/Common/optional.h
index c3db3b1329a2fd..c0f4278009f40a 100644
--- a/FortranRuntime/include/flang/Common/optional.h
+++ b/flang/include/flang/Common/optional.h
@@ -23,8 +23,8 @@
// * cuda:: namespace need to be forced for all std:: references.
//
//===----------------------------------------------------------------------===//
-#ifndef FORTRAN_COMMON_OPTIONAL_H_
-#define FORTRAN_COMMON_OPTIONAL_H_
+#ifndef FORTRAN_COMMON_OPTIONAL_H
+#define FORTRAN_COMMON_OPTIONAL_H
#include "flang/Common/api-attrs.h"
#include <optional>
@@ -240,4 +240,4 @@ using std::optional;
} // namespace Fortran::common
-#endif /* FORTRAN_COMMON_OPTIONAL_H_ */
+#endif // FORTRAN_COMMON_OPTIONAL_H
diff --git a/FortranRuntime/include/flang/Common/real.h b/flang/include/flang/Common/real.h
similarity index 99%
rename from FortranRuntime/include/flang/Common/real.h
rename to flang/include/flang/Common/real.h
index dc9a2404731e70..b527deda0e3b4f 100644
--- a/FortranRuntime/include/flang/Common/real.h
+++ b/flang/include/flang/Common/real.h
@@ -141,4 +141,4 @@ class RealCharacteristics {
};
} // namespace Fortran::common
-#endif /* FORTRAN_COMMON_REAL_H_ */
+#endif // FORTRAN_COMMON_REAL_H_
diff --git a/FortranRuntime/include/flang/Common/reference-wrapper.h b/flang/include/flang/Common/reference-wrapper.h
similarity index 96%
rename from FortranRuntime/include/flang/Common/reference-wrapper.h
rename to flang/include/flang/Common/reference-wrapper.h
index 6822fb335f398c..2983754108f95a 100644
--- a/FortranRuntime/include/flang/Common/reference-wrapper.h
+++ b/flang/include/flang/Common/reference-wrapper.h
@@ -22,8 +22,8 @@
//
// clang-format on
-#ifndef FORTRAN_COMMON_REFERENCE_WRAPPER_H_
-#define FORTRAN_COMMON_REFERENCE_WRAPPER_H_
+#ifndef FORTRAN_COMMON_REFERENCE_WRAPPER_H
+#define FORTRAN_COMMON_REFERENCE_WRAPPER_H
#include "flang/Common/api-attrs.h"
#include <functional>
@@ -111,4 +111,4 @@ using std::reference_wrapper;
} // namespace Fortran::common
-#endif /* FORTRAN_COMMON_REFERENCE_WRAPPER_H_ */
+#endif // FORTRAN_COMMON_REFERENCE_WRAPPER_H
diff --git a/FortranRuntime/include/flang/Common/restorer.h b/flang/include/flang/Common/restorer.h
similarity index 97%
rename from FortranRuntime/include/flang/Common/restorer.h
rename to flang/include/flang/Common/restorer.h
index a5c5ebe7344a1b..0f1bc48620d37e 100644
--- a/FortranRuntime/include/flang/Common/restorer.h
+++ b/flang/include/flang/Common/restorer.h
@@ -18,8 +18,8 @@
#ifndef FORTRAN_COMMON_RESTORER_H_
#define FORTRAN_COMMON_RESTORER_H_
-#include "flang/Common/api-attrs.h"
#include "idioms.h"
+#include "flang/Common/api-attrs.h"
namespace Fortran::common {
template <typename A> class Restorer {
public:
@@ -53,4 +53,4 @@ RT_API_ATTRS common::IfNoLvalue<Restorer<A>, B> ScopedSet(
return Restorer<A>{to, std::move(original)};
}
} // namespace Fortran::common
-#endif /* FORTRAN_COMMON_RESTORER_H_ */
+#endif // FORTRAN_COMMON_RESTORER_H_
diff --git a/FortranRuntime/include/flang/Common/target-rounding.h b/flang/include/flang/Common/target-rounding.h
similarity index 100%
rename from FortranRuntime/include/flang/Common/target-rounding.h
rename to flang/include/flang/Common/target-rounding.h
diff --git a/FortranRuntime/include/flang/Common/uint128.h b/flang/include/flang/Common/uint128.h
similarity index 99%
rename from FortranRuntime/include/flang/Common/uint128.h
rename to flang/include/flang/Common/uint128.h
index 1b2ee6a2c14b87..821c8c3b08a52f 100644
--- a/FortranRuntime/include/flang/Common/uint128.h
+++ b/flang/include/flang/Common/uint128.h
@@ -19,8 +19,8 @@
#define AVOID_NATIVE_UINT128_T 0
#endif
-#include "flang/Common/api-attrs.h"
#include "leading-zero-bit-count.h"
+#include "flang/Common/api-attrs.h"
#include <cstdint>
#include <type_traits>
@@ -303,4 +303,4 @@ template <int BITS>
using HostSignedIntType = typename HostSignedIntTypeHelper<BITS>::type;
} // namespace Fortran::common
-#endif /* FORTRAN_COMMON_UINT128_H_ */
+#endif
diff --git a/FortranRuntime/include/flang/Common/variant.h b/flang/include/flang/Common/variant.h
similarity index 89%
rename from FortranRuntime/include/flang/Common/variant.h
rename to flang/include/flang/Common/variant.h
index ff9b1aed4eba91..1af85876afac00 100644
--- a/FortranRuntime/include/flang/Common/variant.h
+++ b/flang/include/flang/Common/variant.h
@@ -11,8 +11,8 @@
// and the related names become available, though, they may correspond
// to alternative definitions (e.g. from cuda::std namespace).
-#ifndef FORTRAN_COMMON_VARIANT_H_
-#define FORTRAN_COMMON_VARIANT_H_
+#ifndef FORTRAN_COMMON_VARIANT_H
+#define FORTRAN_COMMON_VARIANT_H
#if RT_USE_LIBCUDACXX
#include <cuda/std/variant>
@@ -27,4 +27,4 @@ using cuda::std::visit;
#include <variant>
#endif // !RT_USE_LIBCUDACXX
-#endif /* FORTRAN_COMMON_VARIANT_H_ */
+#endif // FORTRAN_COMMON_VARIANT_H
diff --git a/FortranRuntime/include/flang/Common/visit.h b/flang/include/flang/Common/visit.h
similarity index 98%
rename from FortranRuntime/include/flang/Common/visit.h
rename to flang/include/flang/Common/visit.h
index 8030ac9be173c3..ad66297650b093 100644
--- a/FortranRuntime/include/flang/Common/visit.h
+++ b/flang/include/flang/Common/visit.h
@@ -21,8 +21,8 @@
#ifndef FORTRAN_COMMON_VISIT_H_
#define FORTRAN_COMMON_VISIT_H_
-#include "flang/Common/api-attrs.h"
#include "variant.h"
+#include "flang/Common/api-attrs.h"
#include <type_traits>
namespace Fortran::common {
@@ -100,4 +100,4 @@ using Fortran::common::log2visit::visit;
#endif
} // namespace Fortran::common
-#endif /* FORTRAN_COMMON_VISIT_H_ */
+#endif // FORTRAN_COMMON_VISIT_H_
diff --git a/FortranRuntime/include/flang/Common/windows-include.h b/flang/include/flang/Common/windows-include.h
similarity index 93%
rename from FortranRuntime/include/flang/Common/windows-include.h
rename to flang/include/flang/Common/windows-include.h
index bee79d4fceb3ba..75ef4974251ff9 100644
--- a/FortranRuntime/include/flang/Common/windows-include.h
+++ b/flang/include/flang/Common/windows-include.h
@@ -22,4 +22,4 @@
#endif // _WIN32
-#endif /* FORTRAN_COMMON_WINDOWS_INCLUDE_H_ */
+#endif // FORTRAN_COMMON_WINDOWS_INCLUDE_H_
diff --git a/flang/include/flang/ISO_Fortran_binding.h b/flang/include/flang/ISO_Fortran_binding.h
index 3361db27aa4517..89a10ce69a2ba2 100644
--- a/flang/include/flang/ISO_Fortran_binding.h
+++ b/flang/include/flang/ISO_Fortran_binding.h
@@ -14,7 +14,7 @@
* it does so by means of a wrapper header that establishes namespaces and
* a macro for extra function attributes (RT_API_ATTRS).
*/
-#ifndef FORTRAN_COMMON_ISO_FORTRAN_BINDING_WRAPPER_H_
+#ifndef FORTRAN_ISO_FORTRAN_BINDING_WRAPPER_H_
#include <stddef.h>
#define FORTRAN_ISO_NAMESPACE_
#endif
diff --git a/flang/include/flang/Lower/Allocatable.h b/flang/include/flang/Lower/Allocatable.h
index 1209b157ed1f41..0e89af94af40f6 100644
--- a/flang/include/flang/Lower/Allocatable.h
+++ b/flang/include/flang/Lower/Allocatable.h
@@ -15,7 +15,7 @@
#include "flang/Lower/AbstractConverter.h"
#include "flang/Optimizer/Builder/MutableBox.h"
-#include "flang/Runtime/allocator-registry.h"
+#include "flang/Runtime/allocator-registry-consts.h"
#include "llvm/ADT/StringRef.h"
namespace mlir {
diff --git a/flang/include/flang/Optimizer/Builder/IntrinsicCall.h b/flang/include/flang/Optimizer/Builder/IntrinsicCall.h
index 3fc4201bd16c6c..78bb82b17d4050 100644
--- a/flang/include/flang/Optimizer/Builder/IntrinsicCall.h
+++ b/flang/include/flang/Optimizer/Builder/IntrinsicCall.h
@@ -397,7 +397,6 @@ struct IntrinsicLibrary {
fir::ExtendedValue genUbound(mlir::Type, llvm::ArrayRef<fir::ExtendedValue>);
fir::ExtendedValue genUnpack(mlir::Type, llvm::ArrayRef<fir::ExtendedValue>);
fir::ExtendedValue genVerify(mlir::Type, llvm::ArrayRef<fir::ExtendedValue>);
- fir::ExtendedValue genNumericStorageSize(mlir::Type, llvm::ArrayRef<fir::ExtendedValue>);
/// Implement all conversion functions like DBLE, the first argument is
/// the value to convert. There may be an additional KIND arguments that
diff --git a/flang/include/flang/Optimizer/Builder/MutableBox.h b/flang/include/flang/Optimizer/Builder/MutableBox.h
index fea7c7204837b4..39657ddaf6e03a 100644
--- a/flang/include/flang/Optimizer/Builder/MutableBox.h
+++ b/flang/include/flang/Optimizer/Builder/MutableBox.h
@@ -14,7 +14,7 @@
#define FORTRAN_OPTIMIZER_BUILDER_MUTABLEBOX_H
#include "flang/Optimizer/Builder/BoxValue.h"
-#include "flang/Runtime/allocator-registry.h"
+#include "flang/Runtime/allocator-registry-consts.h"
#include "llvm/ADT/StringRef.h"
namespace mlir {
diff --git a/flang/include/flang/Optimizer/CodeGen/DescriptorModel.h b/flang/include/flang/Optimizer/CodeGen/DescriptorModel.h
index 31d1416846d0c9..b9a8a670d07938 100644
--- a/flang/include/flang/Optimizer/CodeGen/DescriptorModel.h
+++ b/flang/include/flang/Optimizer/CodeGen/DescriptorModel.h
@@ -23,7 +23,7 @@
#define OPTIMIZER_DESCRIPTOR_MODEL_H
#include "flang/Common/ISO_Fortran_binding_wrapper.h"
-#include "flang/Runtime/descriptor.h"
+#include "flang/Runtime/descriptor-consts.h"
#include "mlir/Dialect/LLVMIR/LLVMTypes.h"
#include "mlir/IR/BuiltinTypes.h"
#include "llvm/Support/ErrorHandling.h"
diff --git a/FortranRuntime/include/flang/Runtime/CUDA/allocator.h b/flang/include/flang/Runtime/CUDA/allocator.h
similarity index 93%
rename from FortranRuntime/include/flang/Runtime/CUDA/allocator.h
rename to flang/include/flang/Runtime/CUDA/allocator.h
index 48185e8f34eaf6..cc88896b1f0bd6 100644
--- a/FortranRuntime/include/flang/Runtime/CUDA/allocator.h
+++ b/flang/include/flang/Runtime/CUDA/allocator.h
@@ -9,7 +9,7 @@
#ifndef FORTRAN_RUNTIME_CUDA_ALLOCATOR_H_
#define FORTRAN_RUNTIME_CUDA_ALLOCATOR_H_
-#include "flang/Runtime/descriptor.h"
+#include "flang/Runtime/descriptor-consts.h"
#include "flang/Runtime/entry-names.h"
#define CUDA_REPORT_IF_ERROR(expr) \
@@ -43,4 +43,4 @@ void *CUFAllocUnified(std::size_t);
void CUFFreeUnified(void *);
} // namespace Fortran::runtime::cuda
-#endif /* FORTRAN_RUNTIME_CUDA_ALLOCATOR_H_ */
+#endif // FORTRAN_RUNTIME_CUDA_ALLOCATOR_H_
diff --git a/FortranRuntime/include/flang/Runtime/CUDA/descriptor.h b/flang/include/flang/Runtime/CUDA/descriptor.h
similarity index 91%
rename from FortranRuntime/include/flang/Runtime/CUDA/descriptor.h
rename to flang/include/flang/Runtime/CUDA/descriptor.h
index 68ad0987d9aecd..501a834f43bd42 100644
--- a/FortranRuntime/include/flang/Runtime/CUDA/descriptor.h
+++ b/flang/include/flang/Runtime/CUDA/descriptor.h
@@ -9,7 +9,7 @@
#ifndef FORTRAN_RUNTIME_CUDA_DESCRIPTOR_H_
#define FORTRAN_RUNTIME_CUDA_DESCRIPTOR_H_
-#include "flang/Runtime/descriptor.h"
+#include "flang/Runtime/descriptor-consts.h"
#include "flang/Runtime/entry-names.h"
#include <cstddef>
@@ -27,4 +27,4 @@ void RTDECL(CUFFreeDesciptor)(
} // extern "C"
} // namespace Fortran::runtime::cuda
-#endif /* FORTRAN_RUNTIME_CUDA_DESCRIPTOR_H_ */
+#endif // FORTRAN_RUNTIME_CUDA_DESCRIPTOR_H_
diff --git a/flang/include/flang/Runtime/README.md b/flang/include/flang/Runtime/README.md
new file mode 100644
index 00000000000000..a13a7e23162e98
--- /dev/null
+++ b/flang/include/flang/Runtime/README.md
@@ -0,0 +1,27 @@
+Files in this directory are used by Flang (the compiler) and FortranRuntime
+(the runtime library for Flang-compiled programs). They must be compatible by
+both. For definitions used only by Flang, consider
+`flang/{lib,include/flang}/Support` instead. For definitions used only by
+FortranRuntime, consider `FortranRuntime/{lib,include/FortranRuntime}/Runtime`.
+
+The requirements for common code include:
+
+ * No dependence to LLVM, including LLVMSupport.
+
+ * No link-dependence to the C++ runtime. This means that e.g. `std::string`
+ cannot be used.
+
+ * No use of `std::optional<T>`; `fortran::common::optional<T>` can be used
+ instead.
+
+ * Preprocessor macros from `config.h` and CMake
+ `(target/add)_compile_definitions` must be defined by both build scripts.
+ See `flang/cmake/modules/FlangCommon.cmake`.
+
+ * Some header files are included from `.c` files.
+ `#include <flang/Common/c-or-cpp.h>` can help to support C++ and C.
+
+ * Global declarations may need to be annotated using definitions from
+ `api-attrs.h`.
+
+ * The `Runtime` component is header-only.
diff --git a/FortranRuntime/include/flang/Runtime/allocatable.h b/flang/include/flang/Runtime/allocatable.h
similarity index 97%
rename from FortranRuntime/include/flang/Runtime/allocatable.h
rename to flang/include/flang/Runtime/allocatable.h
index d7f3910074a760..480e987ed5ec6b 100644
--- a/FortranRuntime/include/flang/Runtime/allocatable.h
+++ b/flang/include/flang/Runtime/allocatable.h
@@ -11,10 +11,13 @@
#ifndef FORTRAN_RUNTIME_ALLOCATABLE_H_
#define FORTRAN_RUNTIME_ALLOCATABLE_H_
-#include "flang/Runtime/descriptor.h"
+#include "flang/Common/Fortran-consts.h"
+#include "flang/Runtime/descriptor-consts.h"
#include "flang/Runtime/entry-names.h"
namespace Fortran::runtime {
+using SubscriptValue = ISO::CFI_index_t;
+using common::TypeCategory;
extern "C" {
@@ -129,4 +132,4 @@ void RTDECL(AllocatableDeallocateNoFinal)(
Descriptor &, const char *sourceFile = nullptr, int sourceLine = 0);
} // extern "C"
} // namespace Fortran::runtime
-#endif /* FORTRAN_RUNTIME_ALLOCATABLE_H_ */
+#endif // FORTRAN_RUNTIME_ALLOCATABLE_H_
diff --git a/flang/include/flang/Runtime/allocator-registry-consts.h b/flang/include/flang/Runtime/allocator-registry-consts.h
new file mode 100644
index 00000000000000..70735c2fc7a71c
--- /dev/null
+++ b/flang/include/flang/Runtime/allocator-registry-consts.h
@@ -0,0 +1,20 @@
+//===-- include/flang/Runtime/allocator-registry-consts.h -------*- C++ -*-===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef FORTRAN_RUNTIME_ALLOCATOR_REGISTRY_CONSTS_H_
+#define FORTRAN_RUNTIME_ALLOCATOR_REGISTRY_CONSTS_H_
+
+static constexpr unsigned kDefaultAllocator = 0;
+
+// Allocator used for CUF
+static constexpr unsigned kPinnedAllocatorPos = 1;
+static constexpr unsigned kDeviceAllocatorPos = 2;
+static constexpr unsigned kManagedAllocatorPos = 3;
+static constexpr unsigned kUnifiedAllocatorPos = 4;
+
+#endif /* FORTRAN_RUNTIME_ALLOCATOR_REGISTRY_CONSTS_H_ */
diff --git a/flang/include/flang/Runtime/array-constructor-consts.h b/flang/include/flang/Runtime/array-constructor-consts.h
new file mode 100644
index 00000000000000..da058874e50487
--- /dev/null
+++ b/flang/include/flang/Runtime/array-constructor-consts.h
@@ -0,0 +1,54 @@
+//===-- include/flang/Runtime/array-constructor-consts.h --------*- C++ -*-===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+// External APIs to create temporary storage for array constructors when their
+// final extents or length parameters cannot be pre-computed.
+
+#ifndef FORTRAN_RUNTIME_ARRAY_CONSTRUCTOR_CONSTS_H_
+#define FORTRAN_RUNTIME_ARRAY_CONSTRUCTOR_CONSTS_H_
+
+#include "flang/Runtime/descriptor-consts.h"
+#include "flang/Runtime/entry-names.h"
+#include <cstdint>
+
+namespace Fortran::runtime {
+struct ArrayConstructorVector;
+
+// Max sizeof(ArrayConstructorVector) and sizeof(ArrayConstructorVector) for any
+// target.
+// TODO: Use target-specific size/alignment instead of overapproximation.
+constexpr std::size_t MaxArrayConstructorVectorSizeInBytes = 2 * 40;
+constexpr std::size_t MaxArrayConstructorVectorAlignInBytes = 8;
+
+extern "C" {
+// API to initialize an ArrayConstructorVector before any values are pushed to
+// it. Inlined code is only expected to allocate the "ArrayConstructorVector"
+// class instance storage with sufficient size (using
+// "2*sizeof(ArrayConstructorVector)" on the host should be safe regardless of
+// the target the runtime is compiled for). This avoids the need for the runtime
+// to maintain a state, or to use dynamic allocation for it. "vectorClassSize"
+// is used to validate that lowering allocated enough space for it.
+void RTDECL(InitArrayConstructorVector)(ArrayConstructorVector &vector,
+ Descriptor &to, bool useValueLengthParameters, int vectorClassSize,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+
+// Generic API to push any kind of entity into the array constructor (any
+// Fortran type and any rank).
+void RTDECL(PushArrayConstructorValue)(
+ ArrayConstructorVector &vector, const Descriptor &from);
+
+// API to push scalar array constructor value of:
+// - a numerical or logical type,
+// - or a derived type that has no length parameters, and no allocatable
+// component (that would require deep copies).
+// It requires no descriptor for the value that is passed via its base address.
+void RTDECL(PushArrayConstructorSimpleScalar)(
+ ArrayConstructorVector &vector, void *from);
+} // extern "C"
+} // namespace Fortran::runtime
+#endif /* FORTRAN_RUNTIME_ARRAY_CONSTRUCTOR_CONSTS_H_ */
diff --git a/FortranRuntime/include/flang/Runtime/assign.h b/flang/include/flang/Runtime/assign.h
similarity index 98%
rename from FortranRuntime/include/flang/Runtime/assign.h
rename to flang/include/flang/Runtime/assign.h
index 55d15a5c046868..a1cc9eaf4355f6 100644
--- a/FortranRuntime/include/flang/Runtime/assign.h
+++ b/flang/include/flang/Runtime/assign.h
@@ -58,4 +58,4 @@ void RTDECL(AssignPolymorphic)(Descriptor &to, const Descriptor &from,
const char *sourceFile = nullptr, int sourceLine = 0);
} // extern "C"
} // namespace Fortran::runtime
-#endif /* FORTRAN_RUNTIME_ASSIGN_H_ */
+#endif // FORTRAN_RUNTIME_ASSIGN_H_
diff --git a/FortranRuntime/include/flang/Runtime/c-or-cpp.h b/flang/include/flang/Runtime/c-or-cpp.h
similarity index 95%
rename from FortranRuntime/include/flang/Runtime/c-or-cpp.h
rename to flang/include/flang/Runtime/c-or-cpp.h
index 3c0c0be643cbc3..8bac523907750c 100644
--- a/FortranRuntime/include/flang/Runtime/c-or-cpp.h
+++ b/flang/include/flang/Runtime/c-or-cpp.h
@@ -28,4 +28,4 @@
#define NORETURN IF_CPLUSPLUS([[noreturn]])
#define NO_ARGUMENTS IF_NOT_CPLUSPLUS(void)
-#endif /* FORTRAN_RUNTIME_C_OR_CPP_H_ */
+#endif // FORTRAN_RUNTIME_C_OR_CPP_H_
diff --git a/FortranRuntime/include/flang/Runtime/character.h b/flang/include/flang/Runtime/character.h
similarity index 99%
rename from FortranRuntime/include/flang/Runtime/character.h
rename to flang/include/flang/Runtime/character.h
index a842c30cd8120c..dd47686fe858fd 100644
--- a/FortranRuntime/include/flang/Runtime/character.h
+++ b/flang/include/flang/Runtime/character.h
@@ -129,4 +129,4 @@ void RTDECL(Verify)(Descriptor &result, const Descriptor &string,
const char *sourceFile = nullptr, int sourceLine = 0);
}
} // namespace Fortran::runtime
-#endif /* FORTRAN_RUNTIME_CHARACTER_H_ */
+#endif // FORTRAN_RUNTIME_CHARACTER_H_
diff --git a/FortranRuntime/include/flang/Runtime/command.h b/flang/include/flang/Runtime/command.h
similarity index 98%
rename from FortranRuntime/include/flang/Runtime/command.h
rename to flang/include/flang/Runtime/command.h
index 2bbdfca7631163..7ab3f6442dcf92 100644
--- a/FortranRuntime/include/flang/Runtime/command.h
+++ b/flang/include/flang/Runtime/command.h
@@ -62,4 +62,4 @@ std::int32_t RTNAME(GetCwd)(
}
} // namespace Fortran::runtime
-#endif /* FORTRAN_RUNTIME_COMMAND_H_ */
+#endif // FORTRAN_RUNTIME_COMMAND_H_
diff --git a/FortranRuntime/include/flang/Runtime/cpp-type.h b/flang/include/flang/Runtime/cpp-type.h
similarity index 98%
rename from FortranRuntime/include/flang/Runtime/cpp-type.h
rename to flang/include/flang/Runtime/cpp-type.h
index 7de1ea4f45f224..27b43de7d0f0f6 100644
--- a/FortranRuntime/include/flang/Runtime/cpp-type.h
+++ b/flang/include/flang/Runtime/cpp-type.h
@@ -110,4 +110,4 @@ template <> struct CppTypeForHelper<TypeCategory::Logical, 1> {
};
} // namespace Fortran::runtime
-#endif /* FORTRAN_RUNTIME_CPP_TYPE_H_ */
+#endif // FORTRAN_RUNTIME_CPP_TYPE_H_
diff --git a/FortranRuntime/include/flang/Runtime/derived-api.h b/flang/include/flang/Runtime/derived-api.h
similarity index 98%
rename from FortranRuntime/include/flang/Runtime/derived-api.h
rename to flang/include/flang/Runtime/derived-api.h
index ca1681e974051c..79aa7d82de8819 100644
--- a/FortranRuntime/include/flang/Runtime/derived-api.h
+++ b/flang/include/flang/Runtime/derived-api.h
@@ -63,4 +63,4 @@ bool RTDECL(ExtendsTypeOf)(const Descriptor &, const Descriptor &);
} // extern "C"
} // namespace Fortran::runtime
-#endif /* FORTRAN_RUNTIME_DERIVED_API_H_ */
+#endif // FORTRAN_RUNTIME_DERIVED_API_H_
diff --git a/flang/include/flang/Runtime/descriptor-consts.h b/flang/include/flang/Runtime/descriptor-consts.h
new file mode 100644
index 00000000000000..aa5e2e4ee8b45f
--- /dev/null
+++ b/flang/include/flang/Runtime/descriptor-consts.h
@@ -0,0 +1,73 @@
+//===-- include/flang/Runtime/descriptor-consts.h ---------------*- C++ -*-===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef FORTRAN_RUNTIME_DESCRIPTOR_CONSTS_H_
+#define FORTRAN_RUNTIME_DESCRIPTOR_CONSTS_H_
+
+#include "flang/Common/ISO_Fortran_binding_wrapper.h"
+#include "flang/Common/api-attrs.h"
+#include <cstddef>
+#include <cstdint>
+
+// Value of the addendum presence flag.
+#define _CFI_ADDENDUM_FLAG 1
+// Number of bits needed to be shifted when manipulating the allocator index.
+#define _CFI_ALLOCATOR_IDX_SHIFT 1
+// Allocator index mask.
+#define _CFI_ALLOCATOR_IDX_MASK 0b00001110
+
+namespace Fortran::runtime::typeInfo {
+using TypeParameterValue = std::int64_t;
+class DerivedType;
+} // namespace Fortran::runtime::typeInfo
+
+namespace Fortran::runtime {
+class Descriptor;
+using SubscriptValue = ISO::CFI_index_t;
+
+/// Returns size in bytes of the descriptor (not the data)
+/// This must be at least as large as the largest descriptor of any target
+/// triple.
+static constexpr RT_API_ATTRS std::size_t MaxDescriptorSizeInBytes(
+ int rank, bool addendum = false, int lengthTypeParameters = 0) {
+ // Layout:
+ //
+ // fortran::runtime::Descriptor {
+ // ISO::CFI_cdesc_t {
+ // void *base_addr; (pointer -> up to 8 bytes)
+ // size_t elem_len; (up to 8 bytes)
+ // int version; (up to 4 bytes)
+ // CFI_rank_t rank; (unsigned char -> 1 byte)
+ // CFI_type_t type; (signed char -> 1 byte)
+ // CFI_attribute_t attribute; (unsigned char -> 1 byte)
+ // unsigned char extra; (1 byte)
+ // }
+ // }
+ // fortran::runtime::Dimension[rank] {
+ // ISO::CFI_dim_t {
+ // CFI_index_t lower_bound; (ptrdiff_t -> up to 8 bytes)
+ // CFI_index_t extent; (ptrdiff_t -> up to 8 bytes)
+ // CFI_index_t sm; (ptrdiff_t -> up to 8 bytes)
+ // }
+ // }
+ // fortran::runtime::DescriptorAddendum {
+ // const typeInfo::DerivedType *derivedType_; (pointer -> up to 8
+ // bytes) typeInfo::TypeParameterValue len_[lenParameters]; (int64_t -> 8
+ // bytes)
+ // }
+ std::size_t bytes{24u + rank * 24u};
+ if (addendum || lengthTypeParameters > 0) {
+ if (lengthTypeParameters < 1)
+ lengthTypeParameters = 1;
+ bytes += 8u + static_cast<std::size_t>(lengthTypeParameters) * 8u;
+ }
+ return bytes;
+}
+
+} // namespace Fortran::runtime
+#endif /* FORTRAN_RUNTIME_DESCRIPTOR_CONSTS_H_ */
diff --git a/FortranRuntime/include/flang/Runtime/entry-names.h b/flang/include/flang/Runtime/entry-names.h
similarity index 89%
rename from FortranRuntime/include/flang/Runtime/entry-names.h
rename to flang/include/flang/Runtime/entry-names.h
index 25134771bf9185..68582b92b54941 100644
--- a/FortranRuntime/include/flang/Runtime/entry-names.h
+++ b/flang/include/flang/Runtime/entry-names.h
@@ -1,10 +1,11 @@
-/*===-- include/flang/Runtime/entry-names.h -------------------------*- C -*-===
+/*===-- include/flang/Runtime/entry-names.h -------------------------*- C -*-=//
*
* 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
*
- *===----------------------------------------------------------------------===*/
+ *===------------------------------------------------------------------------===
+ */
/* Defines the macro RTNAME(n) which decorates the external name of a runtime
* library function or object with extra characters so that it
@@ -15,8 +16,8 @@
* The value of REVISION should not be changed until/unless the API to the
* runtime library must change in some way that breaks backward compatibility.
*/
-#ifndef FORTRAN_RUNTIME_ENTRY_NAMES_H_
-#define FORTRAN_RUNTIME_ENTRY_NAMES_H_
+#ifndef FORTRAN_RUNTIME_ENTRY_NAMES_H
+#define FORTRAN_RUNTIME_ENTRY_NAMES_H
#include "flang/Common/api-attrs.h"
@@ -40,4 +41,4 @@
#define RTNAME_STRING(name) RTNAME_STRINGIFY(RTNAME(name))
#endif
-#endif /* FORTRAN_RUNTIME_ENTRY_NAMES_H_ */
+#endif /* !FORTRAN_RUNTIME_ENTRY_NAMES_H */
diff --git a/FortranRuntime/include/flang/Runtime/exceptions.h b/flang/include/flang/Runtime/exceptions.h
similarity index 86%
rename from FortranRuntime/include/flang/Runtime/exceptions.h
rename to flang/include/flang/Runtime/exceptions.h
index f2c67325b34d92..1ab22da103a50f 100644
--- a/FortranRuntime/include/flang/Runtime/exceptions.h
+++ b/flang/include/flang/Runtime/exceptions.h
@@ -1,4 +1,4 @@
-//===-- include/flang/Runtime/exceptions.h ----------------------*- C++ -*-===//
+//===-- include/flang/Runtime/exceptions.h ----------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -26,4 +26,4 @@ std::uint32_t RTNAME(MapException)(std::uint32_t excepts);
} // extern "C"
} // namespace Fortran::runtime
-#endif /* FORTRAN_RUNTIME_EXCEPTIONS_H_ */
+#endif // FORTRAN_RUNTIME_EXCEPTIONS_H_
diff --git a/FortranRuntime/include/flang/Runtime/execute.h b/flang/include/flang/Runtime/execute.h
similarity index 89%
rename from FortranRuntime/include/flang/Runtime/execute.h
rename to flang/include/flang/Runtime/execute.h
index d1958a82594ffd..ca137b9d1823c4 100644
--- a/FortranRuntime/include/flang/Runtime/execute.h
+++ b/flang/include/flang/Runtime/execute.h
@@ -1,4 +1,4 @@
-//===-- include/flang/Runtime/execute.h -------------------------*- C++ -*-===//
+//===-- include/flang/Runtime/command.h -------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -26,4 +26,4 @@ void RTNAME(ExecuteCommandLine)(const Descriptor &command, bool wait = true,
}
} // namespace Fortran::runtime
-#endif /* FORTRAN_RUNTIME_EXECUTE_H_ */
+#endif // FORTRAN_RUNTIME_EXECUTE_H_
diff --git a/FortranRuntime/include/flang/Runtime/extensions.h b/flang/include/flang/Runtime/extensions.h
similarity index 97%
rename from FortranRuntime/include/flang/Runtime/extensions.h
rename to flang/include/flang/Runtime/extensions.h
index f46ccdd7d9528d..fef651f3b2eedb 100644
--- a/FortranRuntime/include/flang/Runtime/extensions.h
+++ b/flang/include/flang/Runtime/extensions.h
@@ -52,4 +52,4 @@ std::int64_t FORTRAN_PROCEDURE_NAME(access)(const char *name,
#endif
} // extern "C"
-#endif /* FORTRAN_RUNTIME_EXTENSIONS_H_ */
+#endif // FORTRAN_RUNTIME_EXTENSIONS_H_
diff --git a/FortranRuntime/include/flang/Runtime/freestanding-tools.h b/flang/include/flang/Runtime/freestanding-tools.h
similarity index 99%
rename from FortranRuntime/include/flang/Runtime/freestanding-tools.h
rename to flang/include/flang/Runtime/freestanding-tools.h
index 8aeef54ba0af3d..e94cb0a6c938cd 100644
--- a/FortranRuntime/include/flang/Runtime/freestanding-tools.h
+++ b/flang/include/flang/Runtime/freestanding-tools.h
@@ -215,4 +215,4 @@ using std::toupper;
#endif // !STD_TOUPPER_UNSUPPORTED
} // namespace Fortran::runtime
-#endif /* FORTRAN_RUNTIME_FREESTANDING_TOOLS_H_ */
+#endif // FORTRAN_RUNTIME_FREESTANDING_TOOLS_H_
diff --git a/FortranRuntime/include/flang/Runtime/inquiry.h b/flang/include/flang/Runtime/inquiry.h
similarity index 91%
rename from FortranRuntime/include/flang/Runtime/inquiry.h
rename to flang/include/flang/Runtime/inquiry.h
index 83b07cf2f31a47..c7a7487f1a1b18 100644
--- a/FortranRuntime/include/flang/Runtime/inquiry.h
+++ b/flang/include/flang/Runtime/inquiry.h
@@ -1,4 +1,4 @@
-//===-- include/flang/Runtime/inquiry.h -------------------------*- C++ -*-===//
+//===-- include/flang/Runtime/inquiry.h ----------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -40,4 +40,4 @@ void RTDECL(Ubound)(void *result, const Descriptor &array, int kind,
} // extern "C"
} // namespace Fortran::runtime
-#endif /* FORTRAN_RUNTIME_INQUIRY_H_ */
+#endif // FORTRAN_RUNTIME_INQUIRY_H_
diff --git a/FortranRuntime/include/flang/Runtime/io-api.h b/flang/include/flang/Runtime/io-api.h
similarity index 98%
rename from FortranRuntime/include/flang/Runtime/io-api.h
rename to flang/include/flang/Runtime/io-api.h
index be948061c241a0..e588b46dc4b3a1 100644
--- a/FortranRuntime/include/flang/Runtime/io-api.h
+++ b/flang/include/flang/Runtime/io-api.h
@@ -11,10 +11,10 @@
#ifndef FORTRAN_RUNTIME_IO_API_H_
#define FORTRAN_RUNTIME_IO_API_H_
-#include "flang/Common/magic-numbers.h"
#include "flang/Common/uint128.h"
#include "flang/Runtime/entry-names.h"
#include "flang/Runtime/iostat.h"
+#include "flang/Runtime/magic-numbers.h"
#include <cinttypes>
#include <cstddef>
@@ -51,9 +51,6 @@ constexpr InquiryKeywordHash HashInquiryKeyword(const char *p) {
return hash;
}
-RT_API_ATTRS const char *InquiryKeywordHashDecode(
- char *buffer, std::size_t, InquiryKeywordHash);
-
extern "C" {
#define IONAME(name) RTNAME(io##name)
@@ -369,4 +366,4 @@ enum Iostat IODECL(EndIoStatement)(Cookie);
} // extern "C"
} // namespace Fortran::runtime::io
-#endif /* FORTRAN_RUNTIME_IO_API_H_ */
+#endif
diff --git a/FortranRuntime/include/flang/Runtime/iostat.h b/flang/include/flang/Runtime/iostat.h
similarity index 96%
rename from FortranRuntime/include/flang/Runtime/iostat.h
rename to flang/include/flang/Runtime/iostat.h
index 9a52990045ee13..0565718f6c103d 100644
--- a/FortranRuntime/include/flang/Runtime/iostat.h
+++ b/flang/include/flang/Runtime/iostat.h
@@ -12,7 +12,7 @@
#ifndef FORTRAN_RUNTIME_IOSTAT_H_
#define FORTRAN_RUNTIME_IOSTAT_H_
#include "flang/Common/api-attrs.h"
-#include "flang/Common/magic-numbers.h"
+#include "flang/Runtime/magic-numbers.h"
namespace Fortran::runtime::io {
// The value of IOSTAT= is zero when no error, end-of-record,
@@ -89,7 +89,5 @@ enum Iostat {
IostatNonExternalDefinedUnformattedIo,
};
-RT_API_ATTRS const char *IostatErrorString(int);
-
} // namespace Fortran::runtime::io
-#endif /* FORTRAN_RUNTIME_IOSTAT_H_ */
+#endif // FORTRAN_RUNTIME_IOSTAT_H_
diff --git a/FortranRuntime/include/flang/Common/magic-numbers.h b/flang/include/flang/Runtime/magic-numbers.h
similarity index 98%
rename from FortranRuntime/include/flang/Common/magic-numbers.h
rename to flang/include/flang/Runtime/magic-numbers.h
index 931df690766219..bab0e9ae05299a 100644
--- a/FortranRuntime/include/flang/Common/magic-numbers.h
+++ b/flang/include/flang/Runtime/magic-numbers.h
@@ -1,10 +1,10 @@
-#if 0 /*===-- include/flang/Runtime/magic-numbers.h ---------------*- C -*-===*/
- *
+#if 0 /*===-- include/flang/Runtime/magic-numbers.h -----------------------===*/
+/*
* 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
*
-/*===----------------------------------------------------------------------===*/
+ *===----------------------------------------------------------------------===*/
#endif
#if 0
This header can be included into both Fortran and C.
diff --git a/FortranRuntime/include/flang/Runtime/main.h b/flang/include/flang/Runtime/main.h
similarity index 95%
rename from FortranRuntime/include/flang/Runtime/main.h
rename to flang/include/flang/Runtime/main.h
index 98fcf1250d0ad6..88232ea64fa6ab 100644
--- a/FortranRuntime/include/flang/Runtime/main.h
+++ b/flang/include/flang/Runtime/main.h
@@ -20,4 +20,4 @@ void RTNAME(ProgramStart)(
void RTNAME(ByteswapOption)(void); // -byteswapio
FORTRAN_EXTERN_C_END
-#endif /* FORTRAN_RUNTIME_MAIN_H_ */
+#endif // FORTRAN_RUNTIME_MAIN_H_
diff --git a/FortranRuntime/include/flang/Runtime/matmul-instances.inc b/flang/include/flang/Runtime/matmul-instances.inc
similarity index 100%
rename from FortranRuntime/include/flang/Runtime/matmul-instances.inc
rename to flang/include/flang/Runtime/matmul-instances.inc
diff --git a/FortranRuntime/include/flang/Runtime/matmul-transpose.h b/flang/include/flang/Runtime/matmul-transpose.h
similarity index 97%
rename from FortranRuntime/include/flang/Runtime/matmul-transpose.h
rename to flang/include/flang/Runtime/matmul-transpose.h
index 077277fae2da86..2d79ca10e08958 100644
--- a/FortranRuntime/include/flang/Runtime/matmul-transpose.h
+++ b/flang/include/flang/Runtime/matmul-transpose.h
@@ -46,4 +46,4 @@ void RTDECL(MatmulTransposeDirect)(const Descriptor &, const Descriptor &,
} // extern "C"
} // namespace Fortran::runtime
-#endif /* FORTRAN_RUNTIME_MATMUL_TRANSPOSE_H_ */
+#endif // FORTRAN_RUNTIME_MATMUL_TRANSPOSE_H_
diff --git a/FortranRuntime/include/flang/Runtime/matmul.h b/flang/include/flang/Runtime/matmul.h
similarity index 97%
rename from FortranRuntime/include/flang/Runtime/matmul.h
rename to flang/include/flang/Runtime/matmul.h
index cd375ac43d77f2..a72d4a06ee4594 100644
--- a/FortranRuntime/include/flang/Runtime/matmul.h
+++ b/flang/include/flang/Runtime/matmul.h
@@ -45,4 +45,4 @@ void RTDECL(MatmulDirect)(const Descriptor &, const Descriptor &,
} // extern "C"
} // namespace Fortran::runtime
-#endif /* FORTRAN_RUNTIME_MATMUL_H_ */
+#endif // FORTRAN_RUNTIME_MATMUL_H_
diff --git a/FortranRuntime/include/flang/Runtime/misc-intrinsic.h b/flang/include/flang/Runtime/misc-intrinsic.h
similarity index 95%
rename from FortranRuntime/include/flang/Runtime/misc-intrinsic.h
rename to flang/include/flang/Runtime/misc-intrinsic.h
index 1d4163c2e1e751..3fb3aaed49c0fb 100644
--- a/FortranRuntime/include/flang/Runtime/misc-intrinsic.h
+++ b/flang/include/flang/Runtime/misc-intrinsic.h
@@ -28,4 +28,4 @@ void RTDECL(TransferSize)(Descriptor &result, const Descriptor &source,
std::int64_t size);
} // extern "C"
} // namespace Fortran::runtime
-#endif /* FORTRAN_RUNTIME_MISC_INTRINSIC_H_ */
+#endif // FORTRAN_RUNTIME_MISC_INTRINSIC_H_
diff --git a/FortranRuntime/include/flang/Runtime/numeric.h b/flang/include/flang/Runtime/numeric.h
similarity index 99%
rename from FortranRuntime/include/flang/Runtime/numeric.h
rename to flang/include/flang/Runtime/numeric.h
index 5fbab2e069b739..84a5a7cd7a361c 100644
--- a/FortranRuntime/include/flang/Runtime/numeric.h
+++ b/flang/include/flang/Runtime/numeric.h
@@ -455,4 +455,4 @@ CppTypeFor<TypeCategory::Real, 16> RTDECL(FPow16k)(
} // extern "C"
} // namespace Fortran::runtime
-#endif /* FORTRAN_RUNTIME_NUMERIC_H_ */
+#endif // FORTRAN_RUNTIME_NUMERIC_H_
diff --git a/FortranRuntime/include/flang/Runtime/pointer.h b/flang/include/flang/Runtime/pointer.h
similarity index 97%
rename from FortranRuntime/include/flang/Runtime/pointer.h
rename to flang/include/flang/Runtime/pointer.h
index b7322ad92bd583..c6d29db7218376 100644
--- a/FortranRuntime/include/flang/Runtime/pointer.h
+++ b/flang/include/flang/Runtime/pointer.h
@@ -12,10 +12,14 @@
#ifndef FORTRAN_RUNTIME_POINTER_H_
#define FORTRAN_RUNTIME_POINTER_H_
-#include "flang/Runtime/descriptor.h"
+#include "flang/Common/Fortran-consts.h"
+#include "flang/Runtime/descriptor-consts.h"
#include "flang/Runtime/entry-names.h"
namespace Fortran::runtime {
+using SubscriptValue = ISO::CFI_index_t;
+using common::TypeCategory;
+
extern "C" {
// Data pointer initialization for NULLIFY(), "p=>NULL()`, & for ALLOCATE().
diff --git a/FortranRuntime/include/flang/Runtime/ragged.h b/flang/include/flang/Runtime/ragged.h
similarity index 96%
rename from FortranRuntime/include/flang/Runtime/ragged.h
rename to flang/include/flang/Runtime/ragged.h
index 8574bc1fa110c8..f52a619c55b43e 100644
--- a/FortranRuntime/include/flang/Runtime/ragged.h
+++ b/flang/include/flang/Runtime/ragged.h
@@ -1,4 +1,4 @@
-//===-- include/flang/Runtime/ragged.h --------------------------*- C++ -*-===//
+//===-- Runtime/ragged.h ----------------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -57,4 +57,4 @@ void RTDECL(RaggedArrayDeallocate)(void *raggedArrayHeader);
} // extern "C"
} // namespace Fortran::runtime
-#endif /* FORTRAN_RUNTIME_RAGGED_H_ */
+#endif // FORTRAN_RUNTIME_RAGGED_H_
diff --git a/FortranRuntime/include/flang/Runtime/random.h b/flang/include/flang/Runtime/random.h
similarity index 100%
rename from FortranRuntime/include/flang/Runtime/random.h
rename to flang/include/flang/Runtime/random.h
diff --git a/FortranRuntime/include/flang/Runtime/reduce.h b/flang/include/flang/Runtime/reduce.h
similarity index 99%
rename from FortranRuntime/include/flang/Runtime/reduce.h
rename to flang/include/flang/Runtime/reduce.h
index ae2828f04bf7c0..60f54c393b4bbd 100644
--- a/FortranRuntime/include/flang/Runtime/reduce.h
+++ b/flang/include/flang/Runtime/reduce.h
@@ -435,4 +435,4 @@ void RTDECL(ReduceDerivedTypeDim)(Descriptor &result, const Descriptor &array,
} // extern "C"
} // namespace Fortran::runtime
-#endif /* FORTRAN_RUNTIME_REDUCE_H_ */
+#endif // FORTRAN_RUNTIME_REDUCE_H_
diff --git a/FortranRuntime/include/flang/Runtime/reduction.h b/flang/include/flang/Runtime/reduction.h
similarity index 99%
rename from FortranRuntime/include/flang/Runtime/reduction.h
rename to flang/include/flang/Runtime/reduction.h
index e00593fbc9f75e..97986c12e8a10e 100644
--- a/FortranRuntime/include/flang/Runtime/reduction.h
+++ b/flang/include/flang/Runtime/reduction.h
@@ -444,4 +444,4 @@ bool RTDECL(DotProductLogical)(const Descriptor &, const Descriptor &,
} // extern "C"
} // namespace Fortran::runtime
-#endif /* FORTRAN_RUNTIME_REDUCTION_H_ */
+#endif // FORTRAN_RUNTIME_REDUCTION_H_
diff --git a/FortranRuntime/include/flang/Runtime/stop.h b/flang/include/flang/Runtime/stop.h
similarity index 97%
rename from FortranRuntime/include/flang/Runtime/stop.h
rename to flang/include/flang/Runtime/stop.h
index 9ba41343c6f964..f7c4ffe7403e8e 100644
--- a/FortranRuntime/include/flang/Runtime/stop.h
+++ b/flang/include/flang/Runtime/stop.h
@@ -37,4 +37,4 @@ NORETURN void RTNAME(ReportFatalUserError)(
FORTRAN_EXTERN_C_END
-#endif /* FORTRAN_RUNTIME_STOP_H_ */
+#endif // FORTRAN_RUNTIME_STOP_H_
diff --git a/FortranRuntime/include/flang/Runtime/support.h b/flang/include/flang/Runtime/support.h
similarity index 97%
rename from FortranRuntime/include/flang/Runtime/support.h
rename to flang/include/flang/Runtime/support.h
index 9c9b067a18f2e4..4a6d4357e87103 100644
--- a/FortranRuntime/include/flang/Runtime/support.h
+++ b/flang/include/flang/Runtime/support.h
@@ -47,4 +47,4 @@ void RTDECL(CopyAndUpdateDescriptor)(Descriptor &to, const Descriptor &from,
} // extern "C"
} // namespace Fortran::runtime
-#endif /* FORTRAN_RUNTIME_SUPPORT_H_ */
+#endif // FORTRAN_RUNTIME_SUPPORT_H_
diff --git a/FortranRuntime/include/flang/Runtime/temporary-stack.h b/flang/include/flang/Runtime/temporary-stack.h
similarity index 98%
rename from FortranRuntime/include/flang/Runtime/temporary-stack.h
rename to flang/include/flang/Runtime/temporary-stack.h
index f83fab7b0ac811..3c1a4ea11a4352 100644
--- a/FortranRuntime/include/flang/Runtime/temporary-stack.h
+++ b/flang/include/flang/Runtime/temporary-stack.h
@@ -64,4 +64,4 @@ void RTNAME(DestroyDescriptorStack)(void *opaquePtr);
} // extern "C"
} // namespace Fortran::runtime
-#endif /* FORTRAN_RUNTIME_TEMPORARY_STACK_H_ */
+#endif // FORTRAN_RUNTIME_TEMPORARY_STACK_H_
diff --git a/FortranRuntime/include/flang/Runtime/time-intrinsic.h b/flang/include/flang/Runtime/time-intrinsic.h
similarity index 97%
rename from FortranRuntime/include/flang/Runtime/time-intrinsic.h
rename to flang/include/flang/Runtime/time-intrinsic.h
index 0e63fc6a4647a4..80490a17e45597 100644
--- a/FortranRuntime/include/flang/Runtime/time-intrinsic.h
+++ b/flang/include/flang/Runtime/time-intrinsic.h
@@ -48,4 +48,4 @@ void RTNAME(Etime)(const Descriptor *values, const Descriptor *time,
} // extern "C"
} // namespace Fortran::runtime
-#endif /* FORTRAN_RUNTIME_TIME_INTRINSIC_H_ */
+#endif // FORTRAN_RUNTIME_TIME_INTRINSIC_H_
diff --git a/FortranRuntime/include/flang/Runtime/transformational.h b/flang/include/flang/Runtime/transformational.h
similarity index 99%
rename from FortranRuntime/include/flang/Runtime/transformational.h
rename to flang/include/flang/Runtime/transformational.h
index 266dd9d7aebc24..a39b872f376a69 100644
--- a/FortranRuntime/include/flang/Runtime/transformational.h
+++ b/flang/include/flang/Runtime/transformational.h
@@ -154,4 +154,4 @@ void RTDECL(Unpack)(Descriptor &result, const Descriptor &vector,
} // extern "C"
} // namespace Fortran::runtime
-#endif /* FORTRAN_RUNTIME_TRANSFORMATIONAL_H_ */
+#endif // FORTRAN_RUNTIME_TRANSFORMATIONAL_H_
diff --git a/flang/include/flang/Support/Fortran-features.h b/flang/include/flang/Support/Fortran-features.h
index 718ce680afeeab..1423d2c83d22cc 100644
--- a/flang/include/flang/Support/Fortran-features.h
+++ b/flang/include/flang/Support/Fortran-features.h
@@ -6,8 +6,8 @@
//
//===----------------------------------------------------------------------===//
-#ifndef FORTRAN_COMMON_FORTRAN_FEATURES_H_
-#define FORTRAN_COMMON_FORTRAN_FEATURES_H_
+#ifndef FORTRAN_SUPPORT_FORTRAN_FEATURES_H_
+#define FORTRAN_SUPPORT_FORTRAN_FEATURES_H_
#include "flang/Common/enum-set.h"
#include "flang/Common/idioms.h"
@@ -191,4 +191,4 @@ class LanguageFeatureControl {
bool warnAllUsage_{false};
};
} // namespace Fortran::common
-#endif // FORTRAN_COMMON_FORTRAN_FEATURES_H_
+#endif /* FORTRAN_SUPPORT_FORTRAN_FEATURES_H_ */
diff --git a/flang/include/flang/Support/Fortran.h b/flang/include/flang/Support/Fortran.h
index 343a0b30d2ba9c..7a9b0d56d6b2ac 100644
--- a/flang/include/flang/Support/Fortran.h
+++ b/flang/include/flang/Support/Fortran.h
@@ -1,4 +1,4 @@
-//===-- include/flang/Common/Fortran.h --------------------------*- C++ -*-===//
+//===-- include/flang/Support/Fortran.h -------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -6,8 +6,8 @@
//
//===----------------------------------------------------------------------===//
-#ifndef FORTRAN_COMMON_FORTRAN_H_
-#define FORTRAN_COMMON_FORTRAN_H_
+#ifndef FORTRAN_SUPPORT_FORTRAN_H_
+#define FORTRAN_SUPPORT_FORTRAN_H_
// Fortran language concepts that are used in many phases are defined
// once here to avoid redundancy and needless translation.
@@ -107,4 +107,4 @@ inline std::string GetExternalAssemblyName(
}
} // namespace Fortran::common
-#endif // FORTRAN_COMMON_FORTRAN_H_
+#endif /* FORTRAN_SUPPORT_FORTRAN_H_ */
diff --git a/flang/include/flang/Support/MathOptionsBase.h b/flang/include/flang/Support/MathOptionsBase.h
index a739ba3e066599..072aed20da4708 100644
--- a/flang/include/flang/Support/MathOptionsBase.h
+++ b/flang/include/flang/Support/MathOptionsBase.h
@@ -14,8 +14,8 @@
///
//===----------------------------------------------------------------------===//
-#ifndef FORTRAN_COMMON_MATHOPTIONSBASE_H
-#define FORTRAN_COMMON_MATHOPTIONSBASE_H
+#ifndef FORTRAN_SUPPORT_MATHOPTIONSBASE_H_
+#define FORTRAN_SUPPORT_MATHOPTIONSBASE_H_
namespace Fortran::common {
@@ -41,4 +41,4 @@ class MathOptionsBase {
} // namespace Fortran::common
-#endif // FORTRAN_COMMON_MATHOPTIONSBASE_H
+#endif /* FORTRAN_SUPPORT_MATHOPTIONSBASE_H_ */
diff --git a/flang/include/flang/Support/Version.h b/flang/include/flang/Support/Version.h
index 643ddd2e27f69a..4ceb19e7f4d714 100644
--- a/flang/include/flang/Support/Version.h
+++ b/flang/include/flang/Support/Version.h
@@ -12,8 +12,8 @@
///
//===----------------------------------------------------------------------===//
-#ifndef FORTRAN_COMMON_VERSION_H
-#define FORTRAN_COMMON_VERSION_H
+#ifndef FORTRAN_SUPPORT_VERSION_H_
+#define FORTRAN_SUPPORT_VERSION_H_
#include "flang/Version.inc"
#include "llvm/ADT/StringRef.h"
@@ -53,4 +53,4 @@ std::string getFlangFullVersion();
std::string getFlangToolFullVersion(llvm::StringRef ToolName);
} // namespace Fortran::common
-#endif // FORTRAN_COMMON_VERSION_H
+#endif /* FORTRAN_SUPPORT_VERSION_H_ */
diff --git a/flang/include/flang/Support/default-kinds.h b/flang/include/flang/Support/default-kinds.h
index e78a08dfae6cc3..92f06e6fe2d272 100644
--- a/flang/include/flang/Support/default-kinds.h
+++ b/flang/include/flang/Support/default-kinds.h
@@ -6,8 +6,8 @@
//
//===----------------------------------------------------------------------===//
-#ifndef FORTRAN_COMMON_DEFAULT_KINDS_H_
-#define FORTRAN_COMMON_DEFAULT_KINDS_H_
+#ifndef FORTRAN_SUPPORT_DEFAULT_KINDS_H_
+#define FORTRAN_SUPPORT_DEFAULT_KINDS_H_
#include "flang/Support/Fortran.h"
#include <cstdint>
@@ -58,4 +58,4 @@ class IntrinsicTypeDefaultKinds {
int defaultLogicalKind_{defaultIntegerKind_};
};
} // namespace Fortran::common
-#endif // FORTRAN_COMMON_DEFAULT_KINDS_H_
+#endif /* FORTRAN_SUPPORT_DEFAULT_KINDS_H_ */
diff --git a/flang/include/flang/Support/indirection.h b/flang/include/flang/Support/indirection.h
index 1221a659323503..aeb1698516bae9 100644
--- a/flang/include/flang/Support/indirection.h
+++ b/flang/include/flang/Support/indirection.h
@@ -6,8 +6,8 @@
//
//===----------------------------------------------------------------------===//
-#ifndef FORTRAN_COMMON_INDIRECTION_H_
-#define FORTRAN_COMMON_INDIRECTION_H_
+#ifndef FORTRAN_SUPPORT_INDIRECTION_H_
+#define FORTRAN_SUPPORT_INDIRECTION_H_
// Define a smart pointer class template that is rather like
// non-nullable std::unique_ptr<>. Indirection<> is, like a C++ reference
@@ -171,4 +171,4 @@ template <typename A> class ForwardOwningPointer {
void (*deleter_)(A *){nullptr};
};
} // namespace Fortran::common
-#endif // FORTRAN_COMMON_INDIRECTION_H_
+#endif /* FORTRAN_SUPPORT_INDIRECTION_H_ */
diff --git a/flang/include/flang/Support/interval.h b/flang/include/flang/Support/interval.h
index 2918cc54de3926..99c0784f006a80 100644
--- a/flang/include/flang/Support/interval.h
+++ b/flang/include/flang/Support/interval.h
@@ -6,8 +6,8 @@
//
//===----------------------------------------------------------------------===//
-#ifndef FORTRAN_COMMON_INTERVAL_H_
-#define FORTRAN_COMMON_INTERVAL_H_
+#ifndef FORTRAN_SUPPORT_INTERVAL_H_
+#define FORTRAN_SUPPORT_INTERVAL_H_
// Defines a generalized template class Interval<A> to represent
// the half-open interval [x .. x+n).
@@ -126,4 +126,4 @@ template <typename A> class Interval {
std::size_t size_{0};
};
} // namespace Fortran::common
-#endif // FORTRAN_COMMON_INTERVAL_H_
+#endif /* FORTRAN_SUPPORT_INTERVAL_H_ */
diff --git a/flang/include/flang/Support/template.h b/flang/include/flang/Support/template.h
index 58c9b0a5628e8a..36fa6f7072b40c 100644
--- a/flang/include/flang/Support/template.h
+++ b/flang/include/flang/Support/template.h
@@ -6,8 +6,8 @@
//
//===----------------------------------------------------------------------===//
-#ifndef FORTRAN_COMMON_TEMPLATE_H_
-#define FORTRAN_COMMON_TEMPLATE_H_
+#ifndef FORTRAN_SUPPORT_TEMPLATE_H_
+#define FORTRAN_SUPPORT_TEMPLATE_H_
#include "flang/Common/idioms.h"
#include "flang/Common/variant.h"
@@ -322,4 +322,4 @@ common::IfNoLvalue<typename VISITOR::Result, VISITOR> SearchTypes(
std::move(visitor), std::move(defaultResult));
}
} // namespace Fortran::common
-#endif // FORTRAN_COMMON_TEMPLATE_H_
+#endif /* FORTRAN_SUPPORT_TEMPLATE_H_ */
diff --git a/flang/include/flang/Support/unwrap.h b/flang/include/flang/Support/unwrap.h
index d8fa553dedda3f..e890753499d1a1 100644
--- a/flang/include/flang/Support/unwrap.h
+++ b/flang/include/flang/Support/unwrap.h
@@ -6,8 +6,8 @@
//
//===----------------------------------------------------------------------===//
-#ifndef FORTRAN_COMMON_UNWRAP_H_
-#define FORTRAN_COMMON_UNWRAP_H_
+#ifndef FORTRAN_SUPPORT_UNWRAP_H_
+#define FORTRAN_SUPPORT_UNWRAP_H_
#include "indirection.h"
#include "reference-counted.h"
@@ -155,4 +155,4 @@ template <typename A, typename B> std::optional<A> UnwrapCopy(const B &x) {
}
}
} // namespace Fortran::common
-#endif // FORTRAN_COMMON_UNWRAP_H_
+#endif /* FORTRAN_SUPPORT_UNWRAP_H_ */
diff --git a/flang/include/flang/Testing/README.md b/flang/include/flang/Testing/README.md
new file mode 100644
index 00000000000000..a722732fb76407
--- /dev/null
+++ b/flang/include/flang/Testing/README.md
@@ -0,0 +1,25 @@
+Files in this directory are used by Flang (the compiler) and FortranRuntime
+(the runtime library for Flang-compiled programs). They must be compatible by
+both. For definitions used only by Flang, consider
+`flang/{lib,include/flang}/Support` instead. For definitions used only by
+FortranRuntime, consider `FortranRuntime/{lib,include/FortranRuntime}/Runtime`.
+
+The requirements for common code include:
+
+ * No dependence to LLVM, including LLVMSupport.
+
+ * No link-dependence to the C++ runtime. This means that e.g. `std::string`
+ cannot be used.
+
+ * No use of `std::optional<T>`; `fortran::common::optional<T>` can be used
+ instead.
+
+ * Preprocessor macros from `config.h` and CMake
+ `(target/add)_compile_definitions` must be defined by both build scripts.
+ See `flang/cmake/modules/FlangCommon.cmake`.
+
+ * Some header files are included from `.c` files.
+ `#include <flang/Common/c-or-cpp.h>` can help to support C++ and C.
+
+ * Global declarations may need to be annotated using definitions from
+ `api-attrs.h`.
diff --git a/FortranRuntime/include/flang/Testing/fp-testing.h b/flang/include/flang/Testing/fp-testing.h
similarity index 100%
rename from FortranRuntime/include/flang/Testing/fp-testing.h
rename to flang/include/flang/Testing/fp-testing.h
diff --git a/FortranRuntime/include/flang/Testing/testing.h b/flang/include/flang/Testing/testing.h
similarity index 100%
rename from FortranRuntime/include/flang/Testing/testing.h
rename to flang/include/flang/Testing/testing.h
diff --git a/flang/lib/Common/CMakeLists.txt b/flang/lib/Common/CMakeLists.txt
index f7fdc74a32ec8c..8039bd8a51ee82 100644
--- a/flang/lib/Common/CMakeLists.txt
+++ b/flang/lib/Common/CMakeLists.txt
@@ -6,7 +6,7 @@
#
#===------------------------------------------------------------------------===#
-add_flang_library(FortranCommon
- "${FORTRANRUNTIME_SOURCE_DIR}/lib/Common/binary-to-decimal.cpp"
- "${FORTRANRUNTIME_SOURCE_DIR}/lib/Common/decimal-to-binary.cpp"
+add_flang_library(FortranCommon
+ binary-to-decimal.cpp
+ decimal-to-binary.cpp
)
diff --git a/flang/lib/Common/README.md b/flang/lib/Common/README.md
new file mode 100644
index 00000000000000..a722732fb76407
--- /dev/null
+++ b/flang/lib/Common/README.md
@@ -0,0 +1,25 @@
+Files in this directory are used by Flang (the compiler) and FortranRuntime
+(the runtime library for Flang-compiled programs). They must be compatible by
+both. For definitions used only by Flang, consider
+`flang/{lib,include/flang}/Support` instead. For definitions used only by
+FortranRuntime, consider `FortranRuntime/{lib,include/FortranRuntime}/Runtime`.
+
+The requirements for common code include:
+
+ * No dependence to LLVM, including LLVMSupport.
+
+ * No link-dependence to the C++ runtime. This means that e.g. `std::string`
+ cannot be used.
+
+ * No use of `std::optional<T>`; `fortran::common::optional<T>` can be used
+ instead.
+
+ * Preprocessor macros from `config.h` and CMake
+ `(target/add)_compile_definitions` must be defined by both build scripts.
+ See `flang/cmake/modules/FlangCommon.cmake`.
+
+ * Some header files are included from `.c` files.
+ `#include <flang/Common/c-or-cpp.h>` can help to support C++ and C.
+
+ * Global declarations may need to be annotated using definitions from
+ `api-attrs.h`.
diff --git a/FortranRuntime/lib/Common/big-radix-floating-point.h b/flang/lib/Common/big-radix-floating-point.h
similarity index 100%
rename from FortranRuntime/lib/Common/big-radix-floating-point.h
rename to flang/lib/Common/big-radix-floating-point.h
diff --git a/FortranRuntime/lib/Common/binary-to-decimal.cpp b/flang/lib/Common/binary-to-decimal.cpp
similarity index 100%
rename from FortranRuntime/lib/Common/binary-to-decimal.cpp
rename to flang/lib/Common/binary-to-decimal.cpp
diff --git a/FortranRuntime/lib/Common/decimal-to-binary.cpp b/flang/lib/Common/decimal-to-binary.cpp
similarity index 100%
rename from FortranRuntime/lib/Common/decimal-to-binary.cpp
rename to flang/lib/Common/decimal-to-binary.cpp
diff --git a/flang/lib/Evaluate/fold-logical.cpp b/flang/lib/Evaluate/fold-logical.cpp
index a7e1aad38f3586..ee6655f8387177 100644
--- a/flang/lib/Evaluate/fold-logical.cpp
+++ b/flang/lib/Evaluate/fold-logical.cpp
@@ -9,8 +9,8 @@
#include "fold-implementation.h"
#include "fold-matmul.h"
#include "fold-reduction.h"
-#include "flang/Common/magic-numbers.h"
#include "flang/Evaluate/check-expression.h"
+#include "flang/Runtime/magic-numbers.h"
namespace Fortran::evaluate {
diff --git a/flang/lib/Lower/ConvertVariable.cpp b/flang/lib/Lower/ConvertVariable.cpp
index f76d44f5479d32..82bedca7bd41dd 100644
--- a/flang/lib/Lower/ConvertVariable.cpp
+++ b/flang/lib/Lower/ConvertVariable.cpp
@@ -39,7 +39,7 @@
#include "flang/Optimizer/Support/FatalError.h"
#include "flang/Optimizer/Support/InternalNames.h"
#include "flang/Optimizer/Support/Utils.h"
-#include "flang/Runtime/allocator-registry.h"
+#include "flang/Runtime/allocator-registry-consts.h"
#include "flang/Semantics/runtime-type-info.h"
#include "flang/Semantics/tools.h"
#include "llvm/Support/CommandLine.h"
diff --git a/flang/lib/Optimizer/Builder/Runtime/ArrayConstructor.cpp b/flang/lib/Optimizer/Builder/Runtime/ArrayConstructor.cpp
index c786bef5cb1c4c..b7c6dc5fb2bf6c 100644
--- a/flang/lib/Optimizer/Builder/Runtime/ArrayConstructor.cpp
+++ b/flang/lib/Optimizer/Builder/Runtime/ArrayConstructor.cpp
@@ -9,7 +9,7 @@
#include "flang/Optimizer/Builder/Runtime/ArrayConstructor.h"
#include "flang/Optimizer/Builder/FIRBuilder.h"
#include "flang/Optimizer/Builder/Runtime/RTBuilder.h"
-#include "flang/Runtime/array-constructor.h"
+#include "flang/Runtime/array-constructor-consts.h"
using namespace Fortran::runtime;
@@ -29,8 +29,8 @@ mlir::Value fir::runtime::genInitArrayConstructorVector(
// the target. The "cookieSize" argument is used to validate this wild
// assumption until runtime interfaces are improved.
std::size_t arrayVectorStructBitSize =
- 2 * sizeof(Fortran::runtime::ArrayConstructorVector) * 8;
- std::size_t alignLike = alignof(Fortran::runtime::ArrayConstructorVector) * 8;
+ MaxArrayConstructorVectorSizeInBytes * 8;
+ std::size_t alignLike = MaxArrayConstructorVectorAlignInBytes * 8;
fir::SequenceType::Extent numElem =
(arrayVectorStructBitSize + alignLike - 1) / alignLike;
mlir::Type intType = builder.getIntegerType(alignLike);
diff --git a/flang/lib/Optimizer/CodeGen/CodeGen.cpp b/flang/lib/Optimizer/CodeGen/CodeGen.cpp
index 88293bcf36a780..eed389380f7cca 100644
--- a/flang/lib/Optimizer/CodeGen/CodeGen.cpp
+++ b/flang/lib/Optimizer/CodeGen/CodeGen.cpp
@@ -23,8 +23,8 @@
#include "flang/Optimizer/Support/InternalNames.h"
#include "flang/Optimizer/Support/TypeCode.h"
#include "flang/Optimizer/Support/Utils.h"
-#include "flang/Runtime/allocator-registry.h"
-#include "flang/Runtime/descriptor.h"
+#include "flang/Runtime/allocator-registry-consts.h"
+#include "flang/Runtime/descriptor-consts.h"
#include "flang/Semantics/runtime-type-info.h"
#include "mlir/Conversion/ArithCommon/AttrToLLVMConverter.h"
#include "mlir/Conversion/ArithToLLVM/ArithToLLVM.h"
@@ -1273,16 +1273,12 @@ struct EmboxCommonConversion : public fir::FIROpConversion<OP> {
insertField(rewriter, loc, descriptor, {kExtraPosInBox}, extraField);
} else {
// Compute the value of the extra field based on allocator_idx and
- // addendum present using a Descriptor object.
- Fortran::runtime::StaticDescriptor staticDescriptor;
- Fortran::runtime::Descriptor &desc{staticDescriptor.descriptor()};
- desc.raw().extra = 0;
- desc.SetAllocIdx(allocatorIdx);
+ // addendum present.
+ unsigned extra = allocatorIdx << _CFI_ALLOCATOR_IDX_SHIFT;
if (hasAddendum)
- desc.SetHasAddendum();
- descriptor =
- insertField(rewriter, loc, descriptor, {kExtraPosInBox},
- this->genI32Constant(loc, rewriter, desc.raw().extra));
+ extra |= _CFI_ADDENDUM_FLAG;
+ descriptor = insertField(rewriter, loc, descriptor, {kExtraPosInBox},
+ this->genI32Constant(loc, rewriter, extra));
}
if (hasAddendum) {
diff --git a/flang/lib/Semantics/compute-offsets.cpp b/flang/lib/Semantics/compute-offsets.cpp
index b5a58ddca0ecdd..c5774ed30de748 100644
--- a/flang/lib/Semantics/compute-offsets.cpp
+++ b/flang/lib/Semantics/compute-offsets.cpp
@@ -11,7 +11,7 @@
#include "flang/Evaluate/fold.h"
#include "flang/Evaluate/shape.h"
#include "flang/Evaluate/type.h"
-#include "flang/Runtime/descriptor.h"
+#include "flang/Runtime/descriptor-consts.h"
#include "flang/Semantics/scope.h"
#include "flang/Semantics/semantics.h"
#include "flang/Semantics/symbol.h"
@@ -341,8 +341,12 @@ auto ComputeOffsetsHelper::GetSizeAndAlignment(
const auto *derived{evaluate::GetDerivedTypeSpec(dyType)};
int lenParams{derived ? CountLenParameters(*derived) : 0};
bool needAddendum{derived || (dyType && dyType->IsUnlimitedPolymorphic())};
- std::size_t size{runtime::Descriptor::SizeInBytes(
+
+ // FIXME: Get descriptor size from targetCharacteristics instead
+ // overapproximation
+ std::size_t size{runtime::MaxDescriptorSizeInBytes(
symbol.Rank(), needAddendum, lenParams)};
+
return {size, targetCharacteristics.descriptorAlignment()};
}
if (IsProcedurePointer(symbol)) {
diff --git a/flang/lib/Testing/CMakeLists.txt b/flang/lib/Testing/CMakeLists.txt
new file mode 100644
index 00000000000000..d5caada3fb68e8
--- /dev/null
+++ b/flang/lib/Testing/CMakeLists.txt
@@ -0,0 +1,20 @@
+#===-- lib/Testing/CMakeLists.txt ------------------------------------------===#
+#
+# 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
+#
+#===------------------------------------------------------------------------===#
+
+set(public_headers "")
+file(GLOB_RECURSE public_headers
+ "${FLANGRUNTIME_SOURCE_DIR}/lib/Testing/*.h"
+)
+
+add_fortranruntime_library(NonGTestTesting EXCLUDE_FROM_ALL LINK_TO_LLVM
+ testing.cpp
+ fp-testing.cpp
+ ADDITIONAL_HEADERS
+ ${public_headers}
+)
+
diff --git a/flang/lib/Testing/README.md b/flang/lib/Testing/README.md
new file mode 100644
index 00000000000000..a722732fb76407
--- /dev/null
+++ b/flang/lib/Testing/README.md
@@ -0,0 +1,25 @@
+Files in this directory are used by Flang (the compiler) and FortranRuntime
+(the runtime library for Flang-compiled programs). They must be compatible by
+both. For definitions used only by Flang, consider
+`flang/{lib,include/flang}/Support` instead. For definitions used only by
+FortranRuntime, consider `FortranRuntime/{lib,include/FortranRuntime}/Runtime`.
+
+The requirements for common code include:
+
+ * No dependence to LLVM, including LLVMSupport.
+
+ * No link-dependence to the C++ runtime. This means that e.g. `std::string`
+ cannot be used.
+
+ * No use of `std::optional<T>`; `fortran::common::optional<T>` can be used
+ instead.
+
+ * Preprocessor macros from `config.h` and CMake
+ `(target/add)_compile_definitions` must be defined by both build scripts.
+ See `flang/cmake/modules/FlangCommon.cmake`.
+
+ * Some header files are included from `.c` files.
+ `#include <flang/Common/c-or-cpp.h>` can help to support C++ and C.
+
+ * Global declarations may need to be annotated using definitions from
+ `api-attrs.h`.
diff --git a/FortranRuntime/lib/Testing/fp-testing.cpp b/flang/lib/Testing/fp-testing.cpp
similarity index 100%
rename from FortranRuntime/lib/Testing/fp-testing.cpp
rename to flang/lib/Testing/fp-testing.cpp
diff --git a/FortranRuntime/lib/Testing/testing.cpp b/flang/lib/Testing/testing.cpp
similarity index 100%
rename from FortranRuntime/lib/Testing/testing.cpp
rename to flang/lib/Testing/testing.cpp
diff --git a/flang/module/__fortran_builtins.f90 b/flang/module/__fortran_builtins.f90
index fe91305c836ff4..d1d4a639e70d72 100644
--- a/flang/module/__fortran_builtins.f90
+++ b/flang/module/__fortran_builtins.f90
@@ -6,7 +6,7 @@
!
!===------------------------------------------------------------------------===!
-#include '../../FortranRuntime/include/flang/Common/magic-numbers.h'
+#include '../include/flang/Runtime/magic-numbers.h'
! These naming shenanigans prevent names from Fortran intrinsic modules
! from being usable on INTRINSIC statements, and force the program
diff --git a/flang/module/__fortran_ieee_exceptions.f90 b/flang/module/__fortran_ieee_exceptions.f90
index 56f79a473b556a..6691012eda238a 100644
--- a/flang/module/__fortran_ieee_exceptions.f90
+++ b/flang/module/__fortran_ieee_exceptions.f90
@@ -11,7 +11,7 @@
! here under another name so that IEEE_ARITHMETIC can USE it and export its
! declarations without clashing with a non-intrinsic module in a program.
-#include '../../FortranRuntime/include/flang/Common/magic-numbers.h'
+#include '../include/flang/Runtime/magic-numbers.h'
module __fortran_ieee_exceptions
use __fortran_builtins, only: &
diff --git a/flang/module/ieee_arithmetic.f90 b/flang/module/ieee_arithmetic.f90
index 667374d0660806..7eaa7db55af9f8 100644
--- a/flang/module/ieee_arithmetic.f90
+++ b/flang/module/ieee_arithmetic.f90
@@ -8,7 +8,7 @@
! Fortran 2018 Clause 17
-#include '../../FortranRuntime/include/flang/Common/magic-numbers.h'
+#include '../include/flang/Runtime/magic-numbers.h'
module ieee_arithmetic
! F18 Clause 17.1p1:
diff --git a/flang/module/iso_fortran_env.f90 b/flang/module/iso_fortran_env.f90
index d1f956b6b86408..4e575b422c2a04 100644
--- a/flang/module/iso_fortran_env.f90
+++ b/flang/module/iso_fortran_env.f90
@@ -8,7 +8,7 @@
! See Fortran 2023, subclause 16.10.2
-#include '../../FortranRuntime/include/flang/Common/magic-numbers.h'
+#include '../include/flang/Runtime/magic-numbers.h'
module iso_fortran_env
diff --git a/FortranRuntime/unittests/Common/CMakeLists.txt b/flang/unittests/Common/CMakeLists.txt
similarity index 100%
rename from FortranRuntime/unittests/Common/CMakeLists.txt
rename to flang/unittests/Common/CMakeLists.txt
diff --git a/FortranRuntime/unittests/Common/FastIntSetTest.cpp b/flang/unittests/Common/FastIntSetTest.cpp
similarity index 97%
rename from FortranRuntime/unittests/Common/FastIntSetTest.cpp
rename to flang/unittests/Common/FastIntSetTest.cpp
index a36a334e370eb9..bd1b953fa16631 100644
--- a/FortranRuntime/unittests/Common/FastIntSetTest.cpp
+++ b/flang/unittests/Common/FastIntSetTest.cpp
@@ -1,4 +1,4 @@
-//===-- unittests/Common/FastIntSetTest.cpp ---------------------*- C++ -*-===//
+//===-- flang/unittests/Common/FastIntSetTest.cpp ---------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -6,8 +6,8 @@
//
//===----------------------------------------------------------------------===//
-#include "flang/Common/fast-int-set.h"
#include "gtest/gtest.h"
+#include "flang/Common/fast-int-set.h"
#include <optional>
TEST(FastIntSetTests, Sanity) {
diff --git a/FortranRuntime/unittests/Decimal/CMakeLists.txt b/flang/unittests/Decimal/CMakeLists.txt
similarity index 100%
rename from FortranRuntime/unittests/Decimal/CMakeLists.txt
rename to flang/unittests/Decimal/CMakeLists.txt
diff --git a/FortranRuntime/unittests/Decimal/quick-sanity-test.cpp b/flang/unittests/Decimal/quick-sanity-test.cpp
similarity index 92%
rename from FortranRuntime/unittests/Decimal/quick-sanity-test.cpp
rename to flang/unittests/Decimal/quick-sanity-test.cpp
index 0e8ff0ce48b3c6..c36c73b817e1f9 100644
--- a/FortranRuntime/unittests/Decimal/quick-sanity-test.cpp
+++ b/flang/unittests/Decimal/quick-sanity-test.cpp
@@ -1,11 +1,3 @@
-//===-- unittests/Decimal/quick-sanity-test.cpp -----------------*- C++ -*-===//
-//
-// 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
-//
-//===----------------------------------------------------------------------===//
-
#include "flang/Common/decimal.h"
#include "llvm/Support/raw_ostream.h"
#include <cinttypes>
diff --git a/FortranRuntime/unittests/Decimal/thorough-test.cpp b/flang/unittests/Decimal/thorough-test.cpp
similarity index 86%
rename from FortranRuntime/unittests/Decimal/thorough-test.cpp
rename to flang/unittests/Decimal/thorough-test.cpp
index 0648b61d7c1cda..0f7a2d4b33e764 100644
--- a/FortranRuntime/unittests/Decimal/thorough-test.cpp
+++ b/flang/unittests/Decimal/thorough-test.cpp
@@ -1,11 +1,3 @@
-//===-- unittests/Decimal/thorough-test.cpp ---------------------*- C++ -*-===//
-//
-// 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
-//
-//===----------------------------------------------------------------------===//
-
#include "flang/Common/decimal.h"
#include "llvm/Support/raw_ostream.h"
#include <cinttypes>
diff --git a/flang/unittests/Evaluate/CMakeLists.txt b/flang/unittests/Evaluate/CMakeLists.txt
index 324195348d045b..0cb0fc4dd52531 100644
--- a/flang/unittests/Evaluate/CMakeLists.txt
+++ b/flang/unittests/Evaluate/CMakeLists.txt
@@ -1,7 +1,7 @@
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
add_library(FortranEvaluateTesting
- ${FORTRANRUNTIME_SOURCE_DIR}/lib/Testing/testing.cpp
- ${FORTRANRUNTIME_SOURCE_DIR}/lib/Testing/fp-testing.cpp
+ ${FLANG_SOURCE_DIR}/lib/Testing/testing.cpp
+ ${FLANG_SOURCE_DIR}/lib/Testing/fp-testing.cpp
)
set_target_properties(FortranEvaluateTesting PROPERTIES FOLDER "Flang/Tests")
if (LLVM_LINK_LLVM_DYLIB)
diff --git a/flang/unittests/Optimizer/Builder/Runtime/AllocatableTest.cpp b/flang/unittests/Optimizer/Builder/Runtime/AllocatableTest.cpp
index 1db43cacc90f07..f618e72d7b7f3c 100644
--- a/flang/unittests/Optimizer/Builder/Runtime/AllocatableTest.cpp
+++ b/flang/unittests/Optimizer/Builder/Runtime/AllocatableTest.cpp
@@ -9,7 +9,7 @@
#include "flang/Optimizer/Builder/Runtime/Allocatable.h"
#include "RuntimeCallTestBase.h"
#include "gtest/gtest.h"
-#include "flang/Runtime/descriptor.h"
+#include "flang/Runtime/descriptor-consts.h"
using namespace Fortran::runtime;
>From 83910a4f7e9035152a3a8ed5cf3cc72a7335df36 Mon Sep 17 00:00:00 2001
From: Michael Kruse <llvm-project at meinersbur.de>
Date: Wed, 16 Oct 2024 12:08:47 +0200
Subject: [PATCH 19/32] FortranRuntime -> flang-rt
---
.../test/NonGtestUnit/lit.site.cfg.py.in | 13 ---
FortranRuntime/test/Unit/lit.site.cfg.py.in | 14 ---
FortranRuntime/test/lit.site.cfg.py.in | 18 ----
clang/lib/Driver/ToolChains/CommonArgs.cpp | 4 +-
clang/lib/Driver/ToolChains/Flang.cpp | 8 +-
{FortranRuntime => flang-rt}/.clang-format | 0
{FortranRuntime => flang-rt}/.clang-tidy | 0
{FortranRuntime => flang-rt}/CMakeLists.txt | 82 +++++++++---------
{FortranRuntime => flang-rt}/CODE_OWNERS.TXT | 0
{FortranRuntime => flang-rt}/LICENSE.TXT | 0
{FortranRuntime => flang-rt}/README.md | 62 ++++++-------
.../cmake/config.h.cmake.in | 0
.../cmake/modules/AddFlangRT.cmake | 44 +++++-----
.../cmake/modules/AddFlangRTOffload.cmake | 24 +++---
.../include/flang-rt/CufRuntime}/allocator.h | 8 +-
.../flang-rt/flang_rt}/allocator-registry.h | 8 +-
.../flang-rt/flang_rt}/array-constructor.h | 10 +--
.../include/flang-rt/flang_rt}/descriptor.h | 12 +--
.../include/flang-rt/flang_rt}/io-api-funcs.h | 8 +-
.../include/flang-rt/flang_rt}/iostat-funcs.h | 8 +-
.../include/flang-rt/flang_rt}/memory.h | 8 +-
.../include/flang-rt/flang_rt}/type-code.h | 8 +-
.../lib/CMakeLists.txt | 10 ++-
.../lib/CufRuntime}/CMakeLists.txt | 6 +-
.../lib/CufRuntime}/allocator.cpp | 18 ++--
.../lib/CufRuntime}/descriptor.cpp | 6 +-
.../lib/FortranFloat128Math}/CMakeLists.txt | 9 +-
.../lib/FortranFloat128Math}/acos.cpp | 2 +-
.../lib/FortranFloat128Math}/acosh.cpp | 2 +-
.../lib/FortranFloat128Math}/asin.cpp | 2 +-
.../lib/FortranFloat128Math}/asinh.cpp | 2 +-
.../lib/FortranFloat128Math}/atan.cpp | 2 +-
.../lib/FortranFloat128Math}/atan2.cpp | 2 +-
.../lib/FortranFloat128Math}/atanh.cpp | 2 +-
.../lib/FortranFloat128Math}/ceil.cpp | 2 +-
.../lib/FortranFloat128Math}/complex-math.c | 2 +-
.../lib/FortranFloat128Math}/complex-math.h | 8 +-
.../lib/FortranFloat128Math}/cos.cpp | 2 +-
.../lib/FortranFloat128Math}/cosh.cpp | 2 +-
.../lib/FortranFloat128Math}/erf.cpp | 2 +-
.../lib/FortranFloat128Math}/erfc.cpp | 2 +-
.../lib/FortranFloat128Math}/exp.cpp | 2 +-
.../lib/FortranFloat128Math}/exponent.cpp | 2 +-
.../lib/FortranFloat128Math}/floor.cpp | 2 +-
.../lib/FortranFloat128Math}/fma.cpp | 2 +-
.../lib/FortranFloat128Math}/fraction.cpp | 2 +-
.../lib/FortranFloat128Math}/hypot.cpp | 2 +-
.../lib/FortranFloat128Math}/j0.cpp | 2 +-
.../lib/FortranFloat128Math}/j1.cpp | 2 +-
.../lib/FortranFloat128Math}/jn.cpp | 2 +-
.../lib/FortranFloat128Math}/lgamma.cpp | 2 +-
.../lib/FortranFloat128Math}/llround.cpp | 2 +-
.../lib/FortranFloat128Math}/log.cpp | 2 +-
.../lib/FortranFloat128Math}/log10.cpp | 2 +-
.../lib/FortranFloat128Math}/lround.cpp | 2 +-
.../lib/FortranFloat128Math}/math-entries.h | 8 +-
.../lib/FortranFloat128Math}/mod-real.cpp | 2 +-
.../lib/FortranFloat128Math}/modulo-real.cpp | 2 +-
.../lib/FortranFloat128Math}/nearest.cpp | 2 +-
.../lib/FortranFloat128Math}/norm2.cpp | 2 +-
.../numeric-template-specs.h | 8 +-
.../lib/FortranFloat128Math}/pow.cpp | 2 +-
.../lib/FortranFloat128Math}/random.cpp | 2 +-
.../lib/FortranFloat128Math}/round.cpp | 2 +-
.../lib/FortranFloat128Math}/rrspacing.cpp | 2 +-
.../lib/FortranFloat128Math}/scale.cpp | 2 +-
.../lib/FortranFloat128Math}/set-exponent.cpp | 2 +-
.../lib/FortranFloat128Math}/sin.cpp | 2 +-
.../lib/FortranFloat128Math}/sinh.cpp | 2 +-
.../lib/FortranFloat128Math}/spacing.cpp | 2 +-
.../lib/FortranFloat128Math}/sqrt.cpp | 2 +-
.../lib/FortranFloat128Math}/tan.cpp | 2 +-
.../lib/FortranFloat128Math}/tanh.cpp | 2 +-
.../lib/FortranFloat128Math}/tgamma.cpp | 2 +-
.../lib/FortranFloat128Math}/trunc.cpp | 2 +-
.../lib/FortranFloat128Math}/y0.cpp | 2 +-
.../lib/FortranFloat128Math}/y1.cpp | 2 +-
.../lib/FortranFloat128Math}/yn.cpp | 2 +-
.../lib/Testing/CMakeLists.txt | 2 +-
.../lib/flang_rt}/CMakeLists.txt | 63 +++++++-------
.../lib/flang_rt}/ISO_Fortran_binding.cpp | 6 +-
.../lib/flang_rt}/ISO_Fortran_util.h | 12 +--
.../lib/flang_rt}/allocatable.cpp | 4 +-
.../lib/flang_rt}/allocator-registry.cpp | 8 +-
.../lib/flang_rt}/array-constructor.cpp | 6 +-
.../lib/flang_rt}/assign-impl.h | 0
.../lib/flang_rt}/assign.cpp | 4 +-
.../lib/flang_rt}/buffer.cpp | 2 +-
.../lib/flang_rt}/buffer.h | 10 +--
.../lib/flang_rt}/character.cpp | 4 +-
.../lib/flang_rt}/command.cpp | 4 +-
.../lib/flang_rt}/complex-powi.cpp | 2 +-
.../lib/flang_rt}/complex-reduction.c | 2 +-
.../lib/flang_rt}/complex-reduction.h | 8 +-
.../lib/flang_rt}/connection.cpp | 2 +-
.../lib/flang_rt}/connection.h | 8 +-
.../lib/flang_rt}/copy.cpp | 4 +-
.../Runtime => flang-rt/lib/flang_rt}/copy.h | 10 +--
.../lib/flang_rt}/derived-api.cpp | 4 +-
.../lib/flang_rt}/derived.cpp | 4 +-
.../lib/flang_rt}/derived.h | 8 +-
.../lib/flang_rt}/descriptor-io.cpp | 2 +-
.../lib/flang_rt}/descriptor-io.h | 10 +--
.../lib/flang_rt}/descriptor.cpp | 6 +-
.../lib/flang_rt}/dot-product.cpp | 4 +-
.../lib/flang_rt}/edit-input.cpp | 2 +-
.../lib/flang_rt}/edit-input.h | 8 +-
.../lib/flang_rt}/edit-output.cpp | 2 +-
.../lib/flang_rt}/edit-output.h | 8 +-
.../lib/flang_rt}/emit-encoded.h | 8 +-
.../lib/flang_rt}/environment-default-list.h | 0
.../lib/flang_rt}/environment.cpp | 6 +-
.../lib/flang_rt}/environment.h | 8 +-
.../lib/flang_rt}/exceptions.cpp | 2 +-
.../lib/flang_rt}/execute.cpp | 4 +-
.../lib/flang_rt}/extensions.cpp | 6 +-
.../lib/flang_rt}/external-unit.cpp | 2 +-
.../lib/flang_rt}/extrema.cpp | 2 +-
.../lib/flang_rt}/file.cpp | 4 +-
.../Runtime => flang-rt/lib/flang_rt}/file.h | 10 +--
.../lib/flang_rt}/findloc.cpp | 2 +-
.../lib/flang_rt}/format-implementation.h | 8 +-
.../lib/flang_rt}/format.cpp | 2 +-
.../lib/flang_rt}/format.h | 8 +-
.../lib/flang_rt}/inquiry.cpp | 4 +-
.../lib/flang_rt}/internal-unit.cpp | 4 +-
.../lib/flang_rt}/internal-unit.h | 10 +--
.../lib/flang_rt}/io-api-common.h | 10 +--
.../lib/flang_rt}/io-api-minimal.cpp | 4 +-
.../lib/flang_rt}/io-api.cpp | 8 +-
.../lib/flang_rt}/io-error.cpp | 2 +-
.../lib/flang_rt}/io-error.h | 12 +--
.../lib/flang_rt}/io-stmt.cpp | 4 +-
.../lib/flang_rt}/io-stmt.h | 12 +--
.../lib/flang_rt}/iostat.cpp | 4 +-
.../Runtime => flang-rt/lib/flang_rt}/lock.h | 8 +-
.../lib/flang_rt}/main.cpp | 2 +-
.../lib/flang_rt}/matmul-transpose.cpp | 4 +-
.../lib/flang_rt}/matmul.cpp | 4 +-
.../lib/flang_rt}/memory.cpp | 4 +-
.../lib/flang_rt}/misc-intrinsic.cpp | 4 +-
.../lib/flang_rt}/namelist.cpp | 4 +-
.../lib/flang_rt}/namelist.h | 8 +-
.../lib/flang_rt}/non-tbp-dio.cpp | 2 +-
.../lib/flang_rt}/non-tbp-dio.h | 8 +-
.../lib/flang_rt}/numeric-templates.h | 8 +-
.../lib/flang_rt}/numeric.cpp | 2 +-
.../lib/flang_rt}/pointer.cpp | 2 +-
.../lib/flang_rt}/product.cpp | 2 +-
.../lib/flang_rt}/pseudo-unit.cpp | 2 +-
.../lib/flang_rt}/ragged.cpp | 2 +-
.../lib/flang_rt}/random-templates.h | 10 +--
.../lib/flang_rt}/random.cpp | 4 +-
.../lib/flang_rt}/reduce.cpp | 4 +-
.../lib/flang_rt}/reduction-templates.h | 10 +--
.../lib/flang_rt}/reduction.cpp | 4 +-
.../Runtime => flang-rt/lib/flang_rt}/stack.h | 10 +--
.../lib/flang_rt}/stat.cpp | 4 +-
.../Runtime => flang-rt/lib/flang_rt}/stat.h | 8 +-
.../lib/flang_rt}/stop.cpp | 2 +-
.../Runtime => flang-rt/lib/flang_rt}/sum.cpp | 2 +-
.../lib/flang_rt}/support.cpp | 4 +-
.../lib/flang_rt}/temporary-stack.cpp | 6 +-
.../lib/flang_rt}/terminator.cpp | 2 +-
.../lib/flang_rt}/terminator.h | 8 +-
.../lib/flang_rt}/time-intrinsic.cpp | 6 +-
.../lib/flang_rt}/tools.cpp | 2 +-
.../Runtime => flang-rt/lib/flang_rt}/tools.h | 12 +--
.../lib/flang_rt}/transformational.cpp | 4 +-
.../lib/flang_rt}/type-code.cpp | 4 +-
.../lib/flang_rt}/type-info.cpp | 2 +-
.../lib/flang_rt}/type-info.h | 10 +--
.../lib/flang_rt}/unit-map.cpp | 2 +-
.../lib/flang_rt}/unit-map.h | 10 +--
.../lib/flang_rt}/unit.cpp | 6 +-
.../Runtime => flang-rt/lib/flang_rt}/unit.h | 10 +--
.../Runtime => flang-rt/lib/flang_rt}/utf.cpp | 6 +-
.../Runtime => flang-rt/lib/flang_rt}/utf.h | 8 +-
.../test/CMakeLists.txt | 32 +++----
.../test/Driver/ctofortran.f90 | 0
.../test/Driver/exec.f90 | 0
.../test/NonGtestUnit/lit.cfg.py | 6 +-
flang-rt/test/NonGtestUnit/lit.site.cfg.py.in | 14 +++
.../test/Runtime/no-cpp-dep.c | 6 +-
.../test/Unit/lit.cfg.py | 6 +-
flang-rt/test/Unit/lit.site.cfg.py.in | 15 ++++
{FortranRuntime => flang-rt}/test/lit.cfg.py | 8 +-
flang-rt/test/lit.site.cfg.py.in | 17 ++++
.../unittests/CMakeLists.txt | 26 +++---
.../unittests/Evaluate/CMakeLists.txt | 8 +-
.../Evaluate/ISO-Fortran-binding.cpp | 2 +-
.../unittests/Evaluate/reshape.cpp | 2 +-
.../unittests/Runtime/AccessTest.cpp | 0
.../unittests/Runtime/Allocatable.cpp | 0
.../unittests/Runtime/ArrayConstructor.cpp | 6 +-
.../unittests/Runtime/BufferTest.cpp | 2 +-
.../unittests/Runtime/CMakeLists.txt | 6 +-
.../unittests/Runtime/CUDA/AllocatorCUF.cpp | 14 +--
.../unittests/Runtime/CUDA/CMakeLists.txt | 4 +-
.../unittests/Runtime/CharacterTest.cpp | 2 +-
.../unittests/Runtime/CommandTest.cpp | 2 +-
.../unittests/Runtime/Complex.cpp | 0
.../unittests/Runtime/CrashHandlerFixture.cpp | 2 +-
.../unittests/Runtime/CrashHandlerFixture.h | 0
.../unittests/Runtime/Derived.cpp | 2 +-
.../unittests/Runtime/ExternalIOTest.cpp | 4 +-
.../unittests/Runtime/Format.cpp | 6 +-
.../unittests/Runtime/Inquiry.cpp | 2 +-
.../unittests/Runtime/ListInputTest.cpp | 6 +-
.../unittests/Runtime/LogicalFormatTest.cpp | 4 +-
.../unittests/Runtime/Matmul.cpp | 4 +-
.../unittests/Runtime/MatmulTranspose.cpp | 4 +-
.../unittests/Runtime/MiscIntrinsic.cpp | 2 +-
.../unittests/Runtime/Namelist.cpp | 6 +-
.../unittests/Runtime/Numeric.cpp | 0
.../unittests/Runtime/NumericalFormatTest.cpp | 4 +-
.../unittests/Runtime/Pointer.cpp | 2 +-
.../unittests/Runtime/Ragged.cpp | 0
.../unittests/Runtime/Random.cpp | 4 +-
.../unittests/Runtime/Reduction.cpp | 4 +-
.../unittests/Runtime/RuntimeCrashTest.cpp | 2 +-
.../unittests/Runtime/Stop.cpp | 2 +-
.../unittests/Runtime/Support.cpp | 2 +-
.../unittests/Runtime/TemporaryStack.cpp | 4 +-
.../unittests/Runtime/Time.cpp | 0
.../unittests/Runtime/Transformational.cpp | 2 +-
.../unittests/Runtime/tools.h | 4 +-
flang/CMakeLists.txt | 7 +-
.../cmake/modules/FlangCommon.cmake | 86 +++++++++----------
flang/docs/FlangDriver.md | 8 +-
flang/docs/GettingStarted.md | 34 ++++----
flang/docs/OpenACC-descriptor-management.md | 2 +-
flang/docs/ReleaseNotes.md | 13 +--
.../ExternalHelloWorld/CMakeLists.txt | 2 +-
flang/include/flang/Common/README.md | 6 +-
flang/include/flang/ISO_Fortran_binding.h | 16 +++-
flang/include/flang/Runtime/README.md | 4 +-
flang/include/flang/Testing/README.md | 6 +-
flang/lib/Common/README.md | 6 +-
flang/lib/Optimizer/Builder/IntrinsicCall.cpp | 2 +-
.../Optimizer/Transforms/CufOpConversion.cpp | 2 +-
flang/lib/Testing/CMakeLists.txt | 20 -----
flang/lib/Testing/README.md | 6 +-
.../module}/iso_fortran_env_impl.f90 | 4 +-
.../test/Driver/gcc-toolchain-install-dir.f90 | 2 +-
flang/test/Driver/linker-flags.f90 | 8 +-
.../test/Driver/msvc-dependent-lib-flags.f90 | 8 +-
flang/tools/f18/CMakeLists.txt | 24 ++----
flang/unittests/Common/CMakeLists.txt | 4 +-
flang/unittests/Decimal/CMakeLists.txt | 8 +-
lld/COFF/MinGW.cpp | 10 +--
llvm/CMakeLists.txt | 2 +-
llvm/projects/CMakeLists.txt | 4 +-
llvm/runtimes/CMakeLists.txt | 6 +-
runtimes/CMakeLists.txt | 4 +-
255 files changed, 815 insertions(+), 838 deletions(-)
delete mode 100644 FortranRuntime/test/NonGtestUnit/lit.site.cfg.py.in
delete mode 100644 FortranRuntime/test/Unit/lit.site.cfg.py.in
delete mode 100644 FortranRuntime/test/lit.site.cfg.py.in
rename {FortranRuntime => flang-rt}/.clang-format (100%)
rename {FortranRuntime => flang-rt}/.clang-tidy (100%)
rename {FortranRuntime => flang-rt}/CMakeLists.txt (54%)
rename {FortranRuntime => flang-rt}/CODE_OWNERS.TXT (100%)
rename {FortranRuntime => flang-rt}/LICENSE.TXT (100%)
rename {FortranRuntime => flang-rt}/README.md (76%)
rename {FortranRuntime => flang-rt}/cmake/config.h.cmake.in (100%)
rename FortranRuntime/cmake/modules/AddFortranRuntime.cmake => flang-rt/cmake/modules/AddFlangRT.cmake (72%)
rename FortranRuntime/cmake/modules/AddFortranOffloadRuntime.cmake => flang-rt/cmake/modules/AddFlangRTOffload.cmake (82%)
rename {flang/include/flang/Runtime/CUDA => flang-rt/include/flang-rt/CufRuntime}/allocator.h (85%)
rename {FortranRuntime/include/FortranRuntime/Runtime => flang-rt/include/flang-rt/flang_rt}/allocator-registry.h (87%)
rename {FortranRuntime/include/FortranRuntime/Runtime => flang-rt/include/flang-rt/flang_rt}/array-constructor.h (85%)
rename {FortranRuntime/include/FortranRuntime/Runtime => flang-rt/include/flang-rt/flang_rt}/descriptor.h (98%)
rename {FortranRuntime/include/FortranRuntime/Runtime => flang-rt/include/flang-rt/flang_rt}/io-api-funcs.h (84%)
rename {FortranRuntime/include/FortranRuntime/Runtime => flang-rt/include/flang-rt/flang_rt}/iostat-funcs.h (75%)
rename {FortranRuntime/include/FortranRuntime/Runtime => flang-rt/include/flang-rt/flang_rt}/memory.h (96%)
rename {FortranRuntime/include/FortranRuntime/Runtime => flang-rt/include/flang-rt/flang_rt}/type-code.h (93%)
rename {FortranRuntime => flang-rt}/lib/CMakeLists.txt (71%)
rename {FortranRuntime/lib/Runtime/CUDA => flang-rt/lib/CufRuntime}/CMakeLists.txt (87%)
rename {FortranRuntime/lib/Runtime/CUDA => flang-rt/lib/CufRuntime}/allocator.cpp (81%)
rename {FortranRuntime/lib/Runtime/CUDA => flang-rt/lib/CufRuntime}/descriptor.cpp (82%)
rename {FortranRuntime/lib/Runtime/Float128Math => flang-rt/lib/FortranFloat128Math}/CMakeLists.txt (90%)
rename {FortranRuntime/lib/Runtime/Float128Math => flang-rt/lib/FortranFloat128Math}/acos.cpp (90%)
rename {FortranRuntime/lib/Runtime/Float128Math => flang-rt/lib/FortranFloat128Math}/acosh.cpp (90%)
rename {FortranRuntime/lib/Runtime/Float128Math => flang-rt/lib/FortranFloat128Math}/asin.cpp (90%)
rename {FortranRuntime/lib/Runtime/Float128Math => flang-rt/lib/FortranFloat128Math}/asinh.cpp (90%)
rename {FortranRuntime/lib/Runtime/Float128Math => flang-rt/lib/FortranFloat128Math}/atan.cpp (90%)
rename {FortranRuntime/lib/Runtime/Float128Math => flang-rt/lib/FortranFloat128Math}/atan2.cpp (91%)
rename {FortranRuntime/lib/Runtime/Float128Math => flang-rt/lib/FortranFloat128Math}/atanh.cpp (90%)
rename {FortranRuntime/lib/Runtime/Float128Math => flang-rt/lib/FortranFloat128Math}/ceil.cpp (90%)
rename {FortranRuntime/lib/Runtime/Float128Math => flang-rt/lib/FortranFloat128Math}/complex-math.c (96%)
rename {FortranRuntime/lib/Runtime/Float128Math => flang-rt/lib/FortranFloat128Math}/complex-math.h (88%)
rename {FortranRuntime/lib/Runtime/Float128Math => flang-rt/lib/FortranFloat128Math}/cos.cpp (90%)
rename {FortranRuntime/lib/Runtime/Float128Math => flang-rt/lib/FortranFloat128Math}/cosh.cpp (90%)
rename {FortranRuntime/lib/Runtime/Float128Math => flang-rt/lib/FortranFloat128Math}/erf.cpp (90%)
rename {FortranRuntime/lib/Runtime/Float128Math => flang-rt/lib/FortranFloat128Math}/erfc.cpp (90%)
rename {FortranRuntime/lib/Runtime/Float128Math => flang-rt/lib/FortranFloat128Math}/exp.cpp (90%)
rename {FortranRuntime/lib/Runtime/Float128Math => flang-rt/lib/FortranFloat128Math}/exponent.cpp (92%)
rename {FortranRuntime/lib/Runtime/Float128Math => flang-rt/lib/FortranFloat128Math}/floor.cpp (90%)
rename {FortranRuntime/lib/Runtime/Float128Math => flang-rt/lib/FortranFloat128Math}/fma.cpp (91%)
rename {FortranRuntime/lib/Runtime/Float128Math => flang-rt/lib/FortranFloat128Math}/fraction.cpp (90%)
rename {FortranRuntime/lib/Runtime/Float128Math => flang-rt/lib/FortranFloat128Math}/hypot.cpp (91%)
rename {FortranRuntime/lib/Runtime/Float128Math => flang-rt/lib/FortranFloat128Math}/j0.cpp (90%)
rename {FortranRuntime/lib/Runtime/Float128Math => flang-rt/lib/FortranFloat128Math}/j1.cpp (90%)
rename {FortranRuntime/lib/Runtime/Float128Math => flang-rt/lib/FortranFloat128Math}/jn.cpp (90%)
rename {FortranRuntime/lib/Runtime/Float128Math => flang-rt/lib/FortranFloat128Math}/lgamma.cpp (90%)
rename {FortranRuntime/lib/Runtime/Float128Math => flang-rt/lib/FortranFloat128Math}/llround.cpp (90%)
rename {FortranRuntime/lib/Runtime/Float128Math => flang-rt/lib/FortranFloat128Math}/log.cpp (90%)
rename {FortranRuntime/lib/Runtime/Float128Math => flang-rt/lib/FortranFloat128Math}/log10.cpp (90%)
rename {FortranRuntime/lib/Runtime/Float128Math => flang-rt/lib/FortranFloat128Math}/lround.cpp (90%)
rename {FortranRuntime/lib/Runtime/Float128Math => flang-rt/lib/FortranFloat128Math}/math-entries.h (97%)
rename {FortranRuntime/lib/Runtime/Float128Math => flang-rt/lib/FortranFloat128Math}/mod-real.cpp (91%)
rename {FortranRuntime/lib/Runtime/Float128Math => flang-rt/lib/FortranFloat128Math}/modulo-real.cpp (91%)
rename {FortranRuntime/lib/Runtime/Float128Math => flang-rt/lib/FortranFloat128Math}/nearest.cpp (91%)
rename {FortranRuntime/lib/Runtime/Float128Math => flang-rt/lib/FortranFloat128Math}/norm2.cpp (94%)
rename {FortranRuntime/lib/Runtime/Float128Math => flang-rt/lib/FortranFloat128Math}/numeric-template-specs.h (84%)
rename {FortranRuntime/lib/Runtime/Float128Math => flang-rt/lib/FortranFloat128Math}/pow.cpp (90%)
rename {FortranRuntime/lib/Runtime/Float128Math => flang-rt/lib/FortranFloat128Math}/random.cpp (91%)
rename {FortranRuntime/lib/Runtime/Float128Math => flang-rt/lib/FortranFloat128Math}/round.cpp (92%)
rename {FortranRuntime/lib/Runtime/Float128Math => flang-rt/lib/FortranFloat128Math}/rrspacing.cpp (90%)
rename {FortranRuntime/lib/Runtime/Float128Math => flang-rt/lib/FortranFloat128Math}/scale.cpp (92%)
rename {FortranRuntime/lib/Runtime/Float128Math => flang-rt/lib/FortranFloat128Math}/set-exponent.cpp (90%)
rename {FortranRuntime/lib/Runtime/Float128Math => flang-rt/lib/FortranFloat128Math}/sin.cpp (90%)
rename {FortranRuntime/lib/Runtime/Float128Math => flang-rt/lib/FortranFloat128Math}/sinh.cpp (90%)
rename {FortranRuntime/lib/Runtime/Float128Math => flang-rt/lib/FortranFloat128Math}/spacing.cpp (90%)
rename {FortranRuntime/lib/Runtime/Float128Math => flang-rt/lib/FortranFloat128Math}/sqrt.cpp (90%)
rename {FortranRuntime/lib/Runtime/Float128Math => flang-rt/lib/FortranFloat128Math}/tan.cpp (90%)
rename {FortranRuntime/lib/Runtime/Float128Math => flang-rt/lib/FortranFloat128Math}/tanh.cpp (90%)
rename {FortranRuntime/lib/Runtime/Float128Math => flang-rt/lib/FortranFloat128Math}/tgamma.cpp (90%)
rename {FortranRuntime/lib/Runtime/Float128Math => flang-rt/lib/FortranFloat128Math}/trunc.cpp (91%)
rename {FortranRuntime/lib/Runtime/Float128Math => flang-rt/lib/FortranFloat128Math}/y0.cpp (90%)
rename {FortranRuntime/lib/Runtime/Float128Math => flang-rt/lib/FortranFloat128Math}/y1.cpp (90%)
rename {FortranRuntime/lib/Runtime/Float128Math => flang-rt/lib/FortranFloat128Math}/yn.cpp (90%)
rename {FortranRuntime => flang-rt}/lib/Testing/CMakeLists.txt (89%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/CMakeLists.txt (66%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/ISO_Fortran_binding.cpp (98%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/ISO_Fortran_util.h (91%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/allocatable.cpp (98%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/allocator-registry.cpp (85%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/array-constructor.cpp (98%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/assign-impl.h (100%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/assign.cpp (99%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/buffer.cpp (93%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/buffer.h (97%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/character.cpp (99%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/command.cpp (98%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/complex-powi.cpp (98%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/complex-reduction.c (98%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/complex-reduction.h (97%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/connection.cpp (97%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/connection.h (96%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/copy.cpp (98%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/copy.h (78%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/derived-api.cpp (98%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/derived.cpp (99%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/derived.h (88%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/descriptor-io.cpp (99%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/descriptor-io.h (98%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/descriptor.cpp (98%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/dot-product.cpp (98%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/edit-input.cpp (99%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/edit-input.h (90%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/edit-output.cpp (99%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/edit-output.h (96%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/emit-encoded.h (94%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/environment-default-list.h (100%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/environment.cpp (96%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/environment.h (91%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/exceptions.cpp (97%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/execute.cpp (98%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/extensions.cpp (97%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/external-unit.cpp (99%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/extrema.cpp (99%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/file.cpp (99%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/file.h (94%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/findloc.cpp (99%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/format-implementation.h (98%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/format.cpp (93%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/format.h (97%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/inquiry.cpp (96%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/internal-unit.cpp (98%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/internal-unit.h (89%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/io-api-common.h (92%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/io-api-minimal.cpp (97%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/io-api.cpp (99%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/io-error.cpp (98%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/io-error.h (90%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/io-stmt.cpp (99%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/io-stmt.h (99%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/iostat.cpp (97%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/lock.h (94%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/main.cpp (95%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/matmul-transpose.cpp (99%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/matmul.cpp (99%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/memory.cpp (92%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/misc-intrinsic.cpp (97%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/namelist.cpp (99%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/namelist.h (91%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/non-tbp-dio.cpp (93%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/non-tbp-dio.h (91%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/numeric-templates.h (98%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/numeric.cpp (99%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/pointer.cpp (99%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/product.cpp (99%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/pseudo-unit.cpp (98%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/ragged.cpp (97%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/random-templates.h (91%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/random.cpp (98%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/reduce.cpp (99%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/reduction-templates.h (98%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/reduction.cpp (99%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/stack.h (94%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/stat.cpp (96%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/stat.h (93%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/stop.cpp (98%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/sum.cpp (99%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/support.cpp (93%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/temporary-stack.cpp (97%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/terminator.cpp (97%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/terminator.h (95%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/time-intrinsic.cpp (98%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/tools.cpp (99%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/tools.h (98%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/transformational.cpp (99%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/type-code.cpp (98%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/type-info.cpp (99%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/type-info.h (98%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/unit-map.cpp (98%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/unit-map.h (93%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/unit.cpp (99%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/unit.h (98%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/utf.cpp (96%)
rename {FortranRuntime/lib/Runtime => flang-rt/lib/flang_rt}/utf.h (94%)
rename {FortranRuntime => flang-rt}/test/CMakeLists.txt (57%)
rename {FortranRuntime => flang-rt}/test/Driver/ctofortran.f90 (100%)
rename {FortranRuntime => flang-rt}/test/Driver/exec.f90 (100%)
rename {FortranRuntime => flang-rt}/test/NonGtestUnit/lit.cfg.py (75%)
create mode 100644 flang-rt/test/NonGtestUnit/lit.site.cfg.py.in
rename {FortranRuntime => flang-rt}/test/Runtime/no-cpp-dep.c (87%)
rename {FortranRuntime => flang-rt}/test/Unit/lit.cfg.py (73%)
create mode 100644 flang-rt/test/Unit/lit.site.cfg.py.in
rename {FortranRuntime => flang-rt}/test/lit.cfg.py (89%)
create mode 100644 flang-rt/test/lit.site.cfg.py.in
rename {FortranRuntime => flang-rt}/unittests/CMakeLists.txt (72%)
rename {FortranRuntime => flang-rt}/unittests/Evaluate/CMakeLists.txt (73%)
rename {FortranRuntime => flang-rt}/unittests/Evaluate/ISO-Fortran-binding.cpp (99%)
rename {FortranRuntime => flang-rt}/unittests/Evaluate/reshape.cpp (98%)
rename {FortranRuntime => flang-rt}/unittests/Runtime/AccessTest.cpp (100%)
rename {FortranRuntime => flang-rt}/unittests/Runtime/Allocatable.cpp (100%)
rename {FortranRuntime => flang-rt}/unittests/Runtime/ArrayConstructor.cpp (97%)
rename {FortranRuntime => flang-rt}/unittests/Runtime/BufferTest.cpp (99%)
rename {FortranRuntime => flang-rt}/unittests/Runtime/CMakeLists.txt (90%)
rename {FortranRuntime => flang-rt}/unittests/Runtime/CUDA/AllocatorCUF.cpp (90%)
rename {FortranRuntime => flang-rt}/unittests/Runtime/CUDA/CMakeLists.txt (89%)
rename {FortranRuntime => flang-rt}/unittests/Runtime/CharacterTest.cpp (99%)
rename {FortranRuntime => flang-rt}/unittests/Runtime/CommandTest.cpp (99%)
rename {FortranRuntime => flang-rt}/unittests/Runtime/Complex.cpp (100%)
rename {FortranRuntime => flang-rt}/unittests/Runtime/CrashHandlerFixture.cpp (96%)
rename {FortranRuntime => flang-rt}/unittests/Runtime/CrashHandlerFixture.h (100%)
rename {FortranRuntime => flang-rt}/unittests/Runtime/Derived.cpp (98%)
rename {FortranRuntime => flang-rt}/unittests/Runtime/ExternalIOTest.cpp (99%)
rename {FortranRuntime => flang-rt}/unittests/Runtime/Format.cpp (97%)
rename {FortranRuntime => flang-rt}/unittests/Runtime/Inquiry.cpp (99%)
rename {FortranRuntime => flang-rt}/unittests/Runtime/ListInputTest.cpp (98%)
rename {FortranRuntime => flang-rt}/unittests/Runtime/LogicalFormatTest.cpp (95%)
rename {FortranRuntime => flang-rt}/unittests/Runtime/Matmul.cpp (98%)
rename {FortranRuntime => flang-rt}/unittests/Runtime/MatmulTranspose.cpp (99%)
rename {FortranRuntime => flang-rt}/unittests/Runtime/MiscIntrinsic.cpp (98%)
rename {FortranRuntime => flang-rt}/unittests/Runtime/Namelist.cpp (99%)
rename {FortranRuntime => flang-rt}/unittests/Runtime/Numeric.cpp (100%)
rename {FortranRuntime => flang-rt}/unittests/Runtime/NumericalFormatTest.cpp (99%)
rename {FortranRuntime => flang-rt}/unittests/Runtime/Pointer.cpp (98%)
rename {FortranRuntime => flang-rt}/unittests/Runtime/Ragged.cpp (100%)
rename {FortranRuntime => flang-rt}/unittests/Runtime/Random.cpp (95%)
rename {FortranRuntime => flang-rt}/unittests/Runtime/Reduction.cpp (99%)
rename {FortranRuntime => flang-rt}/unittests/Runtime/RuntimeCrashTest.cpp (99%)
rename {FortranRuntime => flang-rt}/unittests/Runtime/Stop.cpp (98%)
rename {FortranRuntime => flang-rt}/unittests/Runtime/Support.cpp (98%)
rename {FortranRuntime => flang-rt}/unittests/Runtime/TemporaryStack.cpp (99%)
rename {FortranRuntime => flang-rt}/unittests/Runtime/Time.cpp (100%)
rename {FortranRuntime => flang-rt}/unittests/Runtime/Transformational.cpp (99%)
rename {FortranRuntime => flang-rt}/unittests/Runtime/tools.h (95%)
rename {FortranRuntime => flang}/cmake/modules/FlangCommon.cmake (93%)
delete mode 100644 flang/lib/Testing/CMakeLists.txt
rename {FortranRuntime/lib/Runtime => flang/module}/iso_fortran_env_impl.f90 (97%)
diff --git a/FortranRuntime/test/NonGtestUnit/lit.site.cfg.py.in b/FortranRuntime/test/NonGtestUnit/lit.site.cfg.py.in
deleted file mode 100644
index 3d1780a5d600a9..00000000000000
--- a/FortranRuntime/test/NonGtestUnit/lit.site.cfg.py.in
+++ /dev/null
@@ -1,13 +0,0 @@
- at LIT_SITE_CFG_IN_HEADER@
-
-import os
-
-config.llvm_tools_dir = "@LLVM_TOOLS_DIR@"
-config.fortranruntime_binary_dir = "@FORTRANRUNTIME_BINARY_DIR@"
-config.fortranruntime_binary_test_dir = os.path.dirname(__file__)
-
-import lit.llvm
-lit.llvm.initialize(lit_config, config)
-
-# Let the main config do the real work.
-lit_config.load_config(config, "@FORTRANRUNTIME_SOURCE_DIR@/test/NonGtestUnit/lit.cfg.py")
diff --git a/FortranRuntime/test/Unit/lit.site.cfg.py.in b/FortranRuntime/test/Unit/lit.site.cfg.py.in
deleted file mode 100644
index fa993aa897faca..00000000000000
--- a/FortranRuntime/test/Unit/lit.site.cfg.py.in
+++ /dev/null
@@ -1,14 +0,0 @@
- at LIT_SITE_CFG_IN_HEADER@
-
-import os
-
-config.llvm_tools_dir = "@LLVM_TOOLS_DIR@"
-config.llvm_build_mode = "@LLVM_BUILD_MODE@"
-config.fortranruntime_binary_dir = "@FORTRANRUNTIME_BINARY_DIR@"
-config.fortranruntime_binary_test_dir = os.path.dirname(__file__)
-
-import lit.llvm
-lit.llvm.initialize(lit_config, config)
-
-# Let the main config do the real work.
-lit_config.load_config(config, "@FORTRANRUNTIME_SOURCE_DIR@/test/Unit/lit.cfg.py")
diff --git a/FortranRuntime/test/lit.site.cfg.py.in b/FortranRuntime/test/lit.site.cfg.py.in
deleted file mode 100644
index a21fc128086eae..00000000000000
--- a/FortranRuntime/test/lit.site.cfg.py.in
+++ /dev/null
@@ -1,18 +0,0 @@
- at LIT_SITE_CFG_IN_HEADER@
-
-import sys
-
-config.llvm_tools_dir = "@LLVM_TOOLS_DIR@"
-config.build_lib_dir = "@FORTRANRUNTIME_BUILD_LIB_DIR@"
-config.flang_source_dir = "@FLANG_SOURCE_DIR@"
-config.fortranruntime_source_dir = "@FORTRANRUNTIME_SOURCE_DIR@"
-config.fortranruntime_binary_test_dir = os.path.dirname(__file__)
-config.fortranruntime_build_lib_dir = "@FORTRANRUNTIME_BUILD_LIB_DIR@"
-config.cc = "@CMAKE_C_COMPILER@"
-config.osx_sysroot = path(r"@CMAKE_OSX_SYSROOT@")
-
-import lit.llvm
-lit.llvm.initialize(lit_config, config)
-
-# Let the main config do the real work.
-lit_config.load_config(config, "@FORTRANRUNTIME_SOURCE_DIR@/test/lit.cfg.py")
diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp b/clang/lib/Driver/ToolChains/CommonArgs.cpp
index 5e4057116a97cb..ed2539cb4e3c5e 100644
--- a/clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -1291,7 +1291,7 @@ void tools::addOpenMPHostOffloadingArgs(const Compilation &C,
/// Add Fortran runtime libs
void tools::addFortranRuntimeLibs(const ToolChain &TC, const ArgList &Args,
llvm::opt::ArgStringList &CmdArgs) {
- // Link FortranRuntime
+ // Link flang_rt
// These are handled earlier on Windows by telling the frontend driver to
// add the correct libraries to link against as dependents in the object
// file.
@@ -1307,7 +1307,7 @@ void tools::addFortranRuntimeLibs(const ToolChain &TC, const ArgList &Args,
if (AsNeeded)
addAsNeededOption(TC, Args, CmdArgs, /*as_needed=*/false);
}
- CmdArgs.push_back("-lFortranRuntime");
+ CmdArgs.push_back("-lflang_rt");
}
}
diff --git a/clang/lib/Driver/ToolChains/Flang.cpp b/clang/lib/Driver/ToolChains/Flang.cpp
index aff656d74daa2f..072d57e8a7ff46 100644
--- a/clang/lib/Driver/ToolChains/Flang.cpp
+++ b/clang/lib/Driver/ToolChains/Flang.cpp
@@ -304,26 +304,26 @@ static void processVSRuntimeLibrary(const ToolChain &TC, const ArgList &Args,
case options::OPT__SLASH_MT:
CmdArgs.push_back("-D_MT");
CmdArgs.push_back("--dependent-lib=libcmt");
- CmdArgs.push_back("--dependent-lib=FortranRuntime.static.lib");
+ CmdArgs.push_back("--dependent-lib=flang_rt.static.lib");
break;
case options::OPT__SLASH_MTd:
CmdArgs.push_back("-D_MT");
CmdArgs.push_back("-D_DEBUG");
CmdArgs.push_back("--dependent-lib=libcmtd");
- CmdArgs.push_back("--dependent-lib=FortranRuntime.static_dbg.lib");
+ CmdArgs.push_back("--dependent-lib=flang_rt.static_dbg.lib");
break;
case options::OPT__SLASH_MD:
CmdArgs.push_back("-D_MT");
CmdArgs.push_back("-D_DLL");
CmdArgs.push_back("--dependent-lib=msvcrt");
- CmdArgs.push_back("--dependent-lib=FortranRuntime.dynamic.lib");
+ CmdArgs.push_back("--dependent-lib=flang_rt.dynamic.lib");
break;
case options::OPT__SLASH_MDd:
CmdArgs.push_back("-D_MT");
CmdArgs.push_back("-D_DEBUG");
CmdArgs.push_back("-D_DLL");
CmdArgs.push_back("--dependent-lib=msvcrtd");
- CmdArgs.push_back("--dependent-lib=FortranRuntime.dynamic_dbg.lib");
+ CmdArgs.push_back("--dependent-lib=flang_rt.dynamic_dbg.lib");
break;
}
}
diff --git a/FortranRuntime/.clang-format b/flang-rt/.clang-format
similarity index 100%
rename from FortranRuntime/.clang-format
rename to flang-rt/.clang-format
diff --git a/FortranRuntime/.clang-tidy b/flang-rt/.clang-tidy
similarity index 100%
rename from FortranRuntime/.clang-tidy
rename to flang-rt/.clang-tidy
diff --git a/FortranRuntime/CMakeLists.txt b/flang-rt/CMakeLists.txt
similarity index 54%
rename from FortranRuntime/CMakeLists.txt
rename to flang-rt/CMakeLists.txt
index e65cab7060cb02..bd83a51482f4af 100644
--- a/FortranRuntime/CMakeLists.txt
+++ b/flang-rt/CMakeLists.txt
@@ -6,23 +6,23 @@
#
#===------------------------------------------------------------------------===#
#
-# Build instructions for the FortranRuntime library and Fortran modules required
-# by programs compiled by Flang. This is file is intended to be included using
-# the LLVM_ENABLE_RUNTIMES mechanism.
+# Build instructions for the flang-rt library. This is file is intended to be
+# included using the LLVM_ENABLE_RUNTIMES mechanism.
#
#===------------------------------------------------------------------------===#
set(LLVM_SUBPROJECT_TITLE "Fortran Runtime")
-set(FORTRANRUNTIME_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
-set(FORTRANRUNTIME_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}")
+set(FLANGRT_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
+set(FLANGRT_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}")
set(FLANG_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../flang")
enable_language(Fortran)
list(APPEND CMAKE_MODULE_PATH
- "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules"
+ "${FLANGRT_SOURCE_DIR}/cmake/modules"
+ "${FLANG_SOURCE_DIR}/cmake/modules"
)
-include(AddFortranRuntime)
+include(AddFlangRT)
include(FlangCommon)
@@ -30,7 +30,7 @@ include(FlangCommon)
# Build Mode Introspection #
############################
-# Setting these variables from an LLVM build is sufficient that FortranRuntime can
+# Setting these variables from an LLVM build is sufficient that flang-rt can
# construct the output paths, so it can behave as if it were in-tree here.
set(LLVM_TREE_AVAILABLE OFF)
if (LLVM_LIBRARY_OUTPUT_INTDIR AND LLVM_RUNTIME_OUTPUT_INTDIR AND PACKAGE_VERSION)
@@ -42,19 +42,19 @@ if (LLVM_TREE_AVAILABLE)
# Despite Clang in the name, get_clang_resource_dir does not depend on Clang being added to the build
# flang-new uses the same resource dir as clang.
include(GetClangResourceDir)
- get_clang_resource_dir(FORTRANRUNTIME_BUILD_LIB_DIR PREFIX "${LLVM_LIBRARY_OUTPUT_INTDIR}/.." SUBDIR "lib${LLVM_LIBDIR_SUFFIX}")
- get_clang_resource_dir(FORTRANRUNTIME_INSTALL_LIB_DIR SUBDIR "lib${LLVM_LIBDIR_SUFFIX}") # No prefix, CMake's install command find the install prefix itself
+ get_clang_resource_dir(FLANGRT_BUILD_LIB_DIR PREFIX "${LLVM_LIBRARY_OUTPUT_INTDIR}/.." SUBDIR "lib${LLVM_LIBDIR_SUFFIX}")
+ get_clang_resource_dir(FLANGRT_INSTALL_LIB_DIR SUBDIR "lib${LLVM_LIBDIR_SUFFIX}") # No prefix, CMake's install command find the install prefix itself
else ()
- set(FORTRANRUNTIME_BUILD_LIB_DIR "${LLVM_LIBRARY_OUTPUT_INTDIR}")
- set(FORTRANRUNTIME_INSTALL_LIB_DIR "lib${LLVM_LIBDIR_SUFFIX}")
+ set(FLANGRT_BUILD_LIB_DIR "${LLVM_LIBRARY_OUTPUT_INTDIR}")
+ set(FLANGRT_INSTALL_LIB_DIR "lib${LLVM_LIBDIR_SUFFIX}")
endif ()
if (DEFINED WIN32)
- set(FORTRANRUNTIME_BUILD_LIB_DIR "${FORTRANRUNTIME_BUILD_LIB_DIR}/windows")
- set(FORTRANRUNTIME_INSTALL_LIB_DIR "${FORTRANRUNTIME_INSTALL_LIB_DIR}/windows")
+ set(FLANGRT_BUILD_LIB_DIR "${FLANGRT_BUILD_LIB_DIR}/windows")
+ set(FLANGRT_INSTALL_LIB_DIR "${FLANGRT_INSTALL_LIB_DIR}/windows")
elseif (LLVM_ENABLE_PER_TARGET_RUNTIME_DIR)
- set(FORTRANRUNTIME_BUILD_LIB_DIR "${FORTRANRUNTIME_BUILD_LIB_DIR}/${LLVM_TARGET_TRIPLE}")
- set(FORTRANRUNTIME_INSTALL_LIB_DIR "${FORTRANRUNTIME_INSTALL_LIB_DIR}/${LLVM_TARGET_TRIPLE}")
+ set(FLANGRT_BUILD_LIB_DIR "${FLANGRT_BUILD_LIB_DIR}/${LLVM_TARGET_TRIPLE}")
+ set(FLANGRT_INSTALL_LIB_DIR "${FLANGRT_INSTALL_LIB_DIR}/${LLVM_TARGET_TRIPLE}")
endif ()
@@ -62,26 +62,30 @@ endif ()
# Build Options #
#################
-option(FORTRANRUNTIME_INCLUDE_TESTS "Generate build targets for the FortranRuntime unit and regression-tests." "${LLVM_INCLUDE_TESTS}")
-
-set(FORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT "" CACHE STRING "Compile FortranRuntime with GPU support (CUDA or OpenMP)")
-set_property(CACHE FORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT PROPERTY STRINGS
- ""
- CUDA
- OpenMP)
-if (NOT FORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT)
-elseif (FORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT STREQUAL "CUDA")
- set(FORTRANRUNTIME_LIBCUDACXX_PATH "" CACHE PATH "Path to libcu++ package installation")
- option(FORTRANRUNTIME_CUDA_RUNTIME_PTX_WITHOUT_GLOBAL_VARS "Do not compile global variables' definitions when producing PTX library" OFF)
-elseif (FORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT STREQUAL "OpenMP")
-set(FORTRANRUNTIME_DEVICE_ARCHITECTURES "all" CACHE STRING
+# Important: flang-rt user options must be prefixed with "FLANG_RT_". Variables
+# with this prefix will be forwarded in bootstrap builds.
+
+option(FLANG_RT_INCLUDE_TESTS "Generate build targets for the flang-rt unit and regression-tests." "${LLVM_INCLUDE_TESTS}")
+
+set(FLANG_RT_EXPERIMENTAL_OFFLOAD_SUPPORT "" CACHE STRING "Compile flang-rt with GPU support (CUDA or OpenMP)")
+set_property(CACHE FLANG_RT_EXPERIMENTAL_OFFLOAD_SUPPORT PROPERTY STRINGS
+ ""
+ CUDA
+ OpenMP
+ )
+if (NOT FLANG_RT_EXPERIMENTAL_OFFLOAD_SUPPORT)
+elseif (FLANG_RT_EXPERIMENTAL_OFFLOAD_SUPPORT STREQUAL "CUDA")
+ set(FLANG_RT_LIBCUDACXX_PATH "" CACHE PATH "Path to libcu++ package installation")
+ option(FLANG_RT_CUDA_RUNTIME_PTX_WITHOUT_GLOBAL_VARS "Do not compile global variables' definitions when producing PTX library" OFF)
+elseif (FLANG_RT_EXPERIMENTAL_OFFLOAD_SUPPORT STREQUAL "OpenMP")
+set(FLANG_RT_DEVICE_ARCHITECTURES "all" CACHE STRING
"List of OpenMP device architectures to be used to compile the Fortran runtime (e.g. 'gfx1103;sm_90')")
else ()
- message(FATAL_ERROR "Invalid value '${FORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT}' for FORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT; must be empty, 'CUDA', or 'OpenMP'")
+ message(FATAL_ERROR "Invalid value '${FLANG_RT_EXPERIMENTAL_OFFLOAD_SUPPORT}' for FLANG_RT_EXPERIMENTAL_OFFLOAD_SUPPORT; must be empty, 'CUDA', or 'OpenMP'")
endif ()
-option(FORTRANRUNTIME_ENABLE_CUF "Compile CUDA Fortran runtime sources" OFF)
-if (FORTRANRUNTIME_ENABLE_CUF)
+option(FLANG_RT_ENABLE_CUF "Compile CUDA Fortran runtime sources" OFF)
+if (FLANG_RT_ENABLE_CUF)
find_package(CUDAToolkit REQUIRED)
endif()
@@ -113,9 +117,9 @@ if (WIN32)
ERROR_QUIET
)
if (NOT CXX_COMPILER_PRINT_LIBGCC_PATH_FAILURE AND CXX_COMPILER_PRINT_LIBGCC_PATH_RESULT)
- string(STRIP "${CXX_COMPILER_PRINT_LIBGCC_PATH_RESULT}" FORTRANRUNTIME_LIBCALL)
+ string(STRIP "${CXX_COMPILER_PRINT_LIBGCC_PATH_RESULT}" FLANGRT_LIBCALL)
else ()
- set(FORTRANRUNTIME_LIBCALL "")
+ set(FLANGRT_LIBCALL "")
endif ()
endif ()
@@ -124,9 +128,9 @@ endif ()
# Build Preparation #
#####################
-if (FORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT AND FORTRANRUNTIME_INCLUDE_TESTS)
+if (FLANG_RT_EXPERIMENTAL_OFFLOAD_SUPPORT AND FLANG_RT_INCLUDE_TESTS)
# If Fortran runtime is built as CUDA library, the linking
- # of targets that link FortranRuntime must be done
+ # of targets that link flang-rt must be done
# with CUDA_RESOLVE_DEVICE_SYMBOLS.
# CUDA language must be enabled for CUDA_RESOLVE_DEVICE_SYMBOLS
# to take effect.
@@ -134,7 +138,7 @@ if (FORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT AND FORTRANRUNTIME_INCLUDE_TESTS
endif()
-# C++17 required for FortranRuntime, user or other runtimes may override this.
+# C++17 is required for flang-rt; user or other runtimes may override this.
# GTest included later also requires C++17.
set(CMAKE_CXX_STANDARD 17 CACHE STRING "C++ standard to conform to")
set(CMAKE_CXX_STANDARD_REQUIRED YES)
@@ -153,9 +157,9 @@ configure_file(cmake/config.h.cmake.in config.h)
add_subdirectory(lib)
-if (FORTRANRUNTIME_INCLUDE_TESTS)
+if (FLANG_RT_INCLUDE_TESTS)
add_subdirectory(unittests)
add_subdirectory(test)
else ()
- add_custom_target(check-FortranRuntime)
+ add_custom_target(check-flang-rt)
endif()
diff --git a/FortranRuntime/CODE_OWNERS.TXT b/flang-rt/CODE_OWNERS.TXT
similarity index 100%
rename from FortranRuntime/CODE_OWNERS.TXT
rename to flang-rt/CODE_OWNERS.TXT
diff --git a/FortranRuntime/LICENSE.TXT b/flang-rt/LICENSE.TXT
similarity index 100%
rename from FortranRuntime/LICENSE.TXT
rename to flang-rt/LICENSE.TXT
diff --git a/FortranRuntime/README.md b/flang-rt/README.md
similarity index 76%
rename from FortranRuntime/README.md
rename to flang-rt/README.md
index cb578507f8c96e..01836f9d8f714d 100644
--- a/FortranRuntime/README.md
+++ b/flang-rt/README.md
@@ -6,15 +6,15 @@
-->
-# Fortran Runtime
+# Fortran Runtime (flang-rt)
-Fortran Runtime is the runtime library for code emitted by the Flang compiler
+Flang-rt is the runtime library for code emitted by the Flang compiler
(https://flang.llvm.org).
## Getting Started
-There are two build modes for the FortranRuntime. The bootstrap build, also
+There are two build modes for the flang-rt. The bootstrap build, also
called the in-tree build, and the runtime-only build, also called the
out-of-tree build.
Not to be confused with the terms
@@ -29,29 +29,29 @@ source directory. LLVM does not support in-source builds.
Requirements:
* [Same as LLVM](https://llvm.org/docs/GettingStarted.html#requirements).
- * While for LLVM C++14 suffices, Flang and FortranRuntime require a
+ * While for LLVM C++14 suffices, Flang and flang-rt require a
C++17-capable C++ compiler.
### Bootstrap/In-Tree Build
The bootstrap build will first build Clang and Flang, then use these compilers
-to compile the FortranRuntime. CMake will create a secondary build tree in
+to compile flang-rt. CMake will create a secondary build tree in
configured with these just-built compilers. The secondary build will reuse the
same build options (Flags, Debug/Release, ...) as the primary build. It will
-also ensure that once built, the FortranRuntime is found by Flang from either
-the build- or install-prefix. To enable, add `FortranRuntime` to
+also ensure that once built, flang-rt is found by Flang from either
+the build- or install-prefix. To enable, add `flang-rt` to
`LLVM_ENABLE_RUNTIMES`:
```bash
cmake -S <path-to-llvm-project>/llvm \
-DNinja \
-DLLVM_ENABLE_PROJECTS=flang \
- -DLLVM_ENABLE_RUNTIMES=FortranRuntime \
+ -DLLVM_ENABLE_RUNTIMES=flang-rt \
...
```
-It is recommended to enable building OpenMP alongside Flang and FortranRuntime
+It is recommended to enable building OpenMP alongside Flang and flang-rt
as well. This will build `omp_lib.mod` required to use OpenMP from Fortran.
Building Compiler-RT may also be required, particularly on platforms that do
not provide all C-ABI functionality (such as Windows).
@@ -61,7 +61,7 @@ cmake -S <path-to-llvm-project>/llvm \
-DNinja \
-DCMAKE_BUILD_TYPE=Release \
-DLLVM_ENABLE_PROJECTS="flang;openmp" \
- -DLLVM_ENABLE_RUNTIMES="compiler-rt;FortranRuntime" \
+ -DLLVM_ENABLE_RUNTIMES="compiler-rt;flang-rt" \
...
```
@@ -74,8 +74,8 @@ cross-compilation via `flang-new --target=<target-triple>`, add more triples to
After configuration, build, test, and install the runtime(s) via
```shell
-$ ninja FortranRuntime
-$ ninja check-FortranRuntime
+$ ninja flang-rt
+$ ninja check-flang-rt
$ ninja install
```
@@ -87,7 +87,7 @@ CMake's environment introspection to find a C, C++, and Fortran compiler. The
compiler to be used can be controlled using CMake's standard mechanisms such as
`CMAKE_CXX_COMPILER`, `CMAKE_CXX_COMPILER`, and `CMAKE_Fortran_COMPILER`.
`CMAKE_Fortran_COMPILER` must be `flang-new` built from the same Git commit as
-FortranRuntime to ensure they are using the same ABI. The C and C++ compiler
+flang-rt to ensure they are using the same ABI. The C and C++ compiler
can be any compiler supporting the same ABI.
In addition to the compiler, the build be able to find LLVM development tools
@@ -100,13 +100,13 @@ cmake -S <path-to-llvm-project>/runtimes \
-GNinja \
-DLLVM_BINARY_DIR=<path-to-llvm-builddir> \
-DCMAKE_Fortran_COMPILER=<path-to-llvm-builddir>/bin/flang-new \
- -DLLVM_ENABLE_RUNTIMES=FortranRuntime \
+ -DLLVM_ENABLE_RUNTIMES=flang-rt \
...
```
-Building the FortranRuntime for cross-compilation triple, the target triple can
+Building flang-rt for cross-compilation triple, the target triple can
be selected using `LLVM_DEFAULT_TARGET_TRIPLE` AND `LLVM_RUNTIMES_TARGET`.
-Of course, FortranRuntime can be built multiple times with different build
+Of course, flang-rt can be built multiple times with different build
configurations, but have to be located manually when using with the Flang
driver using the `-L` option.
@@ -117,7 +117,7 @@ cmake -S <path-to-llvm-project>/runtimes
-GNinja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX="${HOME}/local" \
- -DLLVM_ENABLE_RUNTIMES="compiler-rt;FortranRuntime" \
+ -DLLVM_ENABLE_RUNTIMES="compiler-rt;flang-rt" \
-DCMAKE_C_COMPILER=gcc \
-DCMAKE_CXX_COMPILER=g++ \
-DLLVM_BINARY_DIR=<path-to-llvm-builddir> \
@@ -131,13 +131,13 @@ cmake -S <path-to-llvm-project>/runtimes
## Configuration Option Reference
-The FortranRuntime has the followign configuration options. This is in
+Flang-rt has the followign configuration options. This is in
addition to the build options the LLVM_ENABLE_RUNTIMES mechanism and
CMake itself provide.
- * `FORTRANRUNTIME_INCLUDE_TESTS` (boolean; default: `ON`)
+ * `FLANG_RT_INCLUDE_TESTS` (boolean; default: `ON`)
- When `OFF`, does not add any tests and unittests. The `check-FortranRuntime`
+ When `OFF`, does not add any tests and unittests. The `check-flang-rt`
build target will do nothing.
* `FLANG_RUNTIME_F128_MATH_LIB` (default: `""`)
@@ -148,20 +148,20 @@ CMake itself provide.
the compiler for `__float128` or 128-bit `long double` support.
[More details](docs/Real16MathSupport.md).
- * `FORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT` (values: `"CUDA"`,`"OpenMP"`, `""` default: `""`)
+ * `FLANG_RT_EXPERIMENTAL_OFFLOAD_SUPPORT` (values: `"CUDA"`,`"OpenMP"`, `""` default: `""`)
- When set to `CUDA`, builds a FortranRuntime with experimental support for GPU
+ When set to `CUDA`, builds flang-rt with experimental support for GPU
accelerators using CUDA. `CMAKE_CUDA_COMPILER` must be set if not
automatically detected by CMake. `nvcc` as well as `clang` are supported.
- When set to `OpenMP`, builds a FortranRuntime with experimental support for
+ When set to `OpenMP`, builds flang-rt with experimental support for
GPU accelerators using OpenMP offloading. Only Clang is supported for
`CMAKE_C_COMPILER` and `CMAKE_CXX_COMPILER`.
- * `FORTRANRUNTIME_ENABLE_CUF` (bool, default: `OFF`)
+ * `FLANG_RT_ENABLE_CUF` (bool, default: `OFF`)
Compiles the `libCufRuntime_cuda_<CUDA-version>.a/.so` library. This is
- independent of `FORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT=CUDA` and only
+ independent of `FLANG_RT_EXPERIMENTAL_OFFLOAD_SUPPORT=CUDA` and only
requires a
[CUDA Toolkit installation](https://cmake.org/cmake/help/latest/module/FindCUDAToolkit.html)
(no `CMAKE_CUDA_COMPILER`).
@@ -169,14 +169,14 @@ CMake itself provide.
### CUDA Support
-With `-DFORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT=CUDA`, the following
+With `-DFLANG_RT_EXPERIMENTAL_OFFLOAD_SUPPORT=CUDA`, the following
additional configuration options become available.
- * `FORTRANRUNTIME_LIBCUDACXX_PATH` (path, default: `""`)
+ * `FLANG_RT_LIBCUDACXX_PATH` (path, default: `""`)
Path to libcu++ package installation.
- * `FORTRANRUNTIME_CUDA_RUNTIME_PTX_WITHOUT_GLOBAL_VARS` (boolean, default: `OFF`)
+ * `FLANG_RT_CUDA_RUNTIME_PTX_WITHOUT_GLOBAL_VARS` (boolean, default: `OFF`)
Do not compile global variables' definitions when producing PTX library.
Default is `OFF`, meaning global variable definitions are compiled by
@@ -185,11 +185,11 @@ additional configuration options become available.
### OpenMP Offload Support
-With `-DFORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT=OpenMP`, the following
+With `-DFLANG_RT_EXPERIMENTAL_OFFLOAD_SUPPORT=OpenMP`, the following
additional configuration options become available.
- * `FORTRANRUNTIME_DEVICE_ARCHITECTURES` (default: `"all"`)
+ * `FLANG_RT_DEVICE_ARCHITECTURES` (default: `"all"`)
- A list of device architectures that the FortranRuntime is supporting.
+ A list of device architectures that flang-rt is supporting.
If `"all"` uses a pre-defined list of architectures. Same purpose as
`LIBOMPTARGET_DEVICE_ARCHITECTURES` from liboffload.
diff --git a/FortranRuntime/cmake/config.h.cmake.in b/flang-rt/cmake/config.h.cmake.in
similarity index 100%
rename from FortranRuntime/cmake/config.h.cmake.in
rename to flang-rt/cmake/config.h.cmake.in
diff --git a/FortranRuntime/cmake/modules/AddFortranRuntime.cmake b/flang-rt/cmake/modules/AddFlangRT.cmake
similarity index 72%
rename from FortranRuntime/cmake/modules/AddFortranRuntime.cmake
rename to flang-rt/cmake/modules/AddFlangRT.cmake
index e9563c6e3a60b9..797eeddae32142 100644
--- a/FortranRuntime/cmake/modules/AddFortranRuntime.cmake
+++ b/flang-rt/cmake/modules/AddFlangRT.cmake
@@ -1,4 +1,4 @@
-#===-- cmake/modules/AddFortranRuntime.cmake -------------------------------===#
+#===-- cmake/modules/AddFlangRT.cmake -------------------------------===#
#
# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
# See https://llvm.org/LICENSE.txt for license information.
@@ -6,11 +6,11 @@
#
#===------------------------------------------------------------------------===#
-# Builds a library with common options for FortranRuntime.
+# Builds a library with common options for flang-rt.
#
# Usage:
#
-# add_fortranruntime_library(name sources ...
+# add_flangrt_library(name sources ...
# SHARED
# Build a dynamic (.so/.dll) library
# STATIC
@@ -28,7 +28,7 @@
# ADDITIONAL_HEADERS
# May specify header files for IDE generators.
# )
-function (add_fortranruntime_library name)
+function (add_flangrt_library name)
set(options STATIC SHARED OBJECT INSTALL_WITH_TOOLCHAIN EXCLUDE_FROM_ALL LINK_TO_LLVM)
set(multiValueArgs ADDITIONAL_HEADERS)
cmake_parse_arguments(ARG
@@ -76,23 +76,23 @@ function (add_fortranruntime_library name)
)
endif ()
- # FortranRuntime's public headers
- target_include_directories(${name} PRIVATE "${FORTRANRUNTIME_SOURCE_DIR}/include")
+ # Flang-rt's public headers
+ target_include_directories(${name} PRIVATE "${FLANGRT_SOURCE_DIR}/include")
# For ISO_Fortran_binding.h to be found by the runtime itself (Accessed as #include "flang/ISO_Fortran_binding.h")
# User applications can use #include <ISO_Fortran_binding.h>
target_include_directories(${name} PRIVATE "${FLANG_SOURCE_DIR}/include")
- # For FortranRuntime's configured config.h to be found
- target_include_directories(${name} PRIVATE "${FORTRANRUNTIME_BINARY_DIR}")
+ # For flang-rt's configured config.h to be found
+ target_include_directories(${name} PRIVATE "${FLANGRT_BINARY_DIR}")
- # Clang/Flang, targeting the MSVC ABI, including clang-cl, should only depends
- # on msv(u)crt. LLVM still emits libgcc/compiler-rt functions for 128-bit
- # integer math (__udivti3, __modti3, __fixsfti, __floattidf, ...) that msvc
- # does not support. We are injecting a dependency to Compiler-RT where these
- # are implemented.
- if (MSVC AND (CMAKE_CXX_COMPILER_ID MATCHES ".*Clang") AND FORTRANRUNTIME_LIBCALL)
- target_compile_options(${name} PRIVATE "$<$<COMPILE_LANGUAGE:CXX,C>:-Xclang>$<$<COMPILE_LANGUAGE:Fortran>:-Xflang>" "--dependent-lib=${FORTRANRUNTIME_LIBCALL}")
+ # Flang/Clang (including clang-cl) -compiled programs targeting the MSVC ABI
+ # should only depend on msv(u)crt. LLVM still emits libgcc/compiler-rt
+ # functions for 128-bit integer math (__udivti3, __modti3, __fixsfti,
+ # __floattidf, ...) that msvc does not support. We are injecting a dependency
+ # to Compiler-RT where these are implemented.
+ if (MSVC AND (CMAKE_CXX_COMPILER_ID MATCHES ".*Clang") AND FLANGRT_LIBCALL)
+ target_compile_options(${name} PRIVATE "$<$<COMPILE_LANGUAGE:CXX,C>:-Xclang>$<$<COMPILE_LANGUAGE:Fortran>:-Xflang>" "--dependent-lib=${FLANGRT_LIBCALL}")
endif ()
# Non-GTest unittests depend on LLVMSupport
@@ -112,15 +112,15 @@ function (add_fortranruntime_library name)
if (ARG_INSTALL_WITH_TOOLCHAIN)
set_target_properties(${name}
PROPERTIES
- LIBRARY_OUTPUT_DIRECTORY "${FORTRANRUNTIME_BUILD_LIB_DIR}"
- ARCHIVE_OUTPUT_DIRECTORY "${FORTRANRUNTIME_BUILD_LIB_DIR}"
- RUNTIME_OUTPUT_DIRECTORY "${FORTRANRUNTIME_BUILD_LIB_DIR}"
+ LIBRARY_OUTPUT_DIRECTORY "${FLANGRT_BUILD_LIB_DIR}"
+ ARCHIVE_OUTPUT_DIRECTORY "${FLANGRT_BUILD_LIB_DIR}"
+ RUNTIME_OUTPUT_DIRECTORY "${FLANGRT_BUILD_LIB_DIR}"
)
install(TARGETS ${name}
- LIBRARY DESTINATION "${FORTRANRUNTIME_INSTALL_LIB_DIR}"
- ARCHIVE DESTINATION "${FORTRANRUNTIME_INSTALL_LIB_DIR}"
- RUNTIME DESTINATION "${FORTRANRUNTIME_INSTALL_LIB_DIR}"
+ LIBRARY DESTINATION "${FLANGRT_INSTALL_LIB_DIR}"
+ ARCHIVE DESTINATION "${FLANGRT_INSTALL_LIB_DIR}"
+ RUNTIME DESTINATION "${FLANGRT_INSTALL_LIB_DIR}"
)
endif ()
-endfunction (add_fortranruntime_library)
+endfunction (add_flangrt_library)
diff --git a/FortranRuntime/cmake/modules/AddFortranOffloadRuntime.cmake b/flang-rt/cmake/modules/AddFlangRTOffload.cmake
similarity index 82%
rename from FortranRuntime/cmake/modules/AddFortranOffloadRuntime.cmake
rename to flang-rt/cmake/modules/AddFlangRTOffload.cmake
index d60a26ce0f8a86..a6b94602b0456f 100644
--- a/FortranRuntime/cmake/modules/AddFortranOffloadRuntime.cmake
+++ b/flang-rt/cmake/modules/AddFlangRTOffload.cmake
@@ -7,7 +7,7 @@
#===------------------------------------------------------------------------===#
macro(enable_cuda_compilation name files)
- if (FORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT STREQUAL "CUDA")
+ if (FLANG_RT_EXPERIMENTAL_OFFLOAD_SUPPORT STREQUAL "CUDA")
if (BUILD_SHARED_LIBS)
message(FATAL_ERROR
"BUILD_SHARED_LIBS is not supported for CUDA build of Fortran runtime"
@@ -42,26 +42,26 @@ macro(enable_cuda_compilation name files)
"${CUDA_COMPILE_OPTIONS}"
)
- if (EXISTS "${FORTRANRUNTIME_LIBCUDACXX_PATH}/include")
+ if (EXISTS "${FLANG_RT_LIBCUDACXX_PATH}/include")
# When using libcudacxx headers files, we have to use them
# for all files of F18 runtime.
- include_directories(AFTER ${FORTRANRUNTIME_LIBCUDACXX_PATH}/include)
+ include_directories(AFTER ${FLANG_RT_LIBCUDACXX_PATH}/include)
add_compile_definitions(RT_USE_LIBCUDACXX=1)
endif()
# Add an OBJECT library consisting of CUDA PTX.
- add_fortranruntime_library(${name}PTX OBJECT ${files})
+ add_flangrt_library(${name}PTX OBJECT ${files})
set_property(TARGET ${name}PTX PROPERTY CUDA_PTX_COMPILATION ON)
- if (FORTRANRUNTIME_CUDA_RUNTIME_PTX_WITHOUT_GLOBAL_VARS)
+ if (FLANG_RT_CUDA_RUNTIME_PTX_WITHOUT_GLOBAL_VARS)
target_compile_definitions(${name}PTX
- PRIVATE FORTRANRUNTIME_NO_GLOBAL_VAR_DEFS
+ PRIVATE FLANGRT_NO_GLOBAL_VAR_DEFS
)
endif()
endif()
endmacro()
macro(enable_omp_offload_compilation files)
- if (FORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT STREQUAL "OpenMP")
+ if (FLANG_RT_EXPERIMENTAL_OFFLOAD_SUPPORT STREQUAL "OpenMP")
# OpenMP offload build only works with Clang compiler currently.
if (BUILD_SHARED_LIBS)
@@ -88,13 +88,13 @@ macro(enable_omp_offload_compilation files)
"${all_amdgpu_architectures};${all_nvptx_architectures}"
)
# TODO: support auto detection on the build system.
- if (FORTRANRUNTIME_DEVICE_ARCHITECTURES STREQUAL "all")
- set(FORTRANRUNTIME_DEVICE_ARCHITECTURES ${all_gpu_architectures})
+ if (FLANG_RT_DEVICE_ARCHITECTURES STREQUAL "all")
+ set(FLANG_RT_DEVICE_ARCHITECTURES ${all_gpu_architectures})
endif()
- list(REMOVE_DUPLICATES FORTRANRUNTIME_DEVICE_ARCHITECTURES)
+ list(REMOVE_DUPLICATES FLANG_RT_DEVICE_ARCHITECTURES)
string(REPLACE ";" "," compile_for_architectures
- "${FORTRANRUNTIME_DEVICE_ARCHITECTURES}"
+ "${FLANG_RT_DEVICE_ARCHITECTURES}"
)
set(OMP_COMPILE_OPTIONS
@@ -115,7 +115,7 @@ macro(enable_omp_offload_compilation files)
)
else()
message(FATAL_ERROR
- "FortranRuntime build with OpenMP offload is not supported for these compilers:\n"
+ "Flang-rt build with OpenMP offload is not supported for these compilers:\n"
"CMAKE_CXX_COMPILER_ID: ${CMAKE_CXX_COMPILER_ID}\n"
"CMAKE_C_COMPILER_ID: ${CMAKE_C_COMPILER_ID}")
endif()
diff --git a/flang/include/flang/Runtime/CUDA/allocator.h b/flang-rt/include/flang-rt/CufRuntime/allocator.h
similarity index 85%
rename from flang/include/flang/Runtime/CUDA/allocator.h
rename to flang-rt/include/flang-rt/CufRuntime/allocator.h
index cc88896b1f0bd6..63406e0de6d2fa 100644
--- a/flang/include/flang/Runtime/CUDA/allocator.h
+++ b/flang-rt/include/flang-rt/CufRuntime/allocator.h
@@ -1,4 +1,4 @@
-//===-- include/flang/Runtime/CUDA/allocator.h ------------------*- C++ -*-===//
+//===-- include/flang-rt/CufRuntime/allocator.h -----------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -6,8 +6,8 @@
//
//===----------------------------------------------------------------------===//
-#ifndef FORTRAN_RUNTIME_CUDA_ALLOCATOR_H_
-#define FORTRAN_RUNTIME_CUDA_ALLOCATOR_H_
+#ifndef FORTRAN_CUFRUNTIME_ALLOCATOR_H_
+#define FORTRAN_CUFRUNTIME_ALLOCATOR_H_
#include "flang/Runtime/descriptor-consts.h"
#include "flang/Runtime/entry-names.h"
@@ -43,4 +43,4 @@ void *CUFAllocUnified(std::size_t);
void CUFFreeUnified(void *);
} // namespace Fortran::runtime::cuda
-#endif // FORTRAN_RUNTIME_CUDA_ALLOCATOR_H_
+#endif /* FORTRAN_CUFRUNTIME_ALLOCATOR_H_ */
diff --git a/FortranRuntime/include/FortranRuntime/Runtime/allocator-registry.h b/flang-rt/include/flang-rt/flang_rt/allocator-registry.h
similarity index 87%
rename from FortranRuntime/include/FortranRuntime/Runtime/allocator-registry.h
rename to flang-rt/include/flang-rt/flang_rt/allocator-registry.h
index 30a583b88c083e..ecad61ab4043d7 100644
--- a/FortranRuntime/include/FortranRuntime/Runtime/allocator-registry.h
+++ b/flang-rt/include/flang-rt/flang_rt/allocator-registry.h
@@ -1,4 +1,4 @@
-//===-- include/FortranRuntime/Runtime/allocator-registry.h -----*- C++ -*-===//
+//===-- include/flang-rt/flang_rt/allocator-registry.h ----------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -6,8 +6,8 @@
//
//===----------------------------------------------------------------------===//
-#ifndef FORTRAN_RUNTIME_ALLOCATOR_REGISTRY_H_
-#define FORTRAN_RUNTIME_ALLOCATOR_REGISTRY_H_
+#ifndef FORTRAN_FLANG_RT_ALLOCATOR_REGISTRY_H_
+#define FORTRAN_FLANG_RT_ALLOCATOR_REGISTRY_H_
#include "flang/Common/api-attrs.h"
#include "flang/Runtime/allocator-registry-consts.h"
@@ -55,4 +55,4 @@ RT_OFFLOAD_VAR_GROUP_END
} // namespace Fortran::runtime
-#endif /* FORTRAN_RUNTIME_ALLOCATOR_REGISTRY_H_ */
+#endif /* FORTRAN_FLANG_RT_ALLOCATOR_REGISTRY_H_ */
diff --git a/FortranRuntime/include/FortranRuntime/Runtime/array-constructor.h b/flang-rt/include/flang-rt/flang_rt/array-constructor.h
similarity index 85%
rename from FortranRuntime/include/FortranRuntime/Runtime/array-constructor.h
rename to flang-rt/include/flang-rt/flang_rt/array-constructor.h
index 314d5e56599cd3..e8fffc762b6fbe 100644
--- a/FortranRuntime/include/FortranRuntime/Runtime/array-constructor.h
+++ b/flang-rt/include/flang-rt/flang_rt/array-constructor.h
@@ -1,4 +1,4 @@
-//===-- include/FortranRuntime/Runtime/array-constructor.h ------*- C++ -*-===//
+//===-- include/flang-rt/flang_rt/array-constructor.h -----------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -9,10 +9,10 @@
// External APIs to create temporary storage for array constructors when their
// final extents or length parameters cannot be pre-computed.
-#ifndef FORTRAN_RUNTIME_ARRAY_CONSTRUCTOR_H_
-#define FORTRAN_RUNTIME_ARRAY_CONSTRUCTOR_H_
+#ifndef FORTRAN_FLANG_RT_ARRAY_CONSTRUCTOR_H_
+#define FORTRAN_FLANG_RT_ARRAY_CONSTRUCTOR_H_
-#include "FortranRuntime/Runtime/descriptor.h"
+#include "flang-rt/flang_rt/descriptor.h"
#include "flang/Runtime/array-constructor-consts.h"
#include "flang/Runtime/entry-names.h"
#include <cstdint>
@@ -45,4 +45,4 @@ struct ArrayConstructorVector {
};
} // namespace Fortran::runtime
-#endif /* FORTRAN_RUNTIME_ARRAY_CONSTRUCTOR_H_ */
+#endif /* FORTRAN_FLANG_RT_ARRAY_CONSTRUCTOR_H_ */
diff --git a/FortranRuntime/include/FortranRuntime/Runtime/descriptor.h b/flang-rt/include/flang-rt/flang_rt/descriptor.h
similarity index 98%
rename from FortranRuntime/include/FortranRuntime/Runtime/descriptor.h
rename to flang-rt/include/flang-rt/flang_rt/descriptor.h
index f79ad6b9637a4a..fea5b55c1922ce 100644
--- a/FortranRuntime/include/FortranRuntime/Runtime/descriptor.h
+++ b/flang-rt/include/flang-rt/flang_rt/descriptor.h
@@ -1,4 +1,4 @@
-//===-- include/FortranRuntime/Runtime/descriptor.h -------------*- C++ -*-===//
+//===-- include/flang-rt/flang_rt/descriptor.h ------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -6,8 +6,8 @@
//
//===----------------------------------------------------------------------===//
-#ifndef FORTRAN_RUNTIME_DESCRIPTOR_H_
-#define FORTRAN_RUNTIME_DESCRIPTOR_H_
+#ifndef FORTRAN_FLANG_RT_DESCRIPTOR_H_
+#define FORTRAN_FLANG_RT_DESCRIPTOR_H_
// Defines data structures used during execution of a Fortran program
// to implement nontrivial dummy arguments, pointers, allocatables,
@@ -18,8 +18,8 @@
// User C code is welcome to depend on that ISO_Fortran_binding.h file,
// but should never reference this internal header.
-#include "FortranRuntime/Runtime/memory.h"
-#include "FortranRuntime/Runtime/type-code.h"
+#include "flang-rt/flang_rt/memory.h"
+#include "flang-rt/flang_rt/type-code.h"
#include "flang/Common/ISO_Fortran_binding_wrapper.h"
#include "flang/Runtime/descriptor-consts.h"
#include <algorithm>
@@ -482,4 +482,4 @@ class alignas(Descriptor) StaticDescriptor {
};
} // namespace Fortran::runtime
-#endif /* FORTRAN_RUNTIME_DESCRIPTOR_H_ */
+#endif /* FORTRAN_FLANG_RT_DESCRIPTOR_H_ */
diff --git a/FortranRuntime/include/FortranRuntime/Runtime/io-api-funcs.h b/flang-rt/include/flang-rt/flang_rt/io-api-funcs.h
similarity index 84%
rename from FortranRuntime/include/FortranRuntime/Runtime/io-api-funcs.h
rename to flang-rt/include/flang-rt/flang_rt/io-api-funcs.h
index 516fe25784656c..00cb49ad015437 100644
--- a/FortranRuntime/include/FortranRuntime/Runtime/io-api-funcs.h
+++ b/flang-rt/include/flang-rt/flang_rt/io-api-funcs.h
@@ -1,4 +1,4 @@
-//===-- include/FortranRuntime/Runtime/io-api-funcs.h -----------*- C++ -*-===//
+//===-- include/flang-rt/flang_rt/io-api-funcs.h ----------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -8,8 +8,8 @@
// Defines API between compiled code and I/O runtime library.
-#ifndef FORTRAN_RUNTIME_IO_API_FUNCS_H_
-#define FORTRAN_RUNTIME_IO_API_FUNCS_H_
+#ifndef FORTRAN_FLANG_RT_IO_API_FUNCS_H_
+#define FORTRAN_FLANG_RT_IO_API_FUNCS_H_
#include "flang/Common/uint128.h"
#include "flang/Runtime/entry-names.h"
@@ -36,4 +36,4 @@ RT_API_ATTRS const char *InquiryKeywordHashDecode(
char *buffer, std::size_t, InquiryKeywordHash);
} // namespace Fortran::runtime::io
-#endif /* FORTRAN_RUNTIME_IO_API_FUNCS_H_ */
+#endif /* FORTRAN_FLANG_RT_IO_API_FUNCS_H_ */
diff --git a/FortranRuntime/include/FortranRuntime/Runtime/iostat-funcs.h b/flang-rt/include/flang-rt/flang_rt/iostat-funcs.h
similarity index 75%
rename from FortranRuntime/include/FortranRuntime/Runtime/iostat-funcs.h
rename to flang-rt/include/flang-rt/flang_rt/iostat-funcs.h
index 10906afb01673c..dd24d41fbaad10 100644
--- a/FortranRuntime/include/FortranRuntime/Runtime/iostat-funcs.h
+++ b/flang-rt/include/flang-rt/flang_rt/iostat-funcs.h
@@ -1,4 +1,4 @@
-//===-- include/FortranRuntime/Runtime/iostat-funcs.h -----------*- C++ -*-===//
+//===-- include/flang-rt/flang_rt/iostat-funcs.h ----------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -9,8 +9,8 @@
// Defines the values returned by the runtime for IOSTAT= specifiers
// on I/O statements.
-#ifndef FORTRAN_RUNTIME_IOSTAT_FUNCS_H_
-#define FORTRAN_RUNTIME_IOSTAT_FUNCS_H_
+#ifndef FORTRAN_FLANG_RT_IOSTAT_FUNCS_H_
+#define FORTRAN_FLANG_RT_IOSTAT_FUNCS_H_
#include "flang/Common/api-attrs.h"
#include "flang/Runtime/iostat.h"
@@ -20,4 +20,4 @@ namespace Fortran::runtime::io {
RT_API_ATTRS const char *IostatErrorString(int);
} // namespace Fortran::runtime::io
-#endif /* FORTRAN_RUNTIME_IOSTAT_FUNCS_H_ */
+#endif /* FORTRAN_FLANG_RT_IOSTAT_FUNCS_H_ */
diff --git a/FortranRuntime/include/FortranRuntime/Runtime/memory.h b/flang-rt/include/flang-rt/flang_rt/memory.h
similarity index 96%
rename from FortranRuntime/include/FortranRuntime/Runtime/memory.h
rename to flang-rt/include/flang-rt/flang_rt/memory.h
index 3e7fd2d9ea3e3b..b97f6525d60036 100644
--- a/FortranRuntime/include/FortranRuntime/Runtime/memory.h
+++ b/flang-rt/include/flang-rt/flang_rt/memory.h
@@ -1,4 +1,4 @@
-//===-- include/FortranRuntime/Runtime/memory.h -----------------*- C++ -*-===//
+//===-- include/flang-rt/flang_rt/memory.h ----------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -9,8 +9,8 @@
// Thin wrapper around malloc()/free() to isolate the dependency,
// ease porting, and provide an owning pointer.
-#ifndef FORTRAN_RUNTIME_MEMORY_H_
-#define FORTRAN_RUNTIME_MEMORY_H_
+#ifndef FORTRAN_FLANG_RT_MEMORY_H_
+#define FORTRAN_FLANG_RT_MEMORY_H_
#include "flang/Common/api-attrs.h"
#include <cassert>
@@ -170,4 +170,4 @@ template <typename A> struct Allocator {
};
} // namespace Fortran::runtime
-#endif /* FORTRAN_RUNTIME_MEMORY_H_ */
+#endif /* FORTRAN_FLANG_RT_MEMORY_H_ */
diff --git a/FortranRuntime/include/FortranRuntime/Runtime/type-code.h b/flang-rt/include/flang-rt/flang_rt/type-code.h
similarity index 93%
rename from FortranRuntime/include/FortranRuntime/Runtime/type-code.h
rename to flang-rt/include/flang-rt/flang_rt/type-code.h
index 92ff593410c12c..7c694a13431b13 100644
--- a/FortranRuntime/include/FortranRuntime/Runtime/type-code.h
+++ b/flang-rt/include/flang-rt/flang_rt/type-code.h
@@ -1,4 +1,4 @@
-//===-- include/FortranRuntime/Runtime/type-code.h --------------*- C++ -*-===//
+//===-- include/flang-rt/flang_rt/type-code.h -------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -6,8 +6,8 @@
//
//===----------------------------------------------------------------------===//
-#ifndef FORTRAN_RUNTIME_TYPE_CODE_H_
-#define FORTRAN_RUNTIME_TYPE_CODE_H_
+#ifndef FORTRAN_FLANG_RT_TYPE_CODE_H_
+#define FORTRAN_FLANG_RT_TYPE_CODE_H_
#include "flang/Common/Fortran-consts.h"
#include "flang/Common/ISO_Fortran_binding_wrapper.h"
@@ -75,4 +75,4 @@ class TypeCode {
ISO::CFI_type_t raw_{CFI_type_other};
};
} // namespace Fortran::runtime
-#endif /* FORTRAN_RUNTIME_TYPE_CODE_H_ */
+#endif /* FORTRAN_FLANG_RT_TYPE_CODE_H_ */
diff --git a/FortranRuntime/lib/CMakeLists.txt b/flang-rt/lib/CMakeLists.txt
similarity index 71%
rename from FortranRuntime/lib/CMakeLists.txt
rename to flang-rt/lib/CMakeLists.txt
index 74c78b3fa3a493..f0422f5e0a58b4 100644
--- a/FortranRuntime/lib/CMakeLists.txt
+++ b/flang-rt/lib/CMakeLists.txt
@@ -6,8 +6,12 @@
#
#===------------------------------------------------------------------------===#
-add_subdirectory(Runtime)
-if (FORTRANRUNTIME_INCLUDE_TESTS)
+add_subdirectory(FortranFloat128Math)
+add_subdirectory(flang_rt)
+if (FLANG_RT_ENABLE_CUF)
+ add_subdirectory(CufRuntime)
+endif()
+
+if (FLANG_RT_INCLUDE_TESTS)
add_subdirectory(Testing)
endif ()
-
diff --git a/FortranRuntime/lib/Runtime/CUDA/CMakeLists.txt b/flang-rt/lib/CufRuntime/CMakeLists.txt
similarity index 87%
rename from FortranRuntime/lib/Runtime/CUDA/CMakeLists.txt
rename to flang-rt/lib/CufRuntime/CMakeLists.txt
index 78b98652d60813..1eb80d9ca1d497 100644
--- a/FortranRuntime/lib/Runtime/CUDA/CMakeLists.txt
+++ b/flang-rt/lib/CufRuntime/CMakeLists.txt
@@ -1,4 +1,4 @@
-#===-- lib/Runtime/CUDA/CMakeLists.txt -------------------------------------===#
+#===-- lib/CufRuntime/CMakeLists.txt ---------------------------------------===#
#
# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
# See https://llvm.org/LICENSE.txt for license information.
@@ -11,7 +11,7 @@
# added to the library name.
set(CUFRT_LIBNAME CufRuntime_cuda_${CUDAToolkit_VERSION_MAJOR})
-add_fortranruntime_library(${CUFRT_LIBNAME}
+add_flangrt_library(${CUFRT_LIBNAME}
allocator.cpp
descriptor.cpp
)
@@ -25,6 +25,6 @@ endif()
target_link_libraries(${CUFRT_LIBNAME}
PRIVATE
- FortranRuntime
+ flang_rt
${CUDA_RT_TARGET}
)
diff --git a/FortranRuntime/lib/Runtime/CUDA/allocator.cpp b/flang-rt/lib/CufRuntime/allocator.cpp
similarity index 81%
rename from FortranRuntime/lib/Runtime/CUDA/allocator.cpp
rename to flang-rt/lib/CufRuntime/allocator.cpp
index c9d62f6ea8f3bf..8c16fb77f2ac46 100644
--- a/FortranRuntime/lib/Runtime/CUDA/allocator.cpp
+++ b/flang-rt/lib/CufRuntime/allocator.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/CUDA/allocator.cpp --------------------------*- C++ -*-===//
+//===-- lib/CufRuntime/allocator.cpp ----------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -6,14 +6,14 @@
//
//===----------------------------------------------------------------------===//
-#include "FortranRuntime/Runtime/CUDA/allocator.h"
-#include "FortranRuntime/Runtime/allocator-registry.h"
-#include "../derived.h"
-#include "../stat.h"
-#include "../terminator.h"
-#include "../type-info.h"
-#include "flang/ISO_Fortran_binding_wrapper.h"
-#include "flang/Support/Fortran.h"
+#include "flang-rt/CufRuntime/allocator.h"
+#include "flang-rt/flang_rt/allocator-registry.h"
+#include "../flang_rt/derived.h"
+#include "../flang_rt/stat.h"
+#include "../flang_rt/terminator.h"
+#include "../flang_rt/type-info.h"
+#include "flang/Common/Fortran-consts.h"
+#include "flang/Common/ISO_Fortran_binding_wrapper.h"
#include "cuda_runtime.h"
diff --git a/FortranRuntime/lib/Runtime/CUDA/descriptor.cpp b/flang-rt/lib/CufRuntime/descriptor.cpp
similarity index 82%
rename from FortranRuntime/lib/Runtime/CUDA/descriptor.cpp
rename to flang-rt/lib/CufRuntime/descriptor.cpp
index 94b5feca4ce4dc..b034fc76b67d4d 100644
--- a/FortranRuntime/lib/Runtime/CUDA/descriptor.cpp
+++ b/flang-rt/lib/CufRuntime/descriptor.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/CUDA/descriptor.cpp -------------------------*- C++ -*-===//
+//===-- lib/CufRuntime/descriptor.cpp ---------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -6,8 +6,8 @@
//
//===----------------------------------------------------------------------===//
-#include "FortranRuntime/Runtime/CUDA/descriptor.h"
-#include "FortranRuntime/Runtime/CUDA/allocator.h"
+#include "flang/Runtime/CUDA/descriptor.h"
+#include "flang-rt/CufRuntime/allocator.h"
namespace Fortran::runtime::cuda {
extern "C" {
diff --git a/FortranRuntime/lib/Runtime/Float128Math/CMakeLists.txt b/flang-rt/lib/FortranFloat128Math/CMakeLists.txt
similarity index 90%
rename from FortranRuntime/lib/Runtime/Float128Math/CMakeLists.txt
rename to flang-rt/lib/FortranFloat128Math/CMakeLists.txt
index ed65da0a5ac71c..b12dfee64af8f6 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/CMakeLists.txt
+++ b/flang-rt/lib/FortranFloat128Math/CMakeLists.txt
@@ -1,4 +1,4 @@
-#===-- runtime/Float128Math/CMakeLists.txt ---------------------------------===#
+#===-- lib/FortranFloat128Math/CMakeLists.txt ------------------------------===#
#
# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
# See https://llvm.org/LICENSE.txt for license information.
@@ -91,12 +91,11 @@ if (FLANG_RUNTIME_F128_MATH_LIB)
if (WIN32)
# Do not create a FortranFloat128Math library under Windows, the Flang
- # driver never links it. Instead, add the sources to the main
- # FortranRuntime.lib.
+ # driver never links it. Instead, add the sources to the flang_rt itself.
target_sources(FortranFloat128MathILib INTERFACE ${sources})
target_compile_definitions(FortranFloat128MathILib INTERFACE HAS_QUADMATHLIB)
else ()
- add_fortranruntime_library(FortranFloat128Math STATIC INSTALL_WITH_TOOLCHAIN
+ add_flangrt_library(FortranFloat128Math STATIC INSTALL_WITH_TOOLCHAIN
${sources})
endif ()
elseif (HAVE_LDBL_MANT_DIG_113)
@@ -108,7 +107,7 @@ elseif (HAVE_LDBL_MANT_DIG_113)
)
target_sources(FortranFloat128MathILib INTERFACE ${sources})
else()
- message(FATAL_ERROR "FortranRuntime cannot build without libm")
+ message(FATAL_ERROR "flang-rt cannot build without libm")
endif()
else()
# We can use '__float128' version from libc, if it has them.
diff --git a/FortranRuntime/lib/Runtime/Float128Math/acos.cpp b/flang-rt/lib/FortranFloat128Math/acos.cpp
similarity index 90%
rename from FortranRuntime/lib/Runtime/Float128Math/acos.cpp
rename to flang-rt/lib/FortranFloat128Math/acos.cpp
index 7b15e4a0bfd3ae..e204c6c871f3fa 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/acos.cpp
+++ b/flang-rt/lib/FortranFloat128Math/acos.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/Float128Math/acos.cpp -----------------------*- C++ -*-===//
+//===-- lib/FortranFloat128Math/acos.cpp ------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/Float128Math/acosh.cpp b/flang-rt/lib/FortranFloat128Math/acosh.cpp
similarity index 90%
rename from FortranRuntime/lib/Runtime/Float128Math/acosh.cpp
rename to flang-rt/lib/FortranFloat128Math/acosh.cpp
index c873259b4545b8..90ff7886e6909d 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/acosh.cpp
+++ b/flang-rt/lib/FortranFloat128Math/acosh.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/Float128Math/acosh.cpp ----------------------*- C++ -*-===//
+//===-- lib/FortranFloat128Math/acosh.cpp -----------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/Float128Math/asin.cpp b/flang-rt/lib/FortranFloat128Math/asin.cpp
similarity index 90%
rename from FortranRuntime/lib/Runtime/Float128Math/asin.cpp
rename to flang-rt/lib/FortranFloat128Math/asin.cpp
index 8866d51430197a..18368044d72b0f 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/asin.cpp
+++ b/flang-rt/lib/FortranFloat128Math/asin.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/Float128Math/asin.cpp -----------------------*- C++ -*-===//
+//===-- lib/FortranFloat128Math/asin.cpp ------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/Float128Math/asinh.cpp b/flang-rt/lib/FortranFloat128Math/asinh.cpp
similarity index 90%
rename from FortranRuntime/lib/Runtime/Float128Math/asinh.cpp
rename to flang-rt/lib/FortranFloat128Math/asinh.cpp
index 288193001ce1da..2c1f040cfc3872 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/asinh.cpp
+++ b/flang-rt/lib/FortranFloat128Math/asinh.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/Float128Math/asinh.cpp ----------------------*- C++ -*-===//
+//===-- lib/FortranFloat128Math/asinh.cpp -----------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/Float128Math/atan.cpp b/flang-rt/lib/FortranFloat128Math/atan.cpp
similarity index 90%
rename from FortranRuntime/lib/Runtime/Float128Math/atan.cpp
rename to flang-rt/lib/FortranFloat128Math/atan.cpp
index 390c080b4d501b..8bd9a2626caf83 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/atan.cpp
+++ b/flang-rt/lib/FortranFloat128Math/atan.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/Float128Math/atan.cpp -----------------------*- C++ -*-===//
+//===-- lib/FortranFloat128Math/atan.cpp ------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/Float128Math/atan2.cpp b/flang-rt/lib/FortranFloat128Math/atan2.cpp
similarity index 91%
rename from FortranRuntime/lib/Runtime/Float128Math/atan2.cpp
rename to flang-rt/lib/FortranFloat128Math/atan2.cpp
index 3c206b75704431..4994be699a0b67 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/atan2.cpp
+++ b/flang-rt/lib/FortranFloat128Math/atan2.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/Float128Math/atan2.cpp ----------------------*- C++ -*-===//
+//===-- lib/FortranFloat128Math/atan2.cpp -----------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/Float128Math/atanh.cpp b/flang-rt/lib/FortranFloat128Math/atanh.cpp
similarity index 90%
rename from FortranRuntime/lib/Runtime/Float128Math/atanh.cpp
rename to flang-rt/lib/FortranFloat128Math/atanh.cpp
index 77ceb188f04e42..f5ace35ac51caa 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/atanh.cpp
+++ b/flang-rt/lib/FortranFloat128Math/atanh.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/Float128Math/atanh.cpp ----------------------*- C++ -*-===//
+//===-- lib/FortranFloat128Math/atanh.cpp -----------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/Float128Math/ceil.cpp b/flang-rt/lib/FortranFloat128Math/ceil.cpp
similarity index 90%
rename from FortranRuntime/lib/Runtime/Float128Math/ceil.cpp
rename to flang-rt/lib/FortranFloat128Math/ceil.cpp
index 46bc253bd0922d..834da9396c071d 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/ceil.cpp
+++ b/flang-rt/lib/FortranFloat128Math/ceil.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/Float128Math/ceil.cpp -----------------------*- C++ -*-===//
+//===-- lib/FortranFloat128Math/ceil.cpp ------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/Float128Math/complex-math.c b/flang-rt/lib/FortranFloat128Math/complex-math.c
similarity index 96%
rename from FortranRuntime/lib/Runtime/Float128Math/complex-math.c
rename to flang-rt/lib/FortranFloat128Math/complex-math.c
index f34ef7da76e599..493ffe942f7e31 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/complex-math.c
+++ b/flang-rt/lib/FortranFloat128Math/complex-math.c
@@ -1,4 +1,4 @@
-/*===-- lib/Runtime/Float128Math/complex-math.c ---------------------*- C -*-===
+/*===-- lib/FortranFloat128Math/complex-math.c ----------------------*- C -*-===
*
* Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
* See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/Float128Math/complex-math.h b/flang-rt/lib/FortranFloat128Math/complex-math.h
similarity index 88%
rename from FortranRuntime/lib/Runtime/Float128Math/complex-math.h
rename to flang-rt/lib/FortranFloat128Math/complex-math.h
index 6f5c7954bab035..bb67523e1bddcc 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/complex-math.h
+++ b/flang-rt/lib/FortranFloat128Math/complex-math.h
@@ -1,4 +1,4 @@
-/*===-- lib/Runtime/Float128Math/complex-math.h ---------------------*- C -*-===
+/*===-- lib/FortranFloat128Math/complex-math.h ----------------------*- C -*-===
*
* Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
* See https://llvm.org/LICENSE.txt for license information.
@@ -6,8 +6,8 @@
*
*===----------------------------------------------------------------------===*/
-#ifndef FORTRAN_RUNTIME_FLOAT128MATH_COMPLEX_MATH_H_
-#define FORTRAN_RUNTIME_FLOAT128MATH_COMPLEX_MATH_H_
+#ifndef FORTRAN_FORTRANFLOAT128MATH_COMPLEX_MATH_H_
+#define FORTRAN_FORTRANFLOAT128MATH_COMPLEX_MATH_H_
#include "flang/Common/float128.h"
#include "flang/Runtime/entry-names.h"
@@ -59,4 +59,4 @@
#error "Float128Math build with glibc>=2.26 is unsupported yet"
#endif
-#endif /* FORTRAN_RUNTIME_FLOAT128MATH_COMPLEX_MATH_H_ */
+#endif /* FORTRAN_FORTRANFLOAT128MATH_COMPLEX_MATH_H_ */
diff --git a/FortranRuntime/lib/Runtime/Float128Math/cos.cpp b/flang-rt/lib/FortranFloat128Math/cos.cpp
similarity index 90%
rename from FortranRuntime/lib/Runtime/Float128Math/cos.cpp
rename to flang-rt/lib/FortranFloat128Math/cos.cpp
index 8ce47151e2914b..2651982666118b 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/cos.cpp
+++ b/flang-rt/lib/FortranFloat128Math/cos.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/Float128Math/cos.cpp ------------------------*- C++ -*-===//
+//===-- lib/FortranFloat128Math/cos.cpp -------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/Float128Math/cosh.cpp b/flang-rt/lib/FortranFloat128Math/cosh.cpp
similarity index 90%
rename from FortranRuntime/lib/Runtime/Float128Math/cosh.cpp
rename to flang-rt/lib/FortranFloat128Math/cosh.cpp
index f1ec45bcfb479d..dda01e5abef66d 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/cosh.cpp
+++ b/flang-rt/lib/FortranFloat128Math/cosh.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/Float128Math/cosh.cpp -----------------------*- C++ -*-===//
+//===-- lib/FortranFloat128Math/cosh.cpp ------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/Float128Math/erf.cpp b/flang-rt/lib/FortranFloat128Math/erf.cpp
similarity index 90%
rename from FortranRuntime/lib/Runtime/Float128Math/erf.cpp
rename to flang-rt/lib/FortranFloat128Math/erf.cpp
index 010088467794d1..f5e713d93cac61 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/erf.cpp
+++ b/flang-rt/lib/FortranFloat128Math/erf.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/Float128Math/erf.cpp ------------------------*- C++ -*-===//
+//===-- lib/FortranFloat128Math/erf.cpp -------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/Float128Math/erfc.cpp b/flang-rt/lib/FortranFloat128Math/erfc.cpp
similarity index 90%
rename from FortranRuntime/lib/Runtime/Float128Math/erfc.cpp
rename to flang-rt/lib/FortranFloat128Math/erfc.cpp
index b226f8d2dc378b..3f8b78ba0e64f9 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/erfc.cpp
+++ b/flang-rt/lib/FortranFloat128Math/erfc.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/Float128Math/erfc.cpp -----------------------*- C++ -*-===//
+//===-- lib/FortranFloat128Math/erfc.cpp ------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/Float128Math/exp.cpp b/flang-rt/lib/FortranFloat128Math/exp.cpp
similarity index 90%
rename from FortranRuntime/lib/Runtime/Float128Math/exp.cpp
rename to flang-rt/lib/FortranFloat128Math/exp.cpp
index e22f9df3579e96..0b694b159f3621 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/exp.cpp
+++ b/flang-rt/lib/FortranFloat128Math/exp.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/Float128Math/exp.cpp ------------------------*- C++ -*-===//
+//===-- lib/FortranFloat128Math/exp.cpp -------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/Float128Math/exponent.cpp b/flang-rt/lib/FortranFloat128Math/exponent.cpp
similarity index 92%
rename from FortranRuntime/lib/Runtime/Float128Math/exponent.cpp
rename to flang-rt/lib/FortranFloat128Math/exponent.cpp
index f07bf30bd1096f..a9c1b867e7ea37 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/exponent.cpp
+++ b/flang-rt/lib/FortranFloat128Math/exponent.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/Float128Math/exponent.cpp -------------------*- C++ -*-===//
+//===-- lib/FortranFloat128Math/exponent.cpp --------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/Float128Math/floor.cpp b/flang-rt/lib/FortranFloat128Math/floor.cpp
similarity index 90%
rename from FortranRuntime/lib/Runtime/Float128Math/floor.cpp
rename to flang-rt/lib/FortranFloat128Math/floor.cpp
index 8744e6e2fec63c..27cfed2f1f9599 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/floor.cpp
+++ b/flang-rt/lib/FortranFloat128Math/floor.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/Float128Math/floor.cpp ----------------------*- C++ -*-===//
+//===-- lib/FortranFloat128Math/floor.cpp -----------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/Float128Math/fma.cpp b/flang-rt/lib/FortranFloat128Math/fma.cpp
similarity index 91%
rename from FortranRuntime/lib/Runtime/Float128Math/fma.cpp
rename to flang-rt/lib/FortranFloat128Math/fma.cpp
index 198fec5d4bc356..a9ac1581002cec 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/fma.cpp
+++ b/flang-rt/lib/FortranFloat128Math/fma.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/Float128Math/fma.cpp ------------------------*- C++ -*-===//
+//===-- lib/FortranFloat128Math/fma.cpp -------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/Float128Math/fraction.cpp b/flang-rt/lib/FortranFloat128Math/fraction.cpp
similarity index 90%
rename from FortranRuntime/lib/Runtime/Float128Math/fraction.cpp
rename to flang-rt/lib/FortranFloat128Math/fraction.cpp
index d4749bf3eb7e0e..39c59a25812abb 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/fraction.cpp
+++ b/flang-rt/lib/FortranFloat128Math/fraction.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/Float128Math/fraction.cpp -------------------*- C++ -*-===//
+//===-- lib/FortranFloat128Math/fraction.cpp --------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/Float128Math/hypot.cpp b/flang-rt/lib/FortranFloat128Math/hypot.cpp
similarity index 91%
rename from FortranRuntime/lib/Runtime/Float128Math/hypot.cpp
rename to flang-rt/lib/FortranFloat128Math/hypot.cpp
index 6542bf505060df..c130e204f9951e 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/hypot.cpp
+++ b/flang-rt/lib/FortranFloat128Math/hypot.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/Float128Math/hypot.cpp ----------------------*- C++ -*-===//
+//===-- lib/FortranFloat128Math/hypot.cpp -----------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/Float128Math/j0.cpp b/flang-rt/lib/FortranFloat128Math/j0.cpp
similarity index 90%
rename from FortranRuntime/lib/Runtime/Float128Math/j0.cpp
rename to flang-rt/lib/FortranFloat128Math/j0.cpp
index 27e4338cdfc2b0..d6454b56c8a86b 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/j0.cpp
+++ b/flang-rt/lib/FortranFloat128Math/j0.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/Float128Math/j0.cpp -------------------------*- C++ -*-===//
+//===-- lib/FortranFloat128Math/j0.cpp --------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/Float128Math/j1.cpp b/flang-rt/lib/FortranFloat128Math/j1.cpp
similarity index 90%
rename from FortranRuntime/lib/Runtime/Float128Math/j1.cpp
rename to flang-rt/lib/FortranFloat128Math/j1.cpp
index d3f897827f9f67..2b7283aea0fe46 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/j1.cpp
+++ b/flang-rt/lib/FortranFloat128Math/j1.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/Float128Math/j1.cpp -------------------------*- C++ -*-===//
+//===-- lib/FortranFloat128Math/j1.cpp --------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/Float128Math/jn.cpp b/flang-rt/lib/FortranFloat128Math/jn.cpp
similarity index 90%
rename from FortranRuntime/lib/Runtime/Float128Math/jn.cpp
rename to flang-rt/lib/FortranFloat128Math/jn.cpp
index 681bb5b1ff3ad5..cdc9af9b3dd6a5 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/jn.cpp
+++ b/flang-rt/lib/FortranFloat128Math/jn.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/Float128Math/jn.cpp -------------------------*- C++ -*-===//
+//===-- lib/FortranFloat128Math/jn.cpp --------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/Float128Math/lgamma.cpp b/flang-rt/lib/FortranFloat128Math/lgamma.cpp
similarity index 90%
rename from FortranRuntime/lib/Runtime/Float128Math/lgamma.cpp
rename to flang-rt/lib/FortranFloat128Math/lgamma.cpp
index 0426db2e3b98d3..cecf9e90ad29ba 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/lgamma.cpp
+++ b/flang-rt/lib/FortranFloat128Math/lgamma.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/Float128Math/lgamma.cpp ---------------------*- C++ -*-===//
+//===-- lib/FortranFloat128Math/lgamma.cpp ----------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/Float128Math/llround.cpp b/flang-rt/lib/FortranFloat128Math/llround.cpp
similarity index 90%
rename from FortranRuntime/lib/Runtime/Float128Math/llround.cpp
rename to flang-rt/lib/FortranFloat128Math/llround.cpp
index 4c9026cce00283..7853ac10f53e88 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/llround.cpp
+++ b/flang-rt/lib/FortranFloat128Math/llround.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/Float128Math/llround.cpp --------------------*- C++ -*-===//
+//===-- lib/FortranFloat128Math/llround.cpp ---------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/Float128Math/log.cpp b/flang-rt/lib/FortranFloat128Math/log.cpp
similarity index 90%
rename from FortranRuntime/lib/Runtime/Float128Math/log.cpp
rename to flang-rt/lib/FortranFloat128Math/log.cpp
index a5a431ae5ffbbb..d705eaf441c31f 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/log.cpp
+++ b/flang-rt/lib/FortranFloat128Math/log.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/Float128Math/log.cpp ------------------------*- C++ -*-===//
+//===-- lib/FortranFloat128Math/log.cpp -------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/Float128Math/log10.cpp b/flang-rt/lib/FortranFloat128Math/log10.cpp
similarity index 90%
rename from FortranRuntime/lib/Runtime/Float128Math/log10.cpp
rename to flang-rt/lib/FortranFloat128Math/log10.cpp
index 9a83f57b6c736d..af61f8762371b9 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/log10.cpp
+++ b/flang-rt/lib/FortranFloat128Math/log10.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/Float128Math/log10.cpp ----------------------*- C++ -*-===//
+//===-- lib/FortranFloat128Math/log10.cpp -----------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/Float128Math/lround.cpp b/flang-rt/lib/FortranFloat128Math/lround.cpp
similarity index 90%
rename from FortranRuntime/lib/Runtime/Float128Math/lround.cpp
rename to flang-rt/lib/FortranFloat128Math/lround.cpp
index 65546881157948..24278f1040e9e3 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/lround.cpp
+++ b/flang-rt/lib/FortranFloat128Math/lround.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/Float128Math/lround.cpp ---------------------*- C++ -*-===//
+//===-- lib/FortranFloat128Math/lround.cpp ----------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/Float128Math/math-entries.h b/flang-rt/lib/FortranFloat128Math/math-entries.h
similarity index 97%
rename from FortranRuntime/lib/Runtime/Float128Math/math-entries.h
rename to flang-rt/lib/FortranFloat128Math/math-entries.h
index 1449000820f00e..9b13c10836f877 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/math-entries.h
+++ b/flang-rt/lib/FortranFloat128Math/math-entries.h
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/Float128Math/math-entries.h -----------------*- C++ -*-===//
+//===-- lib/FortranFloat128Math/math-entries.h ------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -6,8 +6,8 @@
//
//===----------------------------------------------------------------------===//
-#ifndef FORTRAN_RUNTIME_FLOAT128MATH_MATH_ENTRIES_H_
-#define FORTRAN_RUNTIME_FLOAT128MATH_MATH_ENTRIES_H_
+#ifndef FORTRAN_FORTRANFLOAT128MATH_MATH_ENTRIES_H_
+#define FORTRAN_FORTRANFLOAT128MATH_MATH_ENTRIES_H_
#include "terminator.h"
#include "tools.h"
#include "flang/Common/float128.h"
@@ -222,4 +222,4 @@ DEFINE_SIMPLE_ALIAS(Yn, ynl)
} // namespace Fortran::runtime
-#endif /* FORTRAN_RUNTIME_FLOAT128MATH_MATH_ENTRIES_H_ */
+#endif /* FORTRAN_FORTRANFLOAT128MATH_MATH_ENTRIES_H_ */
diff --git a/FortranRuntime/lib/Runtime/Float128Math/mod-real.cpp b/flang-rt/lib/FortranFloat128Math/mod-real.cpp
similarity index 91%
rename from FortranRuntime/lib/Runtime/Float128Math/mod-real.cpp
rename to flang-rt/lib/FortranFloat128Math/mod-real.cpp
index e3b96d39e76ae6..b3c2b715b21995 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/mod-real.cpp
+++ b/flang-rt/lib/FortranFloat128Math/mod-real.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/Float128Math/mod-real.cpp -------------------*- C++ -*-===//
+//===-- lib/FortranFloat128Math/mod-real.cpp --------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/Float128Math/modulo-real.cpp b/flang-rt/lib/FortranFloat128Math/modulo-real.cpp
similarity index 91%
rename from FortranRuntime/lib/Runtime/Float128Math/modulo-real.cpp
rename to flang-rt/lib/FortranFloat128Math/modulo-real.cpp
index 8edf59e9f59dd4..f5e3cf8a259a73 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/modulo-real.cpp
+++ b/flang-rt/lib/FortranFloat128Math/modulo-real.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/Float128Math/modulo-real.cpp ----------------*- C++ -*-===//
+//===-- lib/FortranFloat128Math/modulo-real.cpp -----------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/Float128Math/nearest.cpp b/flang-rt/lib/FortranFloat128Math/nearest.cpp
similarity index 91%
rename from FortranRuntime/lib/Runtime/Float128Math/nearest.cpp
rename to flang-rt/lib/FortranFloat128Math/nearest.cpp
index 8b9f142d79ff93..eb34c2ddb6ab48 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/nearest.cpp
+++ b/flang-rt/lib/FortranFloat128Math/nearest.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/Float128Math/nearest.cpp --------------------*- C++ -*-===//
+//===-- lib/FortranFloat128Math/nearest.cpp ---------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/Float128Math/norm2.cpp b/flang-rt/lib/FortranFloat128Math/norm2.cpp
similarity index 94%
rename from FortranRuntime/lib/Runtime/Float128Math/norm2.cpp
rename to flang-rt/lib/FortranFloat128Math/norm2.cpp
index a0c26e40de0064..d000fde1bb0bea 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/norm2.cpp
+++ b/flang-rt/lib/FortranFloat128Math/norm2.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/Float128Math/norm2.cpp ----------------------*- C++ -*-===//
+//===-- lib/FortranFloat128Math/norm2.cpp -----------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/Float128Math/numeric-template-specs.h b/flang-rt/lib/FortranFloat128Math/numeric-template-specs.h
similarity index 84%
rename from FortranRuntime/lib/Runtime/Float128Math/numeric-template-specs.h
rename to flang-rt/lib/FortranFloat128Math/numeric-template-specs.h
index 2a843df2d1d861..f34ee5f4e3a8de 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/numeric-template-specs.h
+++ b/flang-rt/lib/FortranFloat128Math/numeric-template-specs.h
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/Float128Math/numeric-template-specs.h -------*- C++ -*-===//
+//===-- lib/FortranFloat128Math/numeric-template-specs.h --------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -6,8 +6,8 @@
//
//===----------------------------------------------------------------------===//
-#ifndef FORTRAN_RUNTIME_FLOAT128MATH_NUMERIC_TEMPLATE_SPECS_H_
-#define FORTRAN_RUNTIME_FLOAT128MATH_NUMERIC_TEMPLATE_SPECS_H_
+#ifndef FORTRAN_FORTRANFLOAT128MATH_NUMERIC_TEMPLATE_SPECS_H_
+#define FORTRAN_FORTRANFLOAT128MATH_NUMERIC_TEMPLATE_SPECS_H_
#include "math-entries.h"
#include "numeric-templates.h"
@@ -52,4 +52,4 @@ template <> struct SQRTTy<F128Type> {
};
} // namespace Fortran::runtime
-#endif /* FORTRAN_RUNTIME_FLOAT128MATH_NUMERIC_TEMPLATE_SPECS_H_ */
+#endif /* FORTRAN_FORTRANFLOAT128MATH_NUMERIC_TEMPLATE_SPECS_H_ */
diff --git a/FortranRuntime/lib/Runtime/Float128Math/pow.cpp b/flang-rt/lib/FortranFloat128Math/pow.cpp
similarity index 90%
rename from FortranRuntime/lib/Runtime/Float128Math/pow.cpp
rename to flang-rt/lib/FortranFloat128Math/pow.cpp
index c11978ca068f23..f5deb00a556f48 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/pow.cpp
+++ b/flang-rt/lib/FortranFloat128Math/pow.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/Float128Math/pow.cpp ------------------------*- C++ -*-===//
+//===-- lib/FortranFloat128Math/pow.cpp -------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/Float128Math/random.cpp b/flang-rt/lib/FortranFloat128Math/random.cpp
similarity index 91%
rename from FortranRuntime/lib/Runtime/Float128Math/random.cpp
rename to flang-rt/lib/FortranFloat128Math/random.cpp
index a9dc3c7a82b673..3a01c2c88b1d66 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/random.cpp
+++ b/flang-rt/lib/FortranFloat128Math/random.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/Float128Math/random.cpp ---------------------*- C++ -*-===//
+//===-- lib/FortranFloat128Math/random.cpp ----------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/Float128Math/round.cpp b/flang-rt/lib/FortranFloat128Math/round.cpp
similarity index 92%
rename from FortranRuntime/lib/Runtime/Float128Math/round.cpp
rename to flang-rt/lib/FortranFloat128Math/round.cpp
index 5a9366b3af4785..3453f4ea8a1a26 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/round.cpp
+++ b/flang-rt/lib/FortranFloat128Math/round.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/Float128Math/round.cpp ----------------------*- C++ -*-===//
+//===-- lib/FortranFloat128Math/round.cpp -----------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/Float128Math/rrspacing.cpp b/flang-rt/lib/FortranFloat128Math/rrspacing.cpp
similarity index 90%
rename from FortranRuntime/lib/Runtime/Float128Math/rrspacing.cpp
rename to flang-rt/lib/FortranFloat128Math/rrspacing.cpp
index 2c501b3512c215..0809815027f859 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/rrspacing.cpp
+++ b/flang-rt/lib/FortranFloat128Math/rrspacing.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/Float128Math/rrspacing.cpp ------------------*- C++ -*-===//
+//===-- lib/FortranFloat128Math/rrspacing.cpp -------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/Float128Math/scale.cpp b/flang-rt/lib/FortranFloat128Math/scale.cpp
similarity index 92%
rename from FortranRuntime/lib/Runtime/Float128Math/scale.cpp
rename to flang-rt/lib/FortranFloat128Math/scale.cpp
index 859c955b8114e0..37528330bfb115 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/scale.cpp
+++ b/flang-rt/lib/FortranFloat128Math/scale.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/Float128Math/scale.cpp ----------------------*- C++ -*-===//
+//===-- lib/FortranFloat128Math/scale.cpp -----------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/Float128Math/set-exponent.cpp b/flang-rt/lib/FortranFloat128Math/set-exponent.cpp
similarity index 90%
rename from FortranRuntime/lib/Runtime/Float128Math/set-exponent.cpp
rename to flang-rt/lib/FortranFloat128Math/set-exponent.cpp
index 52258182871a14..52f8f08f7003ef 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/set-exponent.cpp
+++ b/flang-rt/lib/FortranFloat128Math/set-exponent.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/Float128Math/set-exponent.cpp ---------------*- C++ -*-===//
+//===-- lib/FortranFloat128Math/set-exponent.cpp ----------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/Float128Math/sin.cpp b/flang-rt/lib/FortranFloat128Math/sin.cpp
similarity index 90%
rename from FortranRuntime/lib/Runtime/Float128Math/sin.cpp
rename to flang-rt/lib/FortranFloat128Math/sin.cpp
index 99aa4095c8cf1a..1a24e7c57ba469 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/sin.cpp
+++ b/flang-rt/lib/FortranFloat128Math/sin.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/Float128Math/sin.cpp ------------------------*- C++ -*-===//
+//===-- lib/FortranFloat128Math/sin.cpp -------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/Float128Math/sinh.cpp b/flang-rt/lib/FortranFloat128Math/sinh.cpp
similarity index 90%
rename from FortranRuntime/lib/Runtime/Float128Math/sinh.cpp
rename to flang-rt/lib/FortranFloat128Math/sinh.cpp
index a7dfe36737de43..7a4127cee970cd 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/sinh.cpp
+++ b/flang-rt/lib/FortranFloat128Math/sinh.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/Float128Math/sinh.cpp -----------------------*- C++ -*-===//
+//===-- lib/FortranFloat128Math/sinh.cpp ------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/Float128Math/spacing.cpp b/flang-rt/lib/FortranFloat128Math/spacing.cpp
similarity index 90%
rename from FortranRuntime/lib/Runtime/Float128Math/spacing.cpp
rename to flang-rt/lib/FortranFloat128Math/spacing.cpp
index 66a01851965840..d3ed077d5412dc 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/spacing.cpp
+++ b/flang-rt/lib/FortranFloat128Math/spacing.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/Float128Math/spacing.cpp --------------------*- C++ -*-===//
+//===-- lib/FortranFloat128Math/spacing.cpp ---------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/Float128Math/sqrt.cpp b/flang-rt/lib/FortranFloat128Math/sqrt.cpp
similarity index 90%
rename from FortranRuntime/lib/Runtime/Float128Math/sqrt.cpp
rename to flang-rt/lib/FortranFloat128Math/sqrt.cpp
index cbc1e503d50fd9..a9f5246f35388f 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/sqrt.cpp
+++ b/flang-rt/lib/FortranFloat128Math/sqrt.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/Float128Math/sqrt.cpp -----------------------*- C++ -*-===//
+//===-- lib/FortranFloat128Math/sqrt.cpp ------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/Float128Math/tan.cpp b/flang-rt/lib/FortranFloat128Math/tan.cpp
similarity index 90%
rename from FortranRuntime/lib/Runtime/Float128Math/tan.cpp
rename to flang-rt/lib/FortranFloat128Math/tan.cpp
index dbe4627f585f14..dc386c5be6ab74 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/tan.cpp
+++ b/flang-rt/lib/FortranFloat128Math/tan.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/Float128Math/tan.cpp ------------------------*- C++ -*-===//
+//===-- lib/FortranFloat128Math/tan.cpp -------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/Float128Math/tanh.cpp b/flang-rt/lib/FortranFloat128Math/tanh.cpp
similarity index 90%
rename from FortranRuntime/lib/Runtime/Float128Math/tanh.cpp
rename to flang-rt/lib/FortranFloat128Math/tanh.cpp
index 37e40966ced722..5f8af3f1cd8d77 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/tanh.cpp
+++ b/flang-rt/lib/FortranFloat128Math/tanh.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/Float128Math/tanh.cpp -----------------------*- C++ -*-===//
+//===-- lib/FortranFloat128Math/tanh.cpp ------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/Float128Math/tgamma.cpp b/flang-rt/lib/FortranFloat128Math/tgamma.cpp
similarity index 90%
rename from FortranRuntime/lib/Runtime/Float128Math/tgamma.cpp
rename to flang-rt/lib/FortranFloat128Math/tgamma.cpp
index 07a019c6d9971f..b1a42cdc5d0f41 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/tgamma.cpp
+++ b/flang-rt/lib/FortranFloat128Math/tgamma.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/Float128Math/tgamma.cpp ---------------------*- C++ -*-===//
+//===-- lib/FortranFloat128Math/tgamma.cpp ----------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/Float128Math/trunc.cpp b/flang-rt/lib/FortranFloat128Math/trunc.cpp
similarity index 91%
rename from FortranRuntime/lib/Runtime/Float128Math/trunc.cpp
rename to flang-rt/lib/FortranFloat128Math/trunc.cpp
index 9f38bdc18e73c4..455204ece3b2f6 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/trunc.cpp
+++ b/flang-rt/lib/FortranFloat128Math/trunc.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/Float128Math/trunc.cpp ----------------------*- C++ -*-===//
+//===-- lib/FortranFloat128Math/trunc.cpp -----------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/Float128Math/y0.cpp b/flang-rt/lib/FortranFloat128Math/y0.cpp
similarity index 90%
rename from FortranRuntime/lib/Runtime/Float128Math/y0.cpp
rename to flang-rt/lib/FortranFloat128Math/y0.cpp
index 6eaa3396e7ea07..58bd71105efea6 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/y0.cpp
+++ b/flang-rt/lib/FortranFloat128Math/y0.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/Float128Math/y0.cpp -------------------------*- C++ -*-===//
+//===-- lib/FortranFloat128Math/y0.cpp --------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/Float128Math/y1.cpp b/flang-rt/lib/FortranFloat128Math/y1.cpp
similarity index 90%
rename from FortranRuntime/lib/Runtime/Float128Math/y1.cpp
rename to flang-rt/lib/FortranFloat128Math/y1.cpp
index c9f48ea0e26546..5d7b48e276b6f9 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/y1.cpp
+++ b/flang-rt/lib/FortranFloat128Math/y1.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/Float128Math/y1.cpp -------------------------*- C++ -*-===//
+//===-- lib/FortranFloat128Math/y1.cpp --------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/Float128Math/yn.cpp b/flang-rt/lib/FortranFloat128Math/yn.cpp
similarity index 90%
rename from FortranRuntime/lib/Runtime/Float128Math/yn.cpp
rename to flang-rt/lib/FortranFloat128Math/yn.cpp
index 6bc5f4996a88d5..9f19861931d84c 100644
--- a/FortranRuntime/lib/Runtime/Float128Math/yn.cpp
+++ b/flang-rt/lib/FortranFloat128Math/yn.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/Float128Math/yn.cpp -------------------------*- C++ -*-===//
+//===-- lib/FortranFloat128Math/yn.cpp --------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Testing/CMakeLists.txt b/flang-rt/lib/Testing/CMakeLists.txt
similarity index 89%
rename from FortranRuntime/lib/Testing/CMakeLists.txt
rename to flang-rt/lib/Testing/CMakeLists.txt
index 41ad0d7314dd37..bdfca0ee9d3f23 100644
--- a/FortranRuntime/lib/Testing/CMakeLists.txt
+++ b/flang-rt/lib/Testing/CMakeLists.txt
@@ -11,7 +11,7 @@ file(GLOB_RECURSE public_headers
"${FLANG_SOURCE_DIR}/lib/Testing/*.h"
)
-add_fortranruntime_library(NonGTestTesting EXCLUDE_FROM_ALL LINK_TO_LLVM
+add_flangrt_library(NonGTestTesting EXCLUDE_FROM_ALL LINK_TO_LLVM
${FLANG_SOURCE_DIR}/lib/Testing/testing.cpp
${FLANG_SOURCE_DIR}/lib/Testing/fp-testing.cpp
ADDITIONAL_HEADERS
diff --git a/FortranRuntime/lib/Runtime/CMakeLists.txt b/flang-rt/lib/flang_rt/CMakeLists.txt
similarity index 66%
rename from FortranRuntime/lib/Runtime/CMakeLists.txt
rename to flang-rt/lib/flang_rt/CMakeLists.txt
index 1db5520d5eaedf..860152c39c7204 100644
--- a/FortranRuntime/lib/Runtime/CMakeLists.txt
+++ b/flang-rt/lib/flang_rt/CMakeLists.txt
@@ -1,4 +1,4 @@
-#===-- lib/Runtime/CMakeLists.txt ------------------------------------------===#
+#===-- lib/flang_rt/CMakeLists.txt -----------------------------------------===#
#
# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
# See https://llvm.org/LICENSE.txt for license information.
@@ -6,7 +6,7 @@
#
#===------------------------------------------------------------------------===#
-include(AddFortranOffloadRuntime)
+include(AddFlangRTOffload)
# List of files that are buildable for all devices.
set(supported_sources
@@ -73,7 +73,7 @@ set(host_sources
exceptions.cpp
execute.cpp
extensions.cpp
- iso_fortran_env_impl.f90
+ ${FLANG_SOURCE_DIR}/module/iso_fortran_env_impl.f90
main.cpp
random.cpp
reduce.cpp
@@ -84,18 +84,17 @@ set(host_sources
)
file(GLOB_RECURSE public_headers
- "${FLANGRUNTIME_SOURCE_DIR}/include/flang/Runtime/*.h"
- "${FLANGRUNTIME_SOURCE_DIR}/include/flang/Common/*.h"
+ "${FLANGRT_SOURCE_DIR}/include/flang/Runtime/*.h"
+ "${FLANGRT_SOURCE_DIR}/include/flang/Common/*.h"
)
file(GLOB_RECURSE private_headers
- "${FLANGRUNTIME_SOURCE_DIR}/lib/Runtime/*.h"
- "${FLANGRUNTIME_SOURCE_DIR}/lib/Common/*.h"
+ "${FLANGRT_SOURCE_DIR}/lib/Runtime/*.h"
+ "${FLANGRT_SOURCE_DIR}/lib/Common/*.h"
)
-add_subdirectory(Float128Math)
-
+# Import changes from sibling FortranFloat128Math
get_target_property(f128_sources
FortranFloat128MathILib INTERFACE_SOURCES
)
@@ -117,23 +116,23 @@ endif ()
set(sources ${supported_sources} ${host_sources} ${f128_sources})
if (NOT WIN32)
- add_fortranruntime_library(FortranRuntime STATIC
+ add_flangrt_library(flang_rt STATIC
${sources}
INSTALL_WITH_TOOLCHAIN
ADDITIONAL_HEADERS ${public_headers} ${private_headers}
)
- enable_cuda_compilation(FortranRuntime "${supported_sources}")
+ enable_cuda_compilation(flang_rt "${supported_sources}")
enable_omp_offload_compilation("${supported_sources}")
- # For unittests that link to FortranRuntime. Should link to the static version
+ # For unittests that depend on flang_rt. Should link to the static version
# of the library.
- add_library(FortranRuntime.static ALIAS FortranRuntime)
- add_library(FortranRuntime.unittest ALIAS FortranRuntime)
+ add_library(flang_rt.static ALIAS flang_rt)
+ add_library(flang_rt.unittest ALIAS flang_rt)
else()
- function (add_win_fortranruntime_library libtype suffix msvc_lib)
- set(name "FortranRuntime.${suffix}")
- add_fortranruntime_library(${name} ${libtype}
+ function (add_win_flangrt_library libtype suffix msvc_lib)
+ set(name "flang_rt.${suffix}")
+ add_flangrt_library(${name} ${libtype}
${sources}
${ARGN}
INSTALL_WITH_TOOLCHAIN
@@ -148,32 +147,28 @@ else()
Fortran_MODULE_DIRECTORY "module.${suffix}"
)
- enable_cuda_compilation(FortranRuntime "${supported_sources}")
+ enable_cuda_compilation(${name} "${supported_sources}")
enable_omp_offload_compilation("${supported_sources}")
endfunction ()
- add_win_fortranruntime_library(STATIC static MultiThreaded)
- add_win_fortranruntime_library(STATIC static_dbg MultiThreadedDebug)
+ add_win_flangrt_library(STATIC static MultiThreaded)
+ add_win_flangrt_library(STATIC static_dbg MultiThreadedDebug)
# unittests link against LLVMSupport which is compiled with /MD
- add_win_fortranruntime_library(STATIC unittest MultiThreadedDLL EXCLUDE_FROM_ALL)
+ add_win_flangrt_library(STATIC unittest MultiThreadedDLL EXCLUDE_FROM_ALL)
# FIXME: Before DLL versions of the runtime can be used, exported definitions
# must be annotated with __declspec(dllexport).
- add_win_fortranruntime_library(SHARED dynamic MultiThreadedDLL)
- add_win_fortranruntime_library(SHARED dynamic_dbg MultiThreadedDebugDLL)
+ add_win_flangrt_library(SHARED dynamic MultiThreadedDLL)
+ add_win_flangrt_library(SHARED dynamic_dbg MultiThreadedDebugDLL)
# Target for building all versions of the runtime
- add_custom_target(FortranRuntime)
- set_target_properties(FortranRuntime PROPERTIES FOLDER "Fortran Runtime/Meta")
- add_dependencies(FortranRuntime
- FortranRuntime.static
- FortranRuntime.static_dbg
- FortranRuntime.dynamic
- FortranRuntime.dynamic_dbg
+ add_custom_target(flang_rt)
+ set_target_properties(flang_rt PROPERTIES FOLDER "Fortran Runtime/Meta")
+ add_dependencies(flang_rt
+ flang_rt.static
+ flang_rt.static_dbg
+ flang_rt.dynamic
+ flang_rt.dynamic_dbg
)
endif()
-
-if (FORTRANRUNTIME_ENABLE_CUF)
- add_subdirectory(CUDA)
-endif()
diff --git a/FortranRuntime/lib/Runtime/ISO_Fortran_binding.cpp b/flang-rt/lib/flang_rt/ISO_Fortran_binding.cpp
similarity index 98%
rename from FortranRuntime/lib/Runtime/ISO_Fortran_binding.cpp
rename to flang-rt/lib/flang_rt/ISO_Fortran_binding.cpp
index 997226b08e96a6..37bc1b9dfe426b 100644
--- a/FortranRuntime/lib/Runtime/ISO_Fortran_binding.cpp
+++ b/flang-rt/lib/flang_rt/ISO_Fortran_binding.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/ISO_Fortran_binding.cpp ---------------------*- C++ -*-===//
+//===-- lib/flang_rt/ISO_Fortran_binding.cpp --------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -9,9 +9,9 @@
// Implements the required interoperability API from ISO_Fortran_binding.h
// as specified in section 18.5.5 of Fortran 2018.
-#include "FortranRuntime/Runtime/descriptor.h"
-#include "FortranRuntime/Runtime/type-code.h"
#include "ISO_Fortran_util.h"
+#include "flang-rt/flang_rt/descriptor.h"
+#include "flang-rt/flang_rt/type-code.h"
#include "terminator.h"
#include "flang/Common/ISO_Fortran_binding_wrapper.h"
#include "flang/Runtime/pointer.h"
diff --git a/FortranRuntime/lib/Runtime/ISO_Fortran_util.h b/flang-rt/lib/flang_rt/ISO_Fortran_util.h
similarity index 91%
rename from FortranRuntime/lib/Runtime/ISO_Fortran_util.h
rename to flang-rt/lib/flang_rt/ISO_Fortran_util.h
index e418266dddccc7..a7bb1d21679063 100644
--- a/FortranRuntime/lib/Runtime/ISO_Fortran_util.h
+++ b/flang-rt/lib/flang_rt/ISO_Fortran_util.h
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/ISO_Fortran_util.h --------------------------*- C++ -*-===//
+//===-- lib/flang_rt/ISO_Fortran_util.h -------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -6,13 +6,13 @@
//
//===----------------------------------------------------------------------===//
-#ifndef FORTRAN_RUNTIME_ISO_FORTRAN_UTIL_H_
-#define FORTRAN_RUNTIME_ISO_FORTRAN_UTIL_H_
+#ifndef FORTRAN_FLANG_RT_ISO_FORTRAN_UTIL_H_
+#define FORTRAN_FLANG_RT_ISO_FORTRAN_UTIL_H_
// Internal utils for establishing CFI_cdesc_t descriptors.
-#include "FortranRuntime/Runtime/descriptor.h"
-#include "FortranRuntime/Runtime/type-code.h"
+#include "flang-rt/flang_rt/descriptor.h"
+#include "flang-rt/flang_rt/type-code.h"
#include "terminator.h"
#include "flang/Common/ISO_Fortran_binding_wrapper.h"
#include <cstdlib>
@@ -99,4 +99,4 @@ static inline RT_API_ATTRS void EstablishDescriptor(CFI_cdesc_t *descriptor,
}
}
} // namespace Fortran::ISO
-#endif /* FORTRAN_RUNTIME_ISO_FORTRAN_UTIL_H_ */
+#endif /* FORTRAN_FLANG_RT_ISO_FORTRAN_UTIL_H_ */
diff --git a/FortranRuntime/lib/Runtime/allocatable.cpp b/flang-rt/lib/flang_rt/allocatable.cpp
similarity index 98%
rename from FortranRuntime/lib/Runtime/allocatable.cpp
rename to flang-rt/lib/flang_rt/allocatable.cpp
index 4a3b89f4879c12..b9be74f8cb6f1b 100644
--- a/FortranRuntime/lib/Runtime/allocatable.cpp
+++ b/flang-rt/lib/flang_rt/allocatable.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/allocatable.cpp -----------------------------*- C++ -*-===//
+//===-- lib/flang_rt/allocatable.cpp ----------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -7,9 +7,9 @@
//===----------------------------------------------------------------------===//
#include "flang/Runtime/allocatable.h"
-#include "FortranRuntime/Runtime/descriptor.h"
#include "assign-impl.h"
#include "derived.h"
+#include "flang-rt/flang_rt/descriptor.h"
#include "stat.h"
#include "terminator.h"
#include "type-info.h"
diff --git a/FortranRuntime/lib/Runtime/allocator-registry.cpp b/flang-rt/lib/flang_rt/allocator-registry.cpp
similarity index 85%
rename from FortranRuntime/lib/Runtime/allocator-registry.cpp
rename to flang-rt/lib/flang_rt/allocator-registry.cpp
index 17883e5c54870d..a0e6fd8eadc856 100644
--- a/FortranRuntime/lib/Runtime/allocator-registry.cpp
+++ b/flang-rt/lib/flang_rt/allocator-registry.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/allocator-registry.cpp ----------------------*- C++ -*-===//
+//===-- lib/flang_rt/allocator-registry.cpp ---------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -6,16 +6,16 @@
//
//===----------------------------------------------------------------------===//
-#include "FortranRuntime/Runtime/allocator-registry.h"
+#include "flang-rt/flang_rt/allocator-registry.h"
#include "terminator.h"
namespace Fortran::runtime {
-#ifndef FLANG_RUNTIME_NO_GLOBAL_VAR_DEFS
+#ifndef FLANGRT_NO_GLOBAL_VAR_DEFS
RT_OFFLOAD_VAR_GROUP_BEGIN
RT_VAR_ATTRS AllocatorRegistry allocatorRegistry;
RT_OFFLOAD_VAR_GROUP_END
-#endif // FLANG_RUNTIME_NO_GLOBAL_VAR_DEFS
+#endif // FLANGRT_NO_GLOBAL_VAR_DEFS
RT_OFFLOAD_API_GROUP_BEGIN
RT_API_ATTRS void AllocatorRegistry::Register(int pos, Allocator_t allocator) {
diff --git a/FortranRuntime/lib/Runtime/array-constructor.cpp b/flang-rt/lib/flang_rt/array-constructor.cpp
similarity index 98%
rename from FortranRuntime/lib/Runtime/array-constructor.cpp
rename to flang-rt/lib/flang_rt/array-constructor.cpp
index 002dfba2c066f5..daaa1e3b04a3b6 100644
--- a/FortranRuntime/lib/Runtime/array-constructor.cpp
+++ b/flang-rt/lib/flang_rt/array-constructor.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/array-constructor.cpp -----------------------*- C++ -*-===//
+//===-- lib/flang_rt/array-constructor.cpp ----------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -6,9 +6,9 @@
//
//===----------------------------------------------------------------------===//
-#include "FortranRuntime/Runtime/array-constructor.h"
-#include "FortranRuntime/Runtime/descriptor.h"
+#include "flang-rt/flang_rt/array-constructor.h"
#include "derived.h"
+#include "flang-rt/flang_rt/descriptor.h"
#include "terminator.h"
#include "tools.h"
#include "type-info.h"
diff --git a/FortranRuntime/lib/Runtime/assign-impl.h b/flang-rt/lib/flang_rt/assign-impl.h
similarity index 100%
rename from FortranRuntime/lib/Runtime/assign-impl.h
rename to flang-rt/lib/flang_rt/assign-impl.h
diff --git a/FortranRuntime/lib/Runtime/assign.cpp b/flang-rt/lib/flang_rt/assign.cpp
similarity index 99%
rename from FortranRuntime/lib/Runtime/assign.cpp
rename to flang-rt/lib/flang_rt/assign.cpp
index 3a1486ace928a2..4916fc48888189 100644
--- a/FortranRuntime/lib/Runtime/assign.cpp
+++ b/flang-rt/lib/flang_rt/assign.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/assign.cpp ----------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/assign.cpp ---------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -7,9 +7,9 @@
//===----------------------------------------------------------------------===//
#include "flang/Runtime/assign.h"
-#include "FortranRuntime/Runtime/descriptor.h"
#include "assign-impl.h"
#include "derived.h"
+#include "flang-rt/flang_rt/descriptor.h"
#include "stat.h"
#include "terminator.h"
#include "tools.h"
diff --git a/FortranRuntime/lib/Runtime/buffer.cpp b/flang-rt/lib/flang_rt/buffer.cpp
similarity index 93%
rename from FortranRuntime/lib/Runtime/buffer.cpp
rename to flang-rt/lib/flang_rt/buffer.cpp
index ce78fe34503c46..9913cdf2e7ec40 100644
--- a/FortranRuntime/lib/Runtime/buffer.cpp
+++ b/flang-rt/lib/flang_rt/buffer.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/buffer.cpp ----------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/buffer.cpp ---------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/buffer.h b/flang-rt/lib/flang_rt/buffer.h
similarity index 97%
rename from FortranRuntime/lib/Runtime/buffer.h
rename to flang-rt/lib/flang_rt/buffer.h
index 52df0f10813c25..eb9b0712819a6c 100644
--- a/FortranRuntime/lib/Runtime/buffer.h
+++ b/flang-rt/lib/flang_rt/buffer.h
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/buffer.h ------------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/buffer.h -----------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -8,10 +8,10 @@
// External file buffering
-#ifndef FORTRAN_RUNTIME_BUFFER_H_
-#define FORTRAN_RUNTIME_BUFFER_H_
+#ifndef FORTRAN_FLANG_RT_BUFFER_H_
+#define FORTRAN_FLANG_RT_BUFFER_H_
-#include "FortranRuntime/Runtime/memory.h"
+#include "flang-rt/flang_rt/memory.h"
#include "io-error.h"
#include "flang/Runtime/freestanding-tools.h"
#include <algorithm>
@@ -221,4 +221,4 @@ template <typename STORE, std::size_t minBuffer = 65536> class FileFrame {
bool dirty_{false};
};
} // namespace Fortran::runtime::io
-#endif /* FORTRAN_RUNTIME_BUFFER_H_ */
+#endif /* FORTRAN_FLANG_RT_BUFFER_H_ */
diff --git a/FortranRuntime/lib/Runtime/character.cpp b/flang-rt/lib/flang_rt/character.cpp
similarity index 99%
rename from FortranRuntime/lib/Runtime/character.cpp
rename to flang-rt/lib/flang_rt/character.cpp
index 1f3edd6e80392e..aeb26098c399c8 100644
--- a/FortranRuntime/lib/Runtime/character.cpp
+++ b/flang-rt/lib/flang_rt/character.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/character.cpp -------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/character.cpp ------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -7,7 +7,7 @@
//===----------------------------------------------------------------------===//
#include "flang/Runtime/character.h"
-#include "FortranRuntime/Runtime/descriptor.h"
+#include "flang-rt/flang_rt/descriptor.h"
#include "terminator.h"
#include "tools.h"
#include "flang/Common/bit-population-count.h"
diff --git a/FortranRuntime/lib/Runtime/command.cpp b/flang-rt/lib/flang_rt/command.cpp
similarity index 98%
rename from FortranRuntime/lib/Runtime/command.cpp
rename to flang-rt/lib/flang_rt/command.cpp
index 64b2e62461dd58..5c7497518f3da3 100644
--- a/FortranRuntime/lib/Runtime/command.cpp
+++ b/flang-rt/lib/flang_rt/command.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/command.cpp ---------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/command.cpp --------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -7,8 +7,8 @@
//===----------------------------------------------------------------------===//
#include "flang/Runtime/command.h"
-#include "FortranRuntime/Runtime/descriptor.h"
#include "environment.h"
+#include "flang-rt/flang_rt/descriptor.h"
#include "stat.h"
#include "terminator.h"
#include "tools.h"
diff --git a/FortranRuntime/lib/Runtime/complex-powi.cpp b/flang-rt/lib/flang_rt/complex-powi.cpp
similarity index 98%
rename from FortranRuntime/lib/Runtime/complex-powi.cpp
rename to flang-rt/lib/flang_rt/complex-powi.cpp
index 2eacf56386b193..90013c117aea41 100644
--- a/FortranRuntime/lib/Runtime/complex-powi.cpp
+++ b/flang-rt/lib/flang_rt/complex-powi.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/complex-powi.cpp ----------------------------*- C++ -*-===//
+//===-- lib/flang_rt/complex-powi.cpp ---------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/complex-reduction.c b/flang-rt/lib/flang_rt/complex-reduction.c
similarity index 98%
rename from FortranRuntime/lib/Runtime/complex-reduction.c
rename to flang-rt/lib/flang_rt/complex-reduction.c
index 138174e9122b1c..23f1edb58b2d4e 100644
--- a/FortranRuntime/lib/Runtime/complex-reduction.c
+++ b/flang-rt/lib/flang_rt/complex-reduction.c
@@ -1,4 +1,4 @@
-/*===-- lib/Runtime/complex-reduction.c -----------------------------*- C -*-===
+/*===-- lib/flang_rt/complex-reduction.c ----------------------------*- C -*-===
*
* Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
* See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/complex-reduction.h b/flang-rt/lib/flang_rt/complex-reduction.h
similarity index 97%
rename from FortranRuntime/lib/Runtime/complex-reduction.h
rename to flang-rt/lib/flang_rt/complex-reduction.h
index e8e287215b7d97..b386b25cd0fff8 100644
--- a/FortranRuntime/lib/Runtime/complex-reduction.h
+++ b/flang-rt/lib/flang_rt/complex-reduction.h
@@ -1,4 +1,4 @@
-/*===-- lib/Runtime/complex-reduction.h -----------------------------*- C -*-===
+/*===-- lib/flang_rt/complex-reduction.h ----------------------------*- C -*-===
*
* Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
* See https://llvm.org/LICENSE.txt for license information.
@@ -11,8 +11,8 @@
* with C++ build compilers that don't support C's _Complex.
*/
-#ifndef FORTRAN_RUNTIME_COMPLEX_REDUCTION_H_
-#define FORTRAN_RUNTIME_COMPLEX_REDUCTION_H_
+#ifndef FORTRAN_FLANG_RT_COMPLEX_REDUCTION_H_
+#define FORTRAN_FLANG_RT_COMPLEX_REDUCTION_H_
#include "flang/Common/float128.h"
#include "flang/Runtime/entry-names.h"
@@ -155,4 +155,4 @@ void RTNAME(ReduceComplex16DimValue)(
REDUCE_DIM_ARGS(CFloat128ComplexType, CFloat128ComplexType_value_op));
#endif
-#endif /* FORTRAN_RUNTIME_COMPLEX_REDUCTION_H_ */
+#endif /* FORTRAN_FLANG_RT_COMPLEX_REDUCTION_H_ */
diff --git a/FortranRuntime/lib/Runtime/connection.cpp b/flang-rt/lib/flang_rt/connection.cpp
similarity index 97%
rename from FortranRuntime/lib/Runtime/connection.cpp
rename to flang-rt/lib/flang_rt/connection.cpp
index f9e91f1f193ba0..d623190f22f6f9 100644
--- a/FortranRuntime/lib/Runtime/connection.cpp
+++ b/flang-rt/lib/flang_rt/connection.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/connection.cpp ------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/connection.cpp -----------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/connection.h b/flang-rt/lib/flang_rt/connection.h
similarity index 96%
rename from FortranRuntime/lib/Runtime/connection.h
rename to flang-rt/lib/flang_rt/connection.h
index e078bfb9f0f7e7..f8b9b3f9debcda 100644
--- a/FortranRuntime/lib/Runtime/connection.h
+++ b/flang-rt/lib/flang_rt/connection.h
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/connection.h --------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/connection.h -------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -8,8 +8,8 @@
// Fortran I/O connection state (abstracted over internal & external units)
-#ifndef FORTRAN_RUNTIME_CONNECTION_H_
-#define FORTRAN_RUNTIME_CONNECTION_H_
+#ifndef FORTRAN_FLANG_RT_CONNECTION_H_
+#define FORTRAN_FLANG_RT_CONNECTION_H_
#include "format.h"
#include "flang/Common/optional.h"
@@ -124,4 +124,4 @@ class SavedPosition {
};
} // namespace Fortran::runtime::io
-#endif /* FORTRAN_RUNTIME_CONNECTION_H_ */
+#endif /* FORTRAN_FLANG_RT_CONNECTION_H_ */
diff --git a/FortranRuntime/lib/Runtime/copy.cpp b/flang-rt/lib/flang_rt/copy.cpp
similarity index 98%
rename from FortranRuntime/lib/Runtime/copy.cpp
rename to flang-rt/lib/flang_rt/copy.cpp
index 1049b925f68e5c..fc5c0af6b95851 100644
--- a/FortranRuntime/lib/Runtime/copy.cpp
+++ b/flang-rt/lib/flang_rt/copy.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/copy.cpp ------------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/copy.cpp -----------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -7,7 +7,7 @@
//===----------------------------------------------------------------------===//
#include "copy.h"
-#include "FortranRuntime/Runtime/descriptor.h"
+#include "flang-rt/flang_rt/descriptor.h"
#include "stack.h"
#include "terminator.h"
#include "type-info.h"
diff --git a/FortranRuntime/lib/Runtime/copy.h b/flang-rt/lib/flang_rt/copy.h
similarity index 78%
rename from FortranRuntime/lib/Runtime/copy.h
rename to flang-rt/lib/flang_rt/copy.h
index 3d179d0bec91a7..8f27c3a90b7847 100644
--- a/FortranRuntime/lib/Runtime/copy.h
+++ b/flang-rt/lib/flang_rt/copy.h
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/copy.h --------------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/copy.h -------------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -9,10 +9,10 @@
// Utilities that copy data in a type-aware fashion, allocating & duplicating
// allocatable/automatic components of derived types along the way.
-#ifndef FORTRAN_RUNTIME_COPY_H_
-#define FORTRAN_RUNTIME_COPY_H_
+#ifndef FORTRAN_FLANG_RT_COPY_H_
+#define FORTRAN_FLANG_RT_COPY_H_
-#include "FortranRuntime/Runtime/descriptor.h"
+#include "flang-rt/flang_rt/descriptor.h"
namespace Fortran::runtime {
@@ -22,4 +22,4 @@ RT_API_ATTRS void CopyElement(const Descriptor &to, const SubscriptValue toAt[],
const Descriptor &from, const SubscriptValue fromAt[], Terminator &);
} // namespace Fortran::runtime
-#endif /* FORTRAN_RUNTIME_COPY_H_ */
+#endif /* FORTRAN_FLANG_RT_COPY_H_ */
diff --git a/FortranRuntime/lib/Runtime/derived-api.cpp b/flang-rt/lib/flang_rt/derived-api.cpp
similarity index 98%
rename from FortranRuntime/lib/Runtime/derived-api.cpp
rename to flang-rt/lib/flang_rt/derived-api.cpp
index 176fc0849f25cf..faf24508981bae 100644
--- a/FortranRuntime/lib/Runtime/derived-api.cpp
+++ b/flang-rt/lib/flang_rt/derived-api.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/derived-api.cpp -----------------------------*- C++ -*-===//
+//===-- lib/flang_rt/derived-api.cpp ----------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -7,8 +7,8 @@
//===----------------------------------------------------------------------===//
#include "flang/Runtime/derived-api.h"
-#include "FortranRuntime/Runtime/descriptor.h"
#include "derived.h"
+#include "flang-rt/flang_rt/descriptor.h"
#include "terminator.h"
#include "tools.h"
#include "type-info.h"
diff --git a/FortranRuntime/lib/Runtime/derived.cpp b/flang-rt/lib/flang_rt/derived.cpp
similarity index 99%
rename from FortranRuntime/lib/Runtime/derived.cpp
rename to flang-rt/lib/flang_rt/derived.cpp
index cb2dca24bb4758..9b17a0d437375c 100644
--- a/FortranRuntime/lib/Runtime/derived.cpp
+++ b/flang-rt/lib/flang_rt/derived.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/derived.cpp ---------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/derived.cpp --------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -7,7 +7,7 @@
//===----------------------------------------------------------------------===//
#include "derived.h"
-#include "FortranRuntime/Runtime/descriptor.h"
+#include "flang-rt/flang_rt/descriptor.h"
#include "stat.h"
#include "terminator.h"
#include "tools.h"
diff --git a/FortranRuntime/lib/Runtime/derived.h b/flang-rt/lib/flang_rt/derived.h
similarity index 88%
rename from FortranRuntime/lib/Runtime/derived.h
rename to flang-rt/lib/flang_rt/derived.h
index e03e657f01cee9..3d6563f39c0663 100644
--- a/FortranRuntime/lib/Runtime/derived.h
+++ b/flang-rt/lib/flang_rt/derived.h
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/derived.h -----------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/derived.h ----------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -8,8 +8,8 @@
// Internal runtime utilities for derived type operations.
-#ifndef FORTRAN_RUNTIME_DERIVED_H_
-#define FORTRAN_RUNTIME_DERIVED_H_
+#ifndef FORTRAN_FLANG_RT_DERIVED_H_
+#define FORTRAN_FLANG_RT_DERIVED_H_
#include "flang/Common/api-attrs.h"
@@ -40,4 +40,4 @@ RT_API_ATTRS void Destroy(const Descriptor &, bool finalize,
RT_API_ATTRS bool HasDynamicComponent(const Descriptor &);
} // namespace Fortran::runtime
-#endif /* FORTRAN_RUNTIME_DERIVED_H_ */
+#endif /* FORTRAN_FLANG_RT_DERIVED_H_ */
diff --git a/FortranRuntime/lib/Runtime/descriptor-io.cpp b/flang-rt/lib/flang_rt/descriptor-io.cpp
similarity index 99%
rename from FortranRuntime/lib/Runtime/descriptor-io.cpp
rename to flang-rt/lib/flang_rt/descriptor-io.cpp
index 896fad16a67e8a..c5cfa4d7fc5972 100644
--- a/FortranRuntime/lib/Runtime/descriptor-io.cpp
+++ b/flang-rt/lib/flang_rt/descriptor-io.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/descriptor-io.cpp ---------------------------*- C++ -*-===//
+//===-- lib/flang_rt/descriptor-io.cpp --------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/descriptor-io.h b/flang-rt/lib/flang_rt/descriptor-io.h
similarity index 98%
rename from FortranRuntime/lib/Runtime/descriptor-io.h
rename to flang-rt/lib/flang_rt/descriptor-io.h
index 30d1bd48457728..2e48b4a0353e2a 100644
--- a/FortranRuntime/lib/Runtime/descriptor-io.h
+++ b/flang-rt/lib/flang_rt/descriptor-io.h
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/descriptor-io.h -----------------------------*- C++ -*-===//
+//===-- lib/flang_rt/descriptor-io.h ----------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -6,17 +6,17 @@
//
//===----------------------------------------------------------------------===//
-#ifndef FORTRAN_RUNTIME_DESCRIPTOR_IO_H_
-#define FORTRAN_RUNTIME_DESCRIPTOR_IO_H_
+#ifndef FORTRAN_FLANG_RT_DESCRIPTOR_IO_H_
+#define FORTRAN_FLANG_RT_DESCRIPTOR_IO_H_
// Implementation of I/O data list item transfers based on descriptors.
// (All I/O items come through here so that the code is exercised for test;
// some scalar I/O data transfer APIs could be changed to bypass their use
// of descriptors in the future for better efficiency.)
-#include "FortranRuntime/Runtime/descriptor.h"
#include "edit-input.h"
#include "edit-output.h"
+#include "flang-rt/flang_rt/descriptor.h"
#include "io-stmt.h"
#include "namelist.h"
#include "terminator.h"
@@ -608,4 +608,4 @@ static RT_API_ATTRS bool DescriptorIO(IoStatementState &io,
return false;
}
} // namespace Fortran::runtime::io::descr
-#endif /* FORTRAN_RUNTIME_DESCRIPTOR_IO_H_ */
+#endif /* FORTRAN_FLANG_RT_DESCRIPTOR_IO_H_ */
diff --git a/FortranRuntime/lib/Runtime/descriptor.cpp b/flang-rt/lib/flang_rt/descriptor.cpp
similarity index 98%
rename from FortranRuntime/lib/Runtime/descriptor.cpp
rename to flang-rt/lib/flang_rt/descriptor.cpp
index 96fd48eb6687a9..77536e760ad1cd 100644
--- a/FortranRuntime/lib/Runtime/descriptor.cpp
+++ b/flang-rt/lib/flang_rt/descriptor.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/descriptor.cpp ------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/descriptor.cpp -----------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -6,10 +6,10 @@
//
//===----------------------------------------------------------------------===//
-#include "FortranRuntime/Runtime/descriptor.h"
-#include "FortranRuntime/Runtime/allocator-registry.h"
+#include "flang-rt/flang_rt/descriptor.h"
#include "ISO_Fortran_util.h"
#include "derived.h"
+#include "flang-rt/flang_rt/allocator-registry.h"
#include "memory.h"
#include "stat.h"
#include "terminator.h"
diff --git a/FortranRuntime/lib/Runtime/dot-product.cpp b/flang-rt/lib/flang_rt/dot-product.cpp
similarity index 98%
rename from FortranRuntime/lib/Runtime/dot-product.cpp
rename to flang-rt/lib/flang_rt/dot-product.cpp
index 2992cbb1f39ad6..01e15ad331d7c4 100644
--- a/FortranRuntime/lib/Runtime/dot-product.cpp
+++ b/flang-rt/lib/flang_rt/dot-product.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/dot-product.cpp -----------------------------*- C++ -*-===//
+//===-- lib/flang_rt/dot-product.cpp ----------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -6,7 +6,7 @@
//
//===----------------------------------------------------------------------===//
-#include "FortranRuntime/Runtime/descriptor.h"
+#include "flang-rt/flang_rt/descriptor.h"
#include "float.h"
#include "terminator.h"
#include "tools.h"
diff --git a/FortranRuntime/lib/Runtime/edit-input.cpp b/flang-rt/lib/flang_rt/edit-input.cpp
similarity index 99%
rename from FortranRuntime/lib/Runtime/edit-input.cpp
rename to flang-rt/lib/flang_rt/edit-input.cpp
index 6ebb0e7aca4ade..9e3f102cf86684 100644
--- a/FortranRuntime/lib/Runtime/edit-input.cpp
+++ b/flang-rt/lib/flang_rt/edit-input.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/edit-input.cpp ------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/edit-input.cpp -----------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/edit-input.h b/flang-rt/lib/flang_rt/edit-input.h
similarity index 90%
rename from FortranRuntime/lib/Runtime/edit-input.h
rename to flang-rt/lib/flang_rt/edit-input.h
index f88f6daa47be79..59f601afa306a3 100644
--- a/FortranRuntime/lib/Runtime/edit-input.h
+++ b/flang-rt/lib/flang_rt/edit-input.h
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/edit-input.h --------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/edit-input.h -------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -6,8 +6,8 @@
//
//===----------------------------------------------------------------------===//
-#ifndef FORTRAN_RUNTIME_EDIT_INPUT_H_
-#define FORTRAN_RUNTIME_EDIT_INPUT_H_
+#ifndef FORTRAN_FLANG_RT_EDIT_INPUT_H_
+#define FORTRAN_FLANG_RT_EDIT_INPUT_H_
#include "format.h"
#include "io-stmt.h"
@@ -50,4 +50,4 @@ extern template RT_API_ATTRS bool EditCharacterInput(
IoStatementState &, const DataEdit &, char32_t *, std::size_t);
} // namespace Fortran::runtime::io
-#endif /* FORTRAN_RUNTIME_EDIT_INPUT_H_ */
+#endif /* FORTRAN_FLANG_RT_EDIT_INPUT_H_ */
diff --git a/FortranRuntime/lib/Runtime/edit-output.cpp b/flang-rt/lib/flang_rt/edit-output.cpp
similarity index 99%
rename from FortranRuntime/lib/Runtime/edit-output.cpp
rename to flang-rt/lib/flang_rt/edit-output.cpp
index ccaf8085f016fd..2e353f1ad80a21 100644
--- a/FortranRuntime/lib/Runtime/edit-output.cpp
+++ b/flang-rt/lib/flang_rt/edit-output.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/edit-output.cpp -----------------------------*- C++ -*-===//
+//===-- lib/flang_rt/edit-output.cpp ----------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/edit-output.h b/flang-rt/lib/flang_rt/edit-output.h
similarity index 96%
rename from FortranRuntime/lib/Runtime/edit-output.h
rename to flang-rt/lib/flang_rt/edit-output.h
index 7e6c6cdedde3ac..325658b4a25dc6 100644
--- a/FortranRuntime/lib/Runtime/edit-output.h
+++ b/flang-rt/lib/flang_rt/edit-output.h
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/edit-output.h -------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/edit-output.h ------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -6,8 +6,8 @@
//
//===----------------------------------------------------------------------===//
-#ifndef FORTRAN_RUNTIME_EDIT_OUTPUT_H_
-#define FORTRAN_RUNTIME_EDIT_OUTPUT_H_
+#ifndef FORTRAN_FLANG_RT_EDIT_OUTPUT_H_
+#define FORTRAN_FLANG_RT_EDIT_OUTPUT_H_
// Output data editing templates implementing the FORMAT data editing
// descriptors E, EN, ES, EX, D, F, and G for REAL data (and COMPLEX
@@ -138,4 +138,4 @@ extern template class RealOutputEditing<10>;
extern template class RealOutputEditing<16>;
} // namespace Fortran::runtime::io
-#endif /* FORTRAN_RUNTIME_EDIT_OUTPUT_H_ */
+#endif /* FORTRAN_FLANG_RT_EDIT_OUTPUT_H_ */
diff --git a/FortranRuntime/lib/Runtime/emit-encoded.h b/flang-rt/lib/flang_rt/emit-encoded.h
similarity index 94%
rename from FortranRuntime/lib/Runtime/emit-encoded.h
rename to flang-rt/lib/flang_rt/emit-encoded.h
index 11163a41720795..87216e5808a286 100644
--- a/FortranRuntime/lib/Runtime/emit-encoded.h
+++ b/flang-rt/lib/flang_rt/emit-encoded.h
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/emit-encoded.h ------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/emit-encoded.h -----------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -8,8 +8,8 @@
// Templates for emitting CHARACTER values with conversion
-#ifndef FORTRAN_RUNTIME_EMIT_ENCODED_H_
-#define FORTRAN_RUNTIME_EMIT_ENCODED_H_
+#ifndef FORTRAN_FLANG_RT_EMIT_ENCODED_H_
+#define FORTRAN_FLANG_RT_EMIT_ENCODED_H_
#include "connection.h"
#include "environment.h"
@@ -114,4 +114,4 @@ RT_API_ATTRS bool EmitRepeated(CONTEXT &to, char ch, std::size_t n) {
}
} // namespace Fortran::runtime::io
-#endif /* FORTRAN_RUNTIME_EMIT_ENCODED_H_ */
+#endif /* FORTRAN_FLANG_RT_EMIT_ENCODED_H_ */
diff --git a/FortranRuntime/lib/Runtime/environment-default-list.h b/flang-rt/lib/flang_rt/environment-default-list.h
similarity index 100%
rename from FortranRuntime/lib/Runtime/environment-default-list.h
rename to flang-rt/lib/flang_rt/environment-default-list.h
diff --git a/FortranRuntime/lib/Runtime/environment.cpp b/flang-rt/lib/flang_rt/environment.cpp
similarity index 96%
rename from FortranRuntime/lib/Runtime/environment.cpp
rename to flang-rt/lib/flang_rt/environment.cpp
index 272914877988a5..a9447815efeeaf 100644
--- a/FortranRuntime/lib/Runtime/environment.cpp
+++ b/flang-rt/lib/flang_rt/environment.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/environment.cpp -----------------------------*- C++ -*-===//
+//===-- lib/flang_rt/environment.cpp ----------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -23,11 +23,11 @@ extern char **environ;
namespace Fortran::runtime {
-#ifndef FLANG_RUNTIME_NO_GLOBAL_VAR_DEFS
+#ifndef FLANGRT_NO_GLOBAL_VAR_DEFS
RT_OFFLOAD_VAR_GROUP_BEGIN
RT_VAR_ATTRS ExecutionEnvironment executionEnvironment;
RT_OFFLOAD_VAR_GROUP_END
-#endif // FLANG_RUNTIME_NO_GLOBAL_VAR_DEFS
+#endif // FLANGRT_NO_GLOBAL_VAR_DEFS
static void SetEnvironmentDefaults(const EnvironmentDefaultList *envDefaults) {
if (!envDefaults) {
diff --git a/FortranRuntime/lib/Runtime/environment.h b/flang-rt/lib/flang_rt/environment.h
similarity index 91%
rename from FortranRuntime/lib/Runtime/environment.h
rename to flang-rt/lib/flang_rt/environment.h
index 7d10b3a2b934bf..125c9b39528b94 100644
--- a/FortranRuntime/lib/Runtime/environment.h
+++ b/flang-rt/lib/flang_rt/environment.h
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/environment.h -------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/environment.h ------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -6,8 +6,8 @@
//
//===----------------------------------------------------------------------===//
-#ifndef FORTRAN_RUNTIME_ENVIRONMENT_H_
-#define FORTRAN_RUNTIME_ENVIRONMENT_H_
+#ifndef FORTRAN_FLANG_RT_ENVIRONMENT_H_
+#define FORTRAN_FLANG_RT_ENVIRONMENT_H_
#include "flang/Common/decimal.h"
#include "flang/Common/optional.h"
@@ -64,4 +64,4 @@ RT_OFFLOAD_VAR_GROUP_END
} // namespace Fortran::runtime
-#endif /* FORTRAN_RUNTIME_ENVIRONMENT_H_ */
+#endif /* FORTRAN_FLANG_RT_ENVIRONMENT_H_ */
diff --git a/FortranRuntime/lib/Runtime/exceptions.cpp b/flang-rt/lib/flang_rt/exceptions.cpp
similarity index 97%
rename from FortranRuntime/lib/Runtime/exceptions.cpp
rename to flang-rt/lib/flang_rt/exceptions.cpp
index 7739130ae2346a..9ad5fe6849b076 100644
--- a/FortranRuntime/lib/Runtime/exceptions.cpp
+++ b/flang-rt/lib/flang_rt/exceptions.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/exceptions.cpp ------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/exceptions.cpp -----------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/execute.cpp b/flang-rt/lib/flang_rt/execute.cpp
similarity index 98%
rename from FortranRuntime/lib/Runtime/execute.cpp
rename to flang-rt/lib/flang_rt/execute.cpp
index b333c61c8a59f4..d3d42a49737fed 100644
--- a/FortranRuntime/lib/Runtime/execute.cpp
+++ b/flang-rt/lib/flang_rt/execute.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/execute.cpp ---------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/execute.cpp --------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -7,8 +7,8 @@
//===----------------------------------------------------------------------===//
#include "flang/Runtime/execute.h"
-#include "FortranRuntime/Runtime/descriptor.h"
#include "environment.h"
+#include "flang-rt/flang_rt/descriptor.h"
#include "stat.h"
#include "terminator.h"
#include "tools.h"
diff --git a/FortranRuntime/lib/Runtime/extensions.cpp b/flang-rt/lib/flang_rt/extensions.cpp
similarity index 97%
rename from FortranRuntime/lib/Runtime/extensions.cpp
rename to flang-rt/lib/flang_rt/extensions.cpp
index bb25fe6ee9d886..4cd9791cd0e5cb 100644
--- a/FortranRuntime/lib/Runtime/extensions.cpp
+++ b/flang-rt/lib/flang_rt/extensions.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/extensions.cpp ------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/extensions.cpp -----------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -10,8 +10,8 @@
// extensions that will eventually be implemented in Fortran.
#include "flang/Runtime/extensions.h"
-#include "FortranRuntime/Runtime/descriptor.h"
-#include "FortranRuntime/Runtime/io-api-funcs.h"
+#include "flang-rt/flang_rt/descriptor.h"
+#include "flang-rt/flang_rt/io-api-funcs.h"
#include "terminator.h"
#include "tools.h"
#include "flang/Runtime/command.h"
diff --git a/FortranRuntime/lib/Runtime/external-unit.cpp b/flang-rt/lib/flang_rt/external-unit.cpp
similarity index 99%
rename from FortranRuntime/lib/Runtime/external-unit.cpp
rename to flang-rt/lib/flang_rt/external-unit.cpp
index f5fa2c31dafc4e..1942cc1ff4daec 100644
--- a/FortranRuntime/lib/Runtime/external-unit.cpp
+++ b/flang-rt/lib/flang_rt/external-unit.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/external-unit.cpp ---------------------------*- C++ -*-===//
+//===-- lib/flang_rt/external-unit.cpp --------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/extrema.cpp b/flang-rt/lib/flang_rt/extrema.cpp
similarity index 99%
rename from FortranRuntime/lib/Runtime/extrema.cpp
rename to flang-rt/lib/flang_rt/extrema.cpp
index be9da63d7bd6b8..7a230afc4190c6 100644
--- a/FortranRuntime/lib/Runtime/extrema.cpp
+++ b/flang-rt/lib/flang_rt/extrema.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/extrema.cpp ---------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/extrema.cpp --------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/file.cpp b/flang-rt/lib/flang_rt/file.cpp
similarity index 99%
rename from FortranRuntime/lib/Runtime/file.cpp
rename to flang-rt/lib/flang_rt/file.cpp
index de52dafd12df9a..d98c8afeca3514 100644
--- a/FortranRuntime/lib/Runtime/file.cpp
+++ b/flang-rt/lib/flang_rt/file.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/file.cpp ------------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/file.cpp -----------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -7,7 +7,7 @@
//===----------------------------------------------------------------------===//
#include "file.h"
-#include "FortranRuntime/Runtime/memory.h"
+#include "flang-rt/flang_rt/memory.h"
#include "tools.h"
#include "flang/Runtime/magic-numbers.h"
#include <algorithm>
diff --git a/FortranRuntime/lib/Runtime/file.h b/flang-rt/lib/flang_rt/file.h
similarity index 94%
rename from FortranRuntime/lib/Runtime/file.h
rename to flang-rt/lib/flang_rt/file.h
index 60ddf2a2741610..b4068e3dce0d14 100644
--- a/FortranRuntime/lib/Runtime/file.h
+++ b/flang-rt/lib/flang_rt/file.h
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/file.h --------------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/file.h -------------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -8,10 +8,10 @@
// Raw system I/O wrappers
-#ifndef FORTRAN_RUNTIME_FILE_H_
-#define FORTRAN_RUNTIME_FILE_H_
+#ifndef FORTRAN_FLANG_RT_FILE_H_
+#define FORTRAN_FLANG_RT_FILE_H_
-#include "FortranRuntime/Runtime/memory.h"
+#include "flang-rt/flang_rt/memory.h"
#include "io-error.h"
#include "flang/Common/optional.h"
#include <cinttypes>
@@ -113,4 +113,4 @@ RT_API_ATTRS bool MayWrite(const char *path);
RT_API_ATTRS bool MayReadAndWrite(const char *path);
RT_API_ATTRS std::int64_t SizeInBytes(const char *path);
} // namespace Fortran::runtime::io
-#endif /* FORTRAN_RUNTIME_FILE_H_ */
+#endif /* FORTRAN_FLANG_RT_FILE_H_ */
diff --git a/FortranRuntime/lib/Runtime/findloc.cpp b/flang-rt/lib/flang_rt/findloc.cpp
similarity index 99%
rename from FortranRuntime/lib/Runtime/findloc.cpp
rename to flang-rt/lib/flang_rt/findloc.cpp
index da5fe0c0a0a467..8ee4c7c6cf7800 100644
--- a/FortranRuntime/lib/Runtime/findloc.cpp
+++ b/flang-rt/lib/flang_rt/findloc.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/findloc.cpp ---------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/findloc.cpp --------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/format-implementation.h b/flang-rt/lib/flang_rt/format-implementation.h
similarity index 98%
rename from FortranRuntime/lib/Runtime/format-implementation.h
rename to flang-rt/lib/flang_rt/format-implementation.h
index f17f0a2cb4bfd9..9b7ad6f2ce1fc6 100644
--- a/FortranRuntime/lib/Runtime/format-implementation.h
+++ b/flang-rt/lib/flang_rt/format-implementation.h
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/format-implementation.h ---------------------*- C++ -*-===//
+//===-- lib/flang_rt/format-implementation.h --------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -8,8 +8,8 @@
// Implements out-of-line member functions of template class FormatControl
-#ifndef FORTRAN_RUNTIME_FORMAT_IMPLEMENTATION_H_
-#define FORTRAN_RUNTIME_FORMAT_IMPLEMENTATION_H_
+#ifndef FORTRAN_FLANG_RT_FORMAT_IMPLEMENTATION_H_
+#define FORTRAN_FLANG_RT_FORMAT_IMPLEMENTATION_H_
#include "emit-encoded.h"
#include "format.h"
@@ -601,4 +601,4 @@ RT_API_ATTRS void FormatControl<CONTEXT>::Finish(Context &context) {
}
}
} // namespace Fortran::runtime::io
-#endif /* FORTRAN_RUNTIME_FORMAT_IMPLEMENTATION_H_ */
+#endif /* FORTRAN_FLANG_RT_FORMAT_IMPLEMENTATION_H_ */
diff --git a/FortranRuntime/lib/Runtime/format.cpp b/flang-rt/lib/flang_rt/format.cpp
similarity index 93%
rename from FortranRuntime/lib/Runtime/format.cpp
rename to flang-rt/lib/flang_rt/format.cpp
index 73a61f785c23b8..aedf04b8a40a1b 100644
--- a/FortranRuntime/lib/Runtime/format.cpp
+++ b/flang-rt/lib/flang_rt/format.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/format.cpp ----------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/format.cpp ---------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/format.h b/flang-rt/lib/flang_rt/format.h
similarity index 97%
rename from FortranRuntime/lib/Runtime/format.h
rename to flang-rt/lib/flang_rt/format.h
index 098a251a04d568..b41eec9564baaa 100644
--- a/FortranRuntime/lib/Runtime/format.h
+++ b/flang-rt/lib/flang_rt/format.h
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/format.h ------------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/format.h -----------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -8,8 +8,8 @@
// FORMAT string processing
-#ifndef FORTRAN_RUNTIME_FORMAT_H_
-#define FORTRAN_RUNTIME_FORMAT_H_
+#ifndef FORTRAN_FLANG_RT_FORMAT_H_
+#define FORTRAN_FLANG_RT_FORMAT_H_
#include "environment.h"
#include "io-error.h"
@@ -201,4 +201,4 @@ template <typename CONTEXT> class FormatControl {
Iteration stack_[maxMaxHeight];
};
} // namespace Fortran::runtime::io
-#endif /* FORTRAN_RUNTIME_FORMAT_H_ */
+#endif /* FORTRAN_FLANG_RT_FORMAT_H_ */
diff --git a/FortranRuntime/lib/Runtime/inquiry.cpp b/flang-rt/lib/flang_rt/inquiry.cpp
similarity index 96%
rename from FortranRuntime/lib/Runtime/inquiry.cpp
rename to flang-rt/lib/flang_rt/inquiry.cpp
index c24492754b4f43..b29ab4ee3c6663 100644
--- a/FortranRuntime/lib/Runtime/inquiry.cpp
+++ b/flang-rt/lib/flang_rt/inquiry.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/inquiry.cpp ---------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/inquiry.cpp --------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -10,8 +10,8 @@
// inquire about shape information of arrays -- LBOUND and SIZE.
#include "flang/Runtime/inquiry.h"
-#include "FortranRuntime/Runtime/descriptor.h"
#include "copy.h"
+#include "flang-rt/flang_rt/descriptor.h"
#include "terminator.h"
#include "tools.h"
#include <algorithm>
diff --git a/FortranRuntime/lib/Runtime/internal-unit.cpp b/flang-rt/lib/flang_rt/internal-unit.cpp
similarity index 98%
rename from FortranRuntime/lib/Runtime/internal-unit.cpp
rename to flang-rt/lib/flang_rt/internal-unit.cpp
index 4494de9dddc1a1..7775ded1e86d57 100644
--- a/FortranRuntime/lib/Runtime/internal-unit.cpp
+++ b/flang-rt/lib/flang_rt/internal-unit.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/internal-unit.cpp ---------------------------*- C++ -*-===//
+//===-- lib/flang_rt/internal-unit.cpp --------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -7,7 +7,7 @@
//===----------------------------------------------------------------------===//
#include "internal-unit.h"
-#include "FortranRuntime/Runtime/descriptor.h"
+#include "flang-rt/flang_rt/descriptor.h"
#include "io-error.h"
#include "flang/Runtime/freestanding-tools.h"
#include <algorithm>
diff --git a/FortranRuntime/lib/Runtime/internal-unit.h b/flang-rt/lib/flang_rt/internal-unit.h
similarity index 89%
rename from FortranRuntime/lib/Runtime/internal-unit.h
rename to flang-rt/lib/flang_rt/internal-unit.h
index 7579016f14646d..2f7d0220b84b37 100644
--- a/FortranRuntime/lib/Runtime/internal-unit.h
+++ b/flang-rt/lib/flang_rt/internal-unit.h
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/internal-unit.h -----------------------------*- C++ -*-===//
+//===-- lib/flang_rt/internal-unit.h ----------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -8,11 +8,11 @@
// Fortran internal I/O "units"
-#ifndef FORTRAN_RUNTIME_INTERNAL_UNIT_H_
-#define FORTRAN_RUNTIME_INTERNAL_UNIT_H_
+#ifndef FORTRAN_FLANG_RT_INTERNAL_UNIT_H_
+#define FORTRAN_FLANG_RT_INTERNAL_UNIT_H_
-#include "FortranRuntime/Runtime/descriptor.h"
#include "connection.h"
+#include "flang-rt/flang_rt/descriptor.h"
#include <cinttypes>
#include <type_traits>
@@ -56,4 +56,4 @@ template <Direction DIR> class InternalDescriptorUnit : public ConnectionState {
extern template class InternalDescriptorUnit<Direction::Output>;
extern template class InternalDescriptorUnit<Direction::Input>;
} // namespace Fortran::runtime::io
-#endif /* FORTRAN_RUNTIME_INTERNAL_UNIT_H_ */
+#endif /* FORTRAN_FLANG_RT_INTERNAL_UNIT_H_ */
diff --git a/FortranRuntime/lib/Runtime/io-api-common.h b/flang-rt/lib/flang_rt/io-api-common.h
similarity index 92%
rename from FortranRuntime/lib/Runtime/io-api-common.h
rename to flang-rt/lib/flang_rt/io-api-common.h
index fed1d11d6ce6a6..5ff1b57c73cda6 100644
--- a/FortranRuntime/lib/Runtime/io-api-common.h
+++ b/flang-rt/lib/flang_rt/io-api-common.h
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/io-api-common.h -----------------------------*- C++ -*-===//
+//===-- lib/flang_rt/io-api-common.h ----------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -6,10 +6,10 @@
//
//===----------------------------------------------------------------------===//
-#ifndef FORTRAN_RUNTIME_IO_API_COMMON_H_
-#define FORTRAN_RUNTIME_IO_API_COMMON_H_
+#ifndef FORTRAN_FLANG_RT_IO_API_COMMON_H_
+#define FORTRAN_FLANG_RT_IO_API_COMMON_H_
-#include "FortranRuntime/Runtime/io-api-funcs.h"
+#include "flang-rt/flang_rt/io-api-funcs.h"
#include "io-stmt.h"
#include "terminator.h"
#include "unit.h"
@@ -94,4 +94,4 @@ RT_API_ATTRS Cookie BeginExternalListIO(
}
} // namespace Fortran::runtime::io
-#endif /* FORTRAN_RUNTIME_IO_API_COMMON_H_ */
+#endif /* FORTRAN_FLANG_RT_IO_API_COMMON_H_ */
diff --git a/FortranRuntime/lib/Runtime/io-api-minimal.cpp b/flang-rt/lib/flang_rt/io-api-minimal.cpp
similarity index 97%
rename from FortranRuntime/lib/Runtime/io-api-minimal.cpp
rename to flang-rt/lib/flang_rt/io-api-minimal.cpp
index 8cde2333804572..92524430650126 100644
--- a/FortranRuntime/lib/Runtime/io-api-minimal.cpp
+++ b/flang-rt/lib/flang_rt/io-api-minimal.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/io-api-minimal.cpp --------------------------*- C++ -*-===//
+//===-- lib/flang_rt/io-api-minimal.cpp -------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -9,8 +9,8 @@
// Implements the subset of the I/O statement API needed for basic
// list-directed output (PRINT *) of intrinsic types.
-#include "FortranRuntime/Runtime/io-api-funcs.h"
#include "edit-output.h"
+#include "flang-rt/flang_rt/io-api-funcs.h"
#include "format.h"
#include "io-api-common.h"
#include "io-stmt.h"
diff --git a/FortranRuntime/lib/Runtime/io-api.cpp b/flang-rt/lib/flang_rt/io-api.cpp
similarity index 99%
rename from FortranRuntime/lib/Runtime/io-api.cpp
rename to flang-rt/lib/flang_rt/io-api.cpp
index fa95d68a004b51..0de1e24f71dac5 100644
--- a/FortranRuntime/lib/Runtime/io-api.cpp
+++ b/flang-rt/lib/flang_rt/io-api.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/io-api.cpp ----------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/io-api.cpp ---------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -13,13 +13,13 @@
// OutputReal{32,64}, OutputComplex{32,64}, OutputAscii, & EndIoStatement()
// are in runtime/io-api-minimal.cpp.
-#include "FortranRuntime/Runtime/descriptor.h"
-#include "FortranRuntime/Runtime/io-api-funcs.h"
-#include "FortranRuntime/Runtime/memory.h"
#include "descriptor-io.h"
#include "edit-input.h"
#include "edit-output.h"
#include "environment.h"
+#include "flang-rt/flang_rt/descriptor.h"
+#include "flang-rt/flang_rt/io-api-funcs.h"
+#include "flang-rt/flang_rt/memory.h"
#include "format.h"
#include "io-api-common.h"
#include "io-stmt.h"
diff --git a/FortranRuntime/lib/Runtime/io-error.cpp b/flang-rt/lib/flang_rt/io-error.cpp
similarity index 98%
rename from FortranRuntime/lib/Runtime/io-error.cpp
rename to flang-rt/lib/flang_rt/io-error.cpp
index 053667462058de..215c839d98cc35 100644
--- a/FortranRuntime/lib/Runtime/io-error.cpp
+++ b/flang-rt/lib/flang_rt/io-error.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/io-error.cpp --------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/io-error.cpp -------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/io-error.h b/flang-rt/lib/flang_rt/io-error.h
similarity index 90%
rename from FortranRuntime/lib/Runtime/io-error.h
rename to flang-rt/lib/flang_rt/io-error.h
index e2018cc2ea0ab1..7798d0830a1323 100644
--- a/FortranRuntime/lib/Runtime/io-error.h
+++ b/flang-rt/lib/flang_rt/io-error.h
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/io-error.h ----------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/io-error.h ---------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -12,11 +12,11 @@
// IOSTAT error codes are raw errno values augmented with values for
// Fortran-specific errors.
-#ifndef FORTRAN_RUNTIME_IO_ERROR_H_
-#define FORTRAN_RUNTIME_IO_ERROR_H_
+#ifndef FORTRAN_FLANG_RT_IO_ERROR_H_
+#define FORTRAN_FLANG_RT_IO_ERROR_H_
-#include "FortranRuntime/Runtime/iostat-funcs.h"
-#include "FortranRuntime/Runtime/memory.h"
+#include "flang-rt/flang_rt/iostat-funcs.h"
+#include "flang-rt/flang_rt/memory.h"
#include "terminator.h"
#include <cinttypes>
@@ -78,4 +78,4 @@ class IoErrorHandler : public Terminator {
};
} // namespace Fortran::runtime::io
-#endif /* FORTRAN_RUNTIME_IO_ERROR_H_ */
+#endif /* FORTRAN_FLANG_RT_IO_ERROR_H_ */
diff --git a/FortranRuntime/lib/Runtime/io-stmt.cpp b/flang-rt/lib/flang_rt/io-stmt.cpp
similarity index 99%
rename from FortranRuntime/lib/Runtime/io-stmt.cpp
rename to flang-rt/lib/flang_rt/io-stmt.cpp
index fe02e221671665..7c243a8c934a7a 100644
--- a/FortranRuntime/lib/Runtime/io-stmt.cpp
+++ b/flang-rt/lib/flang_rt/io-stmt.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/io-stmt.cpp ---------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/io-stmt.cpp --------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -7,9 +7,9 @@
//===----------------------------------------------------------------------===//
#include "io-stmt.h"
-#include "FortranRuntime/Runtime/memory.h"
#include "connection.h"
#include "emit-encoded.h"
+#include "flang-rt/flang_rt/memory.h"
#include "format.h"
#include "tools.h"
#include "unit.h"
diff --git a/FortranRuntime/lib/Runtime/io-stmt.h b/flang-rt/lib/flang_rt/io-stmt.h
similarity index 99%
rename from FortranRuntime/lib/Runtime/io-stmt.h
rename to flang-rt/lib/flang_rt/io-stmt.h
index 21746ff1966218..78bc42502be687 100644
--- a/FortranRuntime/lib/Runtime/io-stmt.h
+++ b/flang-rt/lib/flang_rt/io-stmt.h
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/io-stmt.h -----------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/io-stmt.h ----------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -8,13 +8,13 @@
// Representations of the state of an I/O statement in progress
-#ifndef FORTRAN_RUNTIME_IO_STMT_H_
-#define FORTRAN_RUNTIME_IO_STMT_H_
+#ifndef FORTRAN_FLANG_RT_IO_STMT_H_
+#define FORTRAN_FLANG_RT_IO_STMT_H_
-#include "FortranRuntime/Runtime/descriptor.h"
-#include "FortranRuntime/Runtime/io-api-funcs.h"
#include "connection.h"
#include "file.h"
+#include "flang-rt/flang_rt/descriptor.h"
+#include "flang-rt/flang_rt/io-api-funcs.h"
#include "format.h"
#include "internal-unit.h"
#include "io-error.h"
@@ -789,4 +789,4 @@ class ErroneousIoStatementState : public IoStatementBase {
};
} // namespace Fortran::runtime::io
-#endif /* FORTRAN_RUNTIME_IO_STMT_H_ */
+#endif /* FORTRAN_FLANG_RT_IO_STMT_H_ */
diff --git a/FortranRuntime/lib/Runtime/iostat.cpp b/flang-rt/lib/flang_rt/iostat.cpp
similarity index 97%
rename from FortranRuntime/lib/Runtime/iostat.cpp
rename to flang-rt/lib/flang_rt/iostat.cpp
index 8d769a09252fd6..39f4474dcf7229 100644
--- a/FortranRuntime/lib/Runtime/iostat.cpp
+++ b/flang-rt/lib/flang_rt/iostat.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/iostat.cpp ----------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/iostat.cpp ---------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -6,7 +6,7 @@
//
//===----------------------------------------------------------------------===//
-#include "FortranRuntime/Runtime/iostat-funcs.h"
+#include "flang-rt/flang_rt/iostat-funcs.h"
namespace Fortran::runtime::io {
RT_OFFLOAD_API_GROUP_BEGIN
diff --git a/FortranRuntime/lib/Runtime/lock.h b/flang-rt/lib/flang_rt/lock.h
similarity index 94%
rename from FortranRuntime/lib/Runtime/lock.h
rename to flang-rt/lib/flang_rt/lock.h
index 69ff6403736dae..955059a711c47d 100644
--- a/FortranRuntime/lib/Runtime/lock.h
+++ b/flang-rt/lib/flang_rt/lock.h
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/lock.h --------------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/lock.h -------------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -8,8 +8,8 @@
// Wraps a mutex
-#ifndef FORTRAN_RUNTIME_LOCK_H_
-#define FORTRAN_RUNTIME_LOCK_H_
+#ifndef FORTRAN_FLANG_RT_LOCK_H_
+#define FORTRAN_FLANG_RT_LOCK_H_
#include "terminator.h"
#include "tools.h"
@@ -113,4 +113,4 @@ class CriticalSection {
};
} // namespace Fortran::runtime
-#endif /* FORTRAN_RUNTIME_LOCK_H_ */
+#endif /* FORTRAN_FLANG_RT_LOCK_H_ */
diff --git a/FortranRuntime/lib/Runtime/main.cpp b/flang-rt/lib/flang_rt/main.cpp
similarity index 95%
rename from FortranRuntime/lib/Runtime/main.cpp
rename to flang-rt/lib/flang_rt/main.cpp
index 3fe985e524548d..71ed7f8319f60f 100644
--- a/FortranRuntime/lib/Runtime/main.cpp
+++ b/flang-rt/lib/flang_rt/main.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/main.cpp ------------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/main.cpp -----------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/matmul-transpose.cpp b/flang-rt/lib/flang_rt/matmul-transpose.cpp
similarity index 99%
rename from FortranRuntime/lib/Runtime/matmul-transpose.cpp
rename to flang-rt/lib/flang_rt/matmul-transpose.cpp
index ec5388e3fca793..2c7c4a89117f04 100644
--- a/FortranRuntime/lib/Runtime/matmul-transpose.cpp
+++ b/flang-rt/lib/flang_rt/matmul-transpose.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/matmul-transpose.cpp ------------------------*- C++ -*-===//
+//===-- lib/flang_rt/matmul-transpose.cpp -----------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -21,7 +21,7 @@
// to use the faster BLAS routines.
#include "flang/Runtime/matmul-transpose.h"
-#include "FortranRuntime/Runtime/descriptor.h"
+#include "flang-rt/flang_rt/descriptor.h"
#include "terminator.h"
#include "tools.h"
#include "flang/Common/optional.h"
diff --git a/FortranRuntime/lib/Runtime/matmul.cpp b/flang-rt/lib/flang_rt/matmul.cpp
similarity index 99%
rename from FortranRuntime/lib/Runtime/matmul.cpp
rename to flang-rt/lib/flang_rt/matmul.cpp
index 01be7f7c75bc45..8157911f34fd38 100644
--- a/FortranRuntime/lib/Runtime/matmul.cpp
+++ b/flang-rt/lib/flang_rt/matmul.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/matmul.cpp ----------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/matmul.cpp ---------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -20,7 +20,7 @@
// Places where BLAS routines could be called are marked as TODO items.
#include "flang/Runtime/matmul.h"
-#include "FortranRuntime/Runtime/descriptor.h"
+#include "flang-rt/flang_rt/descriptor.h"
#include "terminator.h"
#include "tools.h"
#include "flang/Common/optional.h"
diff --git a/FortranRuntime/lib/Runtime/memory.cpp b/flang-rt/lib/flang_rt/memory.cpp
similarity index 92%
rename from FortranRuntime/lib/Runtime/memory.cpp
rename to flang-rt/lib/flang_rt/memory.cpp
index a4cebf7edc6c64..66aa5be0cddc60 100644
--- a/FortranRuntime/lib/Runtime/memory.cpp
+++ b/flang-rt/lib/flang_rt/memory.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/memory.cpp ----------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/memory.cpp ---------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -6,7 +6,7 @@
//
//===----------------------------------------------------------------------===//
-#include "FortranRuntime/Runtime/memory.h"
+#include "flang-rt/flang_rt/memory.h"
#include "terminator.h"
#include "tools.h"
#include "flang/Runtime/freestanding-tools.h"
diff --git a/FortranRuntime/lib/Runtime/misc-intrinsic.cpp b/flang-rt/lib/flang_rt/misc-intrinsic.cpp
similarity index 97%
rename from FortranRuntime/lib/Runtime/misc-intrinsic.cpp
rename to flang-rt/lib/flang_rt/misc-intrinsic.cpp
index 91a3b136e009a5..00098c5b4e20b0 100644
--- a/FortranRuntime/lib/Runtime/misc-intrinsic.cpp
+++ b/flang-rt/lib/flang_rt/misc-intrinsic.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/misc-intrinsic.cpp --------------------------*- C++ -*-===//
+//===-- lib/flang_rt/misc-intrinsic.cpp -------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -7,7 +7,7 @@
//===----------------------------------------------------------------------===//
#include "flang/Runtime/misc-intrinsic.h"
-#include "FortranRuntime/Runtime/descriptor.h"
+#include "flang-rt/flang_rt/descriptor.h"
#include "terminator.h"
#include "tools.h"
#include "flang/Common/optional.h"
diff --git a/FortranRuntime/lib/Runtime/namelist.cpp b/flang-rt/lib/flang_rt/namelist.cpp
similarity index 99%
rename from FortranRuntime/lib/Runtime/namelist.cpp
rename to flang-rt/lib/flang_rt/namelist.cpp
index 46036549bcd316..92dbd33b7f9609 100644
--- a/FortranRuntime/lib/Runtime/namelist.cpp
+++ b/flang-rt/lib/flang_rt/namelist.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/namelist.cpp --------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/namelist.cpp -------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -7,9 +7,9 @@
//===----------------------------------------------------------------------===//
#include "namelist.h"
-#include "FortranRuntime/Runtime/io-api-funcs.h"
#include "descriptor-io.h"
#include "emit-encoded.h"
+#include "flang-rt/flang_rt/io-api-funcs.h"
#include "io-stmt.h"
#include <algorithm>
#include <cstring>
diff --git a/FortranRuntime/lib/Runtime/namelist.h b/flang-rt/lib/flang_rt/namelist.h
similarity index 91%
rename from FortranRuntime/lib/Runtime/namelist.h
rename to flang-rt/lib/flang_rt/namelist.h
index 04432f8a08cb97..519ec5dd2ddbc5 100644
--- a/FortranRuntime/lib/Runtime/namelist.h
+++ b/flang-rt/lib/flang_rt/namelist.h
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/namelist.h ----------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/namelist.h ---------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -8,8 +8,8 @@
// Defines the data structure used for NAMELIST I/O
-#ifndef FORTRAN_RUNTIME_NAMELIST_H_
-#define FORTRAN_RUNTIME_NAMELIST_H_
+#ifndef FORTRAN_FLANG_RT_NAMELIST_H_
+#define FORTRAN_FLANG_RT_NAMELIST_H_
#include "non-tbp-dio.h"
#include "flang/Common/api-attrs.h"
@@ -51,4 +51,4 @@ class NamelistGroup {
RT_API_ATTRS bool IsNamelistNameOrSlash(IoStatementState &);
} // namespace Fortran::runtime::io
-#endif /* FORTRAN_RUNTIME_NAMELIST_H_ */
+#endif /* FORTRAN_FLANG_RT_NAMELIST_H_ */
diff --git a/FortranRuntime/lib/Runtime/non-tbp-dio.cpp b/flang-rt/lib/flang_rt/non-tbp-dio.cpp
similarity index 93%
rename from FortranRuntime/lib/Runtime/non-tbp-dio.cpp
rename to flang-rt/lib/flang_rt/non-tbp-dio.cpp
index 9fa04397bc9610..3aade68cbb6d3e 100644
--- a/FortranRuntime/lib/Runtime/non-tbp-dio.cpp
+++ b/flang-rt/lib/flang_rt/non-tbp-dio.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/non-tbp-dio.cpp -----------------------------*- C++ -*-===//
+//===-- lib/flang_rt/non-tbp-dio.cpp ----------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/non-tbp-dio.h b/flang-rt/lib/flang_rt/non-tbp-dio.h
similarity index 91%
rename from FortranRuntime/lib/Runtime/non-tbp-dio.h
rename to flang-rt/lib/flang_rt/non-tbp-dio.h
index 426d5a92fd37d4..dfc96603a8eb1c 100644
--- a/FortranRuntime/lib/Runtime/non-tbp-dio.h
+++ b/flang-rt/lib/flang_rt/non-tbp-dio.h
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/non-tbp-dio.h -------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/non-tbp-dio.h ------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -19,8 +19,8 @@
// a containing scope has become inaccessible in a nested scope due
// to the use of "IMPORT, NONE" or "IMPORT, ONLY:".
-#ifndef FORTRAN_RUNTIME_NON_TBP_DIO_H_
-#define FORTRAN_RUNTIME_NON_TBP_DIO_H_
+#ifndef FORTRAN_FLANG_RT_NON_TBP_DIO_H_
+#define FORTRAN_FLANG_RT_NON_TBP_DIO_H_
#include "flang/Common/Fortran-consts.h"
#include "flang/Common/api-attrs.h"
@@ -53,4 +53,4 @@ struct NonTbpDefinedIoTable {
};
} // namespace Fortran::runtime::io
-#endif /* FORTRAN_RUNTIME_NON_TBP_DIO_H_ */
+#endif /* FORTRAN_FLANG_RT_NON_TBP_DIO_H_ */
diff --git a/FortranRuntime/lib/Runtime/numeric-templates.h b/flang-rt/lib/flang_rt/numeric-templates.h
similarity index 98%
rename from FortranRuntime/lib/Runtime/numeric-templates.h
rename to flang-rt/lib/flang_rt/numeric-templates.h
index 159b8b0b9579ad..0471b89f9153ad 100644
--- a/FortranRuntime/lib/Runtime/numeric-templates.h
+++ b/flang-rt/lib/flang_rt/numeric-templates.h
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/numeric-templates.h -------------------------*- C++ -*-===//
+//===-- lib/flang_rt/numeric-templates.h ------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -15,8 +15,8 @@
// for the data type corresponding to CppTypeFor<TypeCategory::Real, 16>
// on the target.
-#ifndef FORTRAN_RUNTIME_NUMERIC_TEMPLATES_H_
-#define FORTRAN_RUNTIME_NUMERIC_TEMPLATES_H_
+#ifndef FORTRAN_FLANG_RT_NUMERIC_TEMPLATES_H_
+#define FORTRAN_FLANG_RT_NUMERIC_TEMPLATES_H_
#include "terminator.h"
#include "tools.h"
@@ -465,4 +465,4 @@ template <typename T> inline RT_API_ATTRS T ErfcScaled(T arg) {
} // namespace Fortran::runtime
-#endif /* FORTRAN_RUNTIME_NUMERIC_TEMPLATES_H_ */
+#endif /* FORTRAN_FLANG_RT_NUMERIC_TEMPLATES_H_ */
diff --git a/FortranRuntime/lib/Runtime/numeric.cpp b/flang-rt/lib/flang_rt/numeric.cpp
similarity index 99%
rename from FortranRuntime/lib/Runtime/numeric.cpp
rename to flang-rt/lib/flang_rt/numeric.cpp
index b0f68a7fc81d29..4c2c0394ede188 100644
--- a/FortranRuntime/lib/Runtime/numeric.cpp
+++ b/flang-rt/lib/flang_rt/numeric.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/numeric.cpp ---------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/numeric.cpp --------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/pointer.cpp b/flang-rt/lib/flang_rt/pointer.cpp
similarity index 99%
rename from FortranRuntime/lib/Runtime/pointer.cpp
rename to flang-rt/lib/flang_rt/pointer.cpp
index fba9e639fa37a8..7479cd780709fa 100644
--- a/FortranRuntime/lib/Runtime/pointer.cpp
+++ b/flang-rt/lib/flang_rt/pointer.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/pointer.cpp ---------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/pointer.cpp --------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/product.cpp b/flang-rt/lib/flang_rt/product.cpp
similarity index 99%
rename from FortranRuntime/lib/Runtime/product.cpp
rename to flang-rt/lib/flang_rt/product.cpp
index e4a6e81bd0c508..cd0c4e9440ceb3 100644
--- a/FortranRuntime/lib/Runtime/product.cpp
+++ b/flang-rt/lib/flang_rt/product.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/product.cpp ---------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/product.cpp --------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/pseudo-unit.cpp b/flang-rt/lib/flang_rt/pseudo-unit.cpp
similarity index 98%
rename from FortranRuntime/lib/Runtime/pseudo-unit.cpp
rename to flang-rt/lib/flang_rt/pseudo-unit.cpp
index 62c6b1df5071c7..9ce39ca9307c9c 100644
--- a/FortranRuntime/lib/Runtime/pseudo-unit.cpp
+++ b/flang-rt/lib/flang_rt/pseudo-unit.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/pseudo-unit.cpp -----------------------------*- C++ -*-===//
+//===-- lib/flang_rt/pseudo-unit.cpp ----------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/ragged.cpp b/flang-rt/lib/flang_rt/ragged.cpp
similarity index 97%
rename from FortranRuntime/lib/Runtime/ragged.cpp
rename to flang-rt/lib/flang_rt/ragged.cpp
index 681a800e29dca7..df6469e9c5ba27 100644
--- a/FortranRuntime/lib/Runtime/ragged.cpp
+++ b/flang-rt/lib/flang_rt/ragged.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/ragged.cpp ----------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/ragged.cpp ---------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/random-templates.h b/flang-rt/lib/flang_rt/random-templates.h
similarity index 91%
rename from FortranRuntime/lib/Runtime/random-templates.h
rename to flang-rt/lib/flang_rt/random-templates.h
index 9faa9c7cfa7002..475c972a823226 100644
--- a/FortranRuntime/lib/Runtime/random-templates.h
+++ b/flang-rt/lib/flang_rt/random-templates.h
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/random-templates.h --------------------------*- C++ -*-===//
+//===-- lib/flang_rt/random-templates.h -------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -6,10 +6,10 @@
//
//===----------------------------------------------------------------------===//
-#ifndef FORTRAN_RUNTIME_RANDOM_TEMPLATES_H_
-#define FORTRAN_RUNTIME_RANDOM_TEMPLATES_H_
+#ifndef FORTRAN_FLANG_RT_RANDOM_TEMPLATES_H_
+#define FORTRAN_FLANG_RT_RANDOM_TEMPLATES_H_
-#include "FortranRuntime/Runtime/descriptor.h"
+#include "flang-rt/flang_rt/descriptor.h"
#include "lock.h"
#include "numeric-templates.h"
#include "flang/Common/optional.h"
@@ -85,4 +85,4 @@ inline void Generate(const Descriptor &harvest) {
} // namespace Fortran::runtime::random
-#endif /* FORTRAN_RUNTIME_RANDOM_TEMPLATES_H_ */
+#endif /* FORTRAN_FLANG_RT_RANDOM_TEMPLATES_H_ */
diff --git a/FortranRuntime/lib/Runtime/random.cpp b/flang-rt/lib/flang_rt/random.cpp
similarity index 98%
rename from FortranRuntime/lib/Runtime/random.cpp
rename to flang-rt/lib/flang_rt/random.cpp
index 911b59b508eb4f..9922ae87b084a8 100644
--- a/FortranRuntime/lib/Runtime/random.cpp
+++ b/flang-rt/lib/flang_rt/random.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/random.cpp ----------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/random.cpp ---------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -10,7 +10,7 @@
// RANDOM_SEED.
#include "flang/Runtime/random.h"
-#include "FortranRuntime/Runtime/descriptor.h"
+#include "flang-rt/flang_rt/descriptor.h"
#include "lock.h"
#include "random-templates.h"
#include "terminator.h"
diff --git a/FortranRuntime/lib/Runtime/reduce.cpp b/flang-rt/lib/flang_rt/reduce.cpp
similarity index 99%
rename from FortranRuntime/lib/Runtime/reduce.cpp
rename to flang-rt/lib/flang_rt/reduce.cpp
index a020ffef6fe6a5..6997d4c63065b9 100644
--- a/FortranRuntime/lib/Runtime/reduce.cpp
+++ b/flang-rt/lib/flang_rt/reduce.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/reduce.cpp ----------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/reduce.cpp ---------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -9,7 +9,7 @@
// REDUCE() implementation
#include "flang/Runtime/reduce.h"
-#include "FortranRuntime/Runtime/descriptor.h"
+#include "flang-rt/flang_rt/descriptor.h"
#include "reduction-templates.h"
#include "terminator.h"
#include "tools.h"
diff --git a/FortranRuntime/lib/Runtime/reduction-templates.h b/flang-rt/lib/flang_rt/reduction-templates.h
similarity index 98%
rename from FortranRuntime/lib/Runtime/reduction-templates.h
rename to flang-rt/lib/flang_rt/reduction-templates.h
index 714584ec613ba3..774b6f3c99850f 100644
--- a/FortranRuntime/lib/Runtime/reduction-templates.h
+++ b/flang-rt/lib/flang_rt/reduction-templates.h
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/reduction-templates.h -----------------------*- C++ -*-===//
+//===-- lib/flang_rt/reduction-templates.h ----------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -18,10 +18,10 @@
// * Character-valued reductions (MAXVAL & MINVAL) return arbitrary
// length results, dynamically allocated in a caller-supplied descriptor
-#ifndef FORTRAN_RUNTIME_REDUCTION_TEMPLATES_H_
-#define FORTRAN_RUNTIME_REDUCTION_TEMPLATES_H_
+#ifndef FORTRAN_FLANG_RT_REDUCTION_TEMPLATES_H_
+#define FORTRAN_FLANG_RT_REDUCTION_TEMPLATES_H_
-#include "FortranRuntime/Runtime/descriptor.h"
+#include "flang-rt/flang_rt/descriptor.h"
#include "numeric-templates.h"
#include "terminator.h"
#include "tools.h"
@@ -412,4 +412,4 @@ template <int KIND> struct Norm2Helper {
};
} // namespace Fortran::runtime
-#endif /* FORTRAN_RUNTIME_REDUCTION_TEMPLATES_H_ */
+#endif /* FORTRAN_FLANG_RT_REDUCTION_TEMPLATES_H_ */
diff --git a/FortranRuntime/lib/Runtime/reduction.cpp b/flang-rt/lib/flang_rt/reduction.cpp
similarity index 99%
rename from FortranRuntime/lib/Runtime/reduction.cpp
rename to flang-rt/lib/flang_rt/reduction.cpp
index 21930fee07ead7..f9d5f442e8928f 100644
--- a/FortranRuntime/lib/Runtime/reduction.cpp
+++ b/flang-rt/lib/flang_rt/reduction.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/reduction.cpp -------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/reduction.cpp ------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -14,7 +14,7 @@
// NORM2, MAXLOC, MINLOC, MAXVAL, and MINVAL are in extrema.cpp.
#include "flang/Runtime/reduction.h"
-#include "FortranRuntime/Runtime/descriptor.h"
+#include "flang-rt/flang_rt/descriptor.h"
#include "reduction-templates.h"
#include <cinttypes>
diff --git a/FortranRuntime/lib/Runtime/stack.h b/flang-rt/lib/flang_rt/stack.h
similarity index 94%
rename from FortranRuntime/lib/Runtime/stack.h
rename to flang-rt/lib/flang_rt/stack.h
index 36e2d0a103a887..4c1ab4e85ed71f 100644
--- a/FortranRuntime/lib/Runtime/stack.h
+++ b/flang-rt/lib/flang_rt/stack.h
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/stack.h -------------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/stack.h ------------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -10,10 +10,10 @@
// It is a list based stack with dynamic allocation/deallocation
// of the list nodes.
-#ifndef FORTRAN_RUNTIME_STACK_H_
-#define FORTRAN_RUNTIME_STACK_H_
+#ifndef FORTRAN_FLANG_RT_STACK_H_
+#define FORTRAN_FLANG_RT_STACK_H_
-#include "FortranRuntime/Runtime/memory.h"
+#include "flang-rt/flang_rt/memory.h"
#include "terminator.h"
namespace Fortran::runtime {
@@ -133,4 +133,4 @@ template <typename T, unsigned N = 0> class Stack : public StackStorage<T, N> {
Terminator &terminator_;
};
} // namespace Fortran::runtime
-#endif /* FORTRAN_RUNTIME_STACK_H_ */
+#endif /* FORTRAN_FLANG_RT_STACK_H_ */
diff --git a/FortranRuntime/lib/Runtime/stat.cpp b/flang-rt/lib/flang_rt/stat.cpp
similarity index 96%
rename from FortranRuntime/lib/Runtime/stat.cpp
rename to flang-rt/lib/flang_rt/stat.cpp
index 1af6c43102518b..77eefe3d1ac518 100644
--- a/FortranRuntime/lib/Runtime/stat.cpp
+++ b/flang-rt/lib/flang_rt/stat.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/stat.cpp ------------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/stat.cpp -----------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -7,7 +7,7 @@
//===----------------------------------------------------------------------===//
#include "stat.h"
-#include "FortranRuntime/Runtime/descriptor.h"
+#include "flang-rt/flang_rt/descriptor.h"
#include "terminator.h"
#include "tools.h"
diff --git a/FortranRuntime/lib/Runtime/stat.h b/flang-rt/lib/flang_rt/stat.h
similarity index 93%
rename from FortranRuntime/lib/Runtime/stat.h
rename to flang-rt/lib/flang_rt/stat.h
index eccd69024d726b..dbab381001d7d8 100644
--- a/FortranRuntime/lib/Runtime/stat.h
+++ b/flang-rt/lib/flang_rt/stat.h
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/stat.h --------------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/stat.h -------------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -9,8 +9,8 @@
// Defines the values returned by the runtime for STAT= specifiers
// on executable statements.
-#ifndef FORTRAN_RUNTIME_STAT_H_
-#define FORTRAN_RUNTIME_STAT_H_
+#ifndef FORTRAN_FLANG_RT_STAT_H_
+#define FORTRAN_FLANG_RT_STAT_H_
#include "flang/Common/ISO_Fortran_binding_wrapper.h"
#include "flang/Common/api-attrs.h"
#include "flang/Runtime/magic-numbers.h"
@@ -60,4 +60,4 @@ RT_API_ATTRS int ToErrmsg(const Descriptor *errmsg, int stat); // returns stat
RT_API_ATTRS int ReturnError(Terminator &, int stat,
const Descriptor *errmsg = nullptr, bool hasStat = false);
} // namespace Fortran::runtime
-#endif /* FORTRAN_RUNTIME_STAT_H_ */
+#endif /* FORTRAN_FLANG_RT_STAT_H_ */
diff --git a/FortranRuntime/lib/Runtime/stop.cpp b/flang-rt/lib/flang_rt/stop.cpp
similarity index 98%
rename from FortranRuntime/lib/Runtime/stop.cpp
rename to flang-rt/lib/flang_rt/stop.cpp
index 8465a53168e551..ea50d1ba4747ff 100644
--- a/FortranRuntime/lib/Runtime/stop.cpp
+++ b/flang-rt/lib/flang_rt/stop.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/stop.cpp ------------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/stop.cpp -----------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/sum.cpp b/flang-rt/lib/flang_rt/sum.cpp
similarity index 99%
rename from FortranRuntime/lib/Runtime/sum.cpp
rename to flang-rt/lib/flang_rt/sum.cpp
index 64982b9fd53690..3c225efe8a2788 100644
--- a/FortranRuntime/lib/Runtime/sum.cpp
+++ b/flang-rt/lib/flang_rt/sum.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/sum.cpp -------------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/sum.cpp ------------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/support.cpp b/flang-rt/lib/flang_rt/support.cpp
similarity index 93%
rename from FortranRuntime/lib/Runtime/support.cpp
rename to flang-rt/lib/flang_rt/support.cpp
index 798d502ba248e2..436ae6f87ae692 100644
--- a/FortranRuntime/lib/Runtime/support.cpp
+++ b/flang-rt/lib/flang_rt/support.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/support.cpp ---------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/support.cpp --------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -7,8 +7,8 @@
//===----------------------------------------------------------------------===//
#include "flang/Runtime/support.h"
-#include "FortranRuntime/Runtime/descriptor.h"
#include "ISO_Fortran_util.h"
+#include "flang-rt/flang_rt/descriptor.h"
#include "type-info.h"
namespace Fortran::runtime {
diff --git a/FortranRuntime/lib/Runtime/temporary-stack.cpp b/flang-rt/lib/flang_rt/temporary-stack.cpp
similarity index 97%
rename from FortranRuntime/lib/Runtime/temporary-stack.cpp
rename to flang-rt/lib/flang_rt/temporary-stack.cpp
index d8ff08e51cc211..f566e6d8a086ff 100644
--- a/FortranRuntime/lib/Runtime/temporary-stack.cpp
+++ b/flang-rt/lib/flang_rt/temporary-stack.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/temporary-stack.cpp -------------------------*- C++ -*-===//
+//===-- lib/flang_rt/temporary-stack.cpp ------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -10,8 +10,8 @@
// temporaries. For use in HLFIR lowering.
#include "flang/Runtime/temporary-stack.h"
-#include "FortranRuntime/Runtime/descriptor.h"
-#include "FortranRuntime/Runtime/memory.h"
+#include "flang-rt/flang_rt/descriptor.h"
+#include "flang-rt/flang_rt/memory.h"
#include "terminator.h"
#include "flang/Common/ISO_Fortran_binding_wrapper.h"
#include "flang/Runtime/assign.h"
diff --git a/FortranRuntime/lib/Runtime/terminator.cpp b/flang-rt/lib/flang_rt/terminator.cpp
similarity index 97%
rename from FortranRuntime/lib/Runtime/terminator.cpp
rename to flang-rt/lib/flang_rt/terminator.cpp
index 4146e28235511f..2e8d895a9025a6 100644
--- a/FortranRuntime/lib/Runtime/terminator.cpp
+++ b/flang-rt/lib/flang_rt/terminator.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/terminator.cpp ------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/terminator.cpp -----------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/terminator.h b/flang-rt/lib/flang_rt/terminator.h
similarity index 95%
rename from FortranRuntime/lib/Runtime/terminator.h
rename to flang-rt/lib/flang_rt/terminator.h
index f475658b0eab3d..61c6452a282d12 100644
--- a/FortranRuntime/lib/Runtime/terminator.h
+++ b/flang-rt/lib/flang_rt/terminator.h
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/terminator.h --------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/terminator.h -------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -8,8 +8,8 @@
// Termination of the image
-#ifndef FORTRAN_RUNTIME_TERMINATOR_H_
-#define FORTRAN_RUNTIME_TERMINATOR_H_
+#ifndef FORTRAN_FLANG_RT_TERMINATOR_H_
+#define FORTRAN_FLANG_RT_TERMINATOR_H_
#include "flang/Common/api-attrs.h"
#include <cstdarg>
@@ -121,4 +121,4 @@ namespace Fortran::runtime::io {
RT_API_ATTRS void FlushOutputOnCrash(const Terminator &);
}
-#endif /* FORTRAN_RUNTIME_TERMINATOR_H_ */
+#endif /* FORTRAN_FLANG_RT_TERMINATOR_H_ */
diff --git a/FortranRuntime/lib/Runtime/time-intrinsic.cpp b/flang-rt/lib/flang_rt/time-intrinsic.cpp
similarity index 98%
rename from FortranRuntime/lib/Runtime/time-intrinsic.cpp
rename to flang-rt/lib/flang_rt/time-intrinsic.cpp
index 15c42077c0afd5..6e2befbc30e9fa 100644
--- a/FortranRuntime/lib/Runtime/time-intrinsic.cpp
+++ b/flang-rt/lib/flang_rt/time-intrinsic.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/time-intrinsic.cpp --------------------------*- C++ -*-===//
+//===-- lib/flang_rt/time-intrinsic.cpp -------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -9,7 +9,7 @@
// Implements time-related intrinsic subroutines.
#include "flang/Runtime/time-intrinsic.h"
-#include "FortranRuntime/Runtime/descriptor.h"
+#include "flang-rt/flang_rt/descriptor.h"
#include "terminator.h"
#include "tools.h"
#include "flang/Runtime/cpp-type.h"
@@ -62,7 +62,7 @@ template <typename Unused = void> double GetCpuTime(fallback_implementation) {
#if defined __MINGW32__
// clock_gettime is implemented in the pthread library for MinGW.
-// Using it here would mean that all programs that link libFortranRuntime are
+// Using it here would mean that all programs that link libflang_rt are
// required to also link to pthread. Instead, don't use the function.
#undef CLOCKID_CPU_TIME
#undef CLOCKID_ELAPSED_TIME
diff --git a/FortranRuntime/lib/Runtime/tools.cpp b/flang-rt/lib/flang_rt/tools.cpp
similarity index 99%
rename from FortranRuntime/lib/Runtime/tools.cpp
rename to flang-rt/lib/flang_rt/tools.cpp
index d5c113a31fc501..228b781b207ddd 100644
--- a/FortranRuntime/lib/Runtime/tools.cpp
+++ b/flang-rt/lib/flang_rt/tools.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/tools.cpp -----------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/tools.cpp ----------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/tools.h b/flang-rt/lib/flang_rt/tools.h
similarity index 98%
rename from FortranRuntime/lib/Runtime/tools.h
rename to flang-rt/lib/flang_rt/tools.h
index 332ffac77f2595..9880d0e93f5a82 100644
--- a/FortranRuntime/lib/Runtime/tools.h
+++ b/flang-rt/lib/flang_rt/tools.h
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/tools.h -------------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/tools.h ------------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -6,11 +6,11 @@
//
//===----------------------------------------------------------------------===//
-#ifndef FORTRAN_RUNTIME_TOOLS_H_
-#define FORTRAN_RUNTIME_TOOLS_H_
+#ifndef FORTRAN_FLANG_RT_TOOLS_H_
+#define FORTRAN_FLANG_RT_TOOLS_H_
-#include "FortranRuntime/Runtime/descriptor.h"
-#include "FortranRuntime/Runtime/memory.h"
+#include "flang-rt/flang_rt/descriptor.h"
+#include "flang-rt/flang_rt/memory.h"
#include "stat.h"
#include "terminator.h"
#include "flang/Common/optional.h"
@@ -535,4 +535,4 @@ RT_API_ATTRS void CreatePartialReductionResult(Descriptor &result,
const char *intrinsic, TypeCode);
} // namespace Fortran::runtime
-#endif /* FORTRAN_RUNTIME_TOOLS_H_ */
+#endif /* FORTRAN_FLANG_RT_TOOLS_H_ */
diff --git a/FortranRuntime/lib/Runtime/transformational.cpp b/flang-rt/lib/flang_rt/transformational.cpp
similarity index 99%
rename from FortranRuntime/lib/Runtime/transformational.cpp
rename to flang-rt/lib/flang_rt/transformational.cpp
index 28dd02a28036de..f21c63fbfd7a1b 100644
--- a/FortranRuntime/lib/Runtime/transformational.cpp
+++ b/flang-rt/lib/flang_rt/transformational.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/transformational.cpp ------------------------*- C++ -*-===//
+//===-- lib/flang_rt/transformational.cpp -----------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -17,8 +17,8 @@
// of the standard but it more likely to conform with its intent.
#include "flang/Runtime/transformational.h"
-#include "FortranRuntime/Runtime/descriptor.h"
#include "copy.h"
+#include "flang-rt/flang_rt/descriptor.h"
#include "terminator.h"
#include "tools.h"
#include "flang/Common/float128.h"
diff --git a/FortranRuntime/lib/Runtime/type-code.cpp b/flang-rt/lib/flang_rt/type-code.cpp
similarity index 98%
rename from FortranRuntime/lib/Runtime/type-code.cpp
rename to flang-rt/lib/flang_rt/type-code.cpp
index 16f5497bc7a709..96fabf7ec7698f 100644
--- a/FortranRuntime/lib/Runtime/type-code.cpp
+++ b/flang-rt/lib/flang_rt/type-code.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/type-code.cpp -------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/type-code.cpp ------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -6,7 +6,7 @@
//
//===----------------------------------------------------------------------===//
-#include "FortranRuntime/Runtime/type-code.h"
+#include "flang-rt/flang_rt/type-code.h"
#include <cstdint>
namespace Fortran::runtime {
diff --git a/FortranRuntime/lib/Runtime/type-info.cpp b/flang-rt/lib/flang_rt/type-info.cpp
similarity index 99%
rename from FortranRuntime/lib/Runtime/type-info.cpp
rename to flang-rt/lib/flang_rt/type-info.cpp
index 19e9211fc063f4..031721833ddebc 100644
--- a/FortranRuntime/lib/Runtime/type-info.cpp
+++ b/flang-rt/lib/flang_rt/type-info.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/type-info.cpp -------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/type-info.cpp ------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/type-info.h b/flang-rt/lib/flang_rt/type-info.h
similarity index 98%
rename from FortranRuntime/lib/Runtime/type-info.h
rename to flang-rt/lib/flang_rt/type-info.h
index 150942547c2ee8..3b0b193d63379c 100644
--- a/FortranRuntime/lib/Runtime/type-info.h
+++ b/flang-rt/lib/flang_rt/type-info.h
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/type-info.h ---------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/type-info.h --------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -6,13 +6,13 @@
//
//===----------------------------------------------------------------------===//
-#ifndef FORTRAN_RUNTIME_TYPE_INFO_H_
-#define FORTRAN_RUNTIME_TYPE_INFO_H_
+#ifndef FORTRAN_FLANG_RT_TYPE_INFO_H_
+#define FORTRAN_FLANG_RT_TYPE_INFO_H_
// A C++ perspective of the derived type description schemata in
// flang/module/__fortran_type_info.f90.
-#include "FortranRuntime/Runtime/descriptor.h"
+#include "flang-rt/flang_rt/descriptor.h"
#include "terminator.h"
#include "flang/Common/Fortran-consts.h"
#include "flang/Common/bit-population-count.h"
@@ -321,4 +321,4 @@ class DerivedType {
};
} // namespace Fortran::runtime::typeInfo
-#endif /* FORTRAN_RUNTIME_TYPE_INFO_H_ */
+#endif /* FORTRAN_FLANG_RT_TYPE_INFO_H_ */
diff --git a/FortranRuntime/lib/Runtime/unit-map.cpp b/flang-rt/lib/flang_rt/unit-map.cpp
similarity index 98%
rename from FortranRuntime/lib/Runtime/unit-map.cpp
rename to flang-rt/lib/flang_rt/unit-map.cpp
index 93958be8df7ea5..0fda53ac071b27 100644
--- a/FortranRuntime/lib/Runtime/unit-map.cpp
+++ b/flang-rt/lib/flang_rt/unit-map.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/unit-map.cpp --------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/unit-map.cpp -------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/FortranRuntime/lib/Runtime/unit-map.h b/flang-rt/lib/flang_rt/unit-map.h
similarity index 93%
rename from FortranRuntime/lib/Runtime/unit-map.h
rename to flang-rt/lib/flang_rt/unit-map.h
index f37e2df7f3b15a..7215a5677f006b 100644
--- a/FortranRuntime/lib/Runtime/unit-map.h
+++ b/flang-rt/lib/flang_rt/unit-map.h
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/unit-map.h ----------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/unit-map.h ---------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -9,10 +9,10 @@
// Maps Fortran unit numbers to their ExternalFileUnit instances.
// A simple hash table with forward-linked chains per bucket.
-#ifndef FORTRAN_RUNTIME_UNIT_MAP_H_
-#define FORTRAN_RUNTIME_UNIT_MAP_H_
+#ifndef FORTRAN_FLANG_RT_UNIT_MAP_H_
+#define FORTRAN_FLANG_RT_UNIT_MAP_H_
-#include "FortranRuntime/Runtime/memory.h"
+#include "flang-rt/flang_rt/memory.h"
#include "lock.h"
#include "unit.h"
#include "flang/Common/fast-int-set.h"
@@ -100,4 +100,4 @@ class UnitMap {
int emergencyNewUnit_{maxNewUnits_}; // not recycled
};
} // namespace Fortran::runtime::io
-#endif /* FORTRAN_RUNTIME_UNIT_MAP_H_ */
+#endif /* FORTRAN_FLANG_RT_UNIT_MAP_H_ */
diff --git a/FortranRuntime/lib/Runtime/unit.cpp b/flang-rt/lib/flang_rt/unit.cpp
similarity index 99%
rename from FortranRuntime/lib/Runtime/unit.cpp
rename to flang-rt/lib/flang_rt/unit.cpp
index 496679ee8ce5f4..b5a4282faf22e5 100644
--- a/FortranRuntime/lib/Runtime/unit.cpp
+++ b/flang-rt/lib/flang_rt/unit.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/unit.cpp ------------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/unit.cpp -----------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -19,13 +19,13 @@
namespace Fortran::runtime::io {
-#ifndef FLANG_RUNTIME_NO_GLOBAL_VAR_DEFS
+#ifndef FLANGRT_NO_GLOBAL_VAR_DEFS
RT_OFFLOAD_VAR_GROUP_BEGIN
RT_VAR_ATTRS ExternalFileUnit *defaultInput{nullptr}; // unit 5
RT_VAR_ATTRS ExternalFileUnit *defaultOutput{nullptr}; // unit 6
RT_VAR_ATTRS ExternalFileUnit *errorOutput{nullptr}; // unit 0 extension
RT_OFFLOAD_VAR_GROUP_END
-#endif // FLANG_RUNTIME_NO_GLOBAL_VAR_DEFS
+#endif // FLANGRT_NO_GLOBAL_VAR_DEFS
RT_OFFLOAD_API_GROUP_BEGIN
diff --git a/FortranRuntime/lib/Runtime/unit.h b/flang-rt/lib/flang_rt/unit.h
similarity index 98%
rename from FortranRuntime/lib/Runtime/unit.h
rename to flang-rt/lib/flang_rt/unit.h
index 4a7444aedbe5b6..077a34833734ac 100644
--- a/FortranRuntime/lib/Runtime/unit.h
+++ b/flang-rt/lib/flang_rt/unit.h
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/unit.h --------------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/unit.h -------------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -8,14 +8,14 @@
// Fortran external I/O units
-#ifndef FORTRAN_RUNTIME_UNIT_H_
-#define FORTRAN_RUNTIME_UNIT_H_
+#ifndef FORTRAN_FLANG_RT_UNIT_H_
+#define FORTRAN_FLANG_RT_UNIT_H_
-#include "FortranRuntime/Runtime/memory.h"
#include "buffer.h"
#include "connection.h"
#include "environment.h"
#include "file.h"
+#include "flang-rt/flang_rt/memory.h"
#include "format.h"
#include "io-error.h"
#include "io-stmt.h"
@@ -291,4 +291,4 @@ class ChildIo {
};
} // namespace Fortran::runtime::io
-#endif /* FORTRAN_RUNTIME_UNIT_H_ */
+#endif /* FORTRAN_FLANG_RT_UNIT_H_ */
diff --git a/FortranRuntime/lib/Runtime/utf.cpp b/flang-rt/lib/flang_rt/utf.cpp
similarity index 96%
rename from FortranRuntime/lib/Runtime/utf.cpp
rename to flang-rt/lib/flang_rt/utf.cpp
index 635451153d39a6..860db5f2367d38 100644
--- a/FortranRuntime/lib/Runtime/utf.cpp
+++ b/flang-rt/lib/flang_rt/utf.cpp
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/utf.cpp -------------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/utf.cpp ------------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -10,7 +10,7 @@
namespace Fortran::runtime {
-#ifndef FLANG_RUNTIME_NO_GLOBAL_VAR_DEFS
+#ifndef FLANGRT_NO_GLOBAL_VAR_DEFS
// clang-format off
RT_OFFLOAD_VAR_GROUP_BEGIN
const RT_CONST_VAR_ATTRS std::uint8_t UTF8FirstByteTable[256]{
@@ -41,7 +41,7 @@ const RT_CONST_VAR_ATTRS std::uint8_t UTF8FirstByteTable[256]{
};
RT_OFFLOAD_VAR_GROUP_END
// clang-format on
-#endif // FLANG_RUNTIME_NO_GLOBAL_VAR_DEFS
+#endif // FLANGRT_NO_GLOBAL_VAR_DEFS
RT_OFFLOAD_API_GROUP_BEGIN
diff --git a/FortranRuntime/lib/Runtime/utf.h b/flang-rt/lib/flang_rt/utf.h
similarity index 94%
rename from FortranRuntime/lib/Runtime/utf.h
rename to flang-rt/lib/flang_rt/utf.h
index 35c03fd4cdded5..71dc7b05a77513 100644
--- a/FortranRuntime/lib/Runtime/utf.h
+++ b/flang-rt/lib/flang_rt/utf.h
@@ -1,4 +1,4 @@
-//===-- lib/Runtime/utf.h ---------------------------------------*- C++ -*-===//
+//===-- lib/flang_rt/utf.h --------------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -38,8 +38,8 @@
// standard maximum. However, we support extended forms up to 32 bits so that
// CHARACTER(KIND=4) can be abused to hold arbitrary 32-bit data.
-#ifndef FORTRAN_RUNTIME_UTF_H_
-#define FORTRAN_RUNTIME_UTF_H_
+#ifndef FORTRAN_FLANG_RT_UTF_H_
+#define FORTRAN_FLANG_RT_UTF_H_
#include "flang/Common/optional.h"
#include <cstddef>
@@ -70,4 +70,4 @@ RT_API_ATTRS Fortran::common::optional<char32_t> DecodeUTF8(const char *);
RT_API_ATTRS std::size_t EncodeUTF8(char *, char32_t);
} // namespace Fortran::runtime
-#endif /* FORTRAN_RUNTIME_UTF_H_ */
+#endif /* FORTRAN_FLANG_RT_UTF_H_ */
diff --git a/FortranRuntime/test/CMakeLists.txt b/flang-rt/test/CMakeLists.txt
similarity index 57%
rename from FortranRuntime/test/CMakeLists.txt
rename to flang-rt/test/CMakeLists.txt
index c10c487d48c410..be42717b2834f3 100644
--- a/FortranRuntime/test/CMakeLists.txt
+++ b/flang-rt/test/CMakeLists.txt
@@ -25,7 +25,7 @@ configure_lit_site_cfg(
${CMAKE_CURRENT_SOURCE_DIR}/lit.cfg.py
)
-if (TARGET FortranRuntimeUnitTests)
+if (TARGET FlangRTUnitTests)
configure_lit_site_cfg(
${CMAKE_CURRENT_SOURCE_DIR}/Unit/lit.site.cfg.py.in
${CMAKE_CURRENT_BINARY_DIR}/Unit/lit.site.cfg.py
@@ -41,29 +41,21 @@ if (TARGET FortranRuntimeUnitTests)
)
endif ()
-set(FORTRANRUNTIME_TEST_DEPENDS
- FortranRuntimeUnitTests
- FortranRuntime.static
+set(FLANGRT_TEST_DEPENDS
+ FlangRTUnitTests
+ flang_rt.unittest
)
-add_custom_target(FortranRuntime-test-depends)
-set_target_properties(FortranRuntime-test-depends PROPERTIES FOLDER "Fortran Runtime/Meta")
-add_dependencies(FortranRuntime-test-depends ${FORTRANRUNTIME_TEST_DEPENDS})
+add_custom_target(flang-rt-test-depends)
+set_target_properties(flang-rt-test-depends PROPERTIES FOLDER "Fortran Runtime/Meta")
+add_dependencies(flang-rt-test-depends ${FLANGRT_TEST_DEPENDS})
-add_lit_testsuite(check-FortranRuntime "Running the FortranRuntime regression tests"
+add_lit_testsuite(check-flang-rt "Running the flang-rt regression tests"
${CMAKE_CURRENT_BINARY_DIR}
- DEPENDS ${FORTRANRUNTIME_TEST_DEPENDS}
+ DEPENDS ${FLANGRT_TEST_DEPENDS}
)
-set_target_properties(check-FortranRuntime PROPERTIES FOLDER "Fortran Runtime/Meta")
+set_target_properties(check-flang-rt PROPERTIES FOLDER "Fortran Runtime/Meta")
-add_lit_testsuites(FORTRANRUNTIME ${CMAKE_CURRENT_SOURCE_DIR}
- DEPENDS ${FORTRANRUNTIME_TEST_DEPENDS})
-
-# To modify the default target triple for flang tests.
-if (DEFINED FLANG_TEST_TARGET_TRIPLE)
- if (NOT DEFINED LLVM_TARGET_TRIPLE_ENV OR LLVM_TARGET_TRIPLE_ENV STREQUAL "")
- message(FATAL_ERROR "LLVM_TARGET_TRIPLE_ENV must also be defined in order "
- "to use FLANG_TEST_TARGET_TRIPLE.")
- endif()
-endif()
+add_lit_testsuites(flang-rt ${CMAKE_CURRENT_SOURCE_DIR}
+ DEPENDS ${FLANGRT_TEST_DEPENDS})
diff --git a/FortranRuntime/test/Driver/ctofortran.f90 b/flang-rt/test/Driver/ctofortran.f90
similarity index 100%
rename from FortranRuntime/test/Driver/ctofortran.f90
rename to flang-rt/test/Driver/ctofortran.f90
diff --git a/FortranRuntime/test/Driver/exec.f90 b/flang-rt/test/Driver/exec.f90
similarity index 100%
rename from FortranRuntime/test/Driver/exec.f90
rename to flang-rt/test/Driver/exec.f90
diff --git a/FortranRuntime/test/NonGtestUnit/lit.cfg.py b/flang-rt/test/NonGtestUnit/lit.cfg.py
similarity index 75%
rename from FortranRuntime/test/NonGtestUnit/lit.cfg.py
rename to flang-rt/test/NonGtestUnit/lit.cfg.py
index f807f2825a1bc7..20e28b0d3b55fd 100644
--- a/FortranRuntime/test/NonGtestUnit/lit.cfg.py
+++ b/flang-rt/test/NonGtestUnit/lit.cfg.py
@@ -5,18 +5,18 @@
import lit.formats
# name: The name of this test suite.
-config.name = "FortranRuntime-OldUnit"
+config.name = "flang-rt-OldUnit"
# suffixes: A list of file extensions to treat as test files.
# On Windows, ".exe" also matches the GTests and will execited redundantly.
config.suffixes = [".test", ".exe"]
# test_source_root: The root path where unit test binaries are located.
-config.test_source_root = os.path.join(config.fortranruntime_binary_dir, "unittests")
+config.test_source_root = os.path.join(config.flangrt_binary_dir, "unittests")
# test_exec_root: The root path where tests should be run.
# lit writes a '.lit_test_times.txt' file into this directory.
-config.test_exec_root = config.fortranruntime_binary_test_dir
+config.test_exec_root = config.flangrt_binary_test_dir
# testFormat: The test format to use to interpret tests.
config.test_format = lit.formats.ExecutableTest()
diff --git a/flang-rt/test/NonGtestUnit/lit.site.cfg.py.in b/flang-rt/test/NonGtestUnit/lit.site.cfg.py.in
new file mode 100644
index 00000000000000..9dc4d2d5a1513f
--- /dev/null
+++ b/flang-rt/test/NonGtestUnit/lit.site.cfg.py.in
@@ -0,0 +1,14 @@
+ at LIT_SITE_CFG_IN_HEADER@
+
+import os
+
+config.llvm_tools_dir = "@LLVM_TOOLS_DIR@"
+config.flangrt_source_dir = "@FLANGRT_SOURCE_DIR@"
+config.flangrt_binary_dir = "@FLANGRT_BINARY_DIR@"
+config.flangrt_binary_test_dir = os.path.dirname(__file__)
+
+import lit.llvm
+lit.llvm.initialize(lit_config, config)
+
+# Let the main config do the real work.
+lit_config.load_config(config, os.path.join(config.flangrt_source_dir, 'test', 'NonGtestUnit', 'lit.cfg.py'))
diff --git a/FortranRuntime/test/Runtime/no-cpp-dep.c b/flang-rt/test/Runtime/no-cpp-dep.c
similarity index 87%
rename from FortranRuntime/test/Runtime/no-cpp-dep.c
rename to flang-rt/test/Runtime/no-cpp-dep.c
index 2cc5669a60d3a2..510816a07967ab 100644
--- a/FortranRuntime/test/Runtime/no-cpp-dep.c
+++ b/flang-rt/test/Runtime/no-cpp-dep.c
@@ -1,12 +1,12 @@
/*
This test makes sure that flang's runtime does not depend on the C++ runtime
-library. It tries to link this simple file against libFortranRuntime.a with
+library. It tries to link this simple file against libflang_rt.a with
a C compiler.
UNSUPPORTED: system-windows
-FIXME: This currently fails with CUDA-enabled FortranRuntime because it needs
- to link libcuda_rt.
+FIXME: This currently fails with CUDA-enabled flang-rt because it needs
+ to link libcudart.
RUN: %if system-aix %{ export OBJECT_MODE=64 %}
RUN: %cc -std=c99 %s -I%include %libruntime -lm \
diff --git a/FortranRuntime/test/Unit/lit.cfg.py b/flang-rt/test/Unit/lit.cfg.py
similarity index 73%
rename from FortranRuntime/test/Unit/lit.cfg.py
rename to flang-rt/test/Unit/lit.cfg.py
index 888fb3981916c8..e46a78584c0425 100644
--- a/FortranRuntime/test/Unit/lit.cfg.py
+++ b/flang-rt/test/Unit/lit.cfg.py
@@ -5,17 +5,17 @@
import lit.formats
# name: The name of this test suite.
-config.name = "FortranRuntime-Unit"
+config.name = "flang-rt-Unit"
# suffixes: A list of file extensions to treat as test files.
config.suffixes = []
# test_source_root: The root path where unit test binaries are located.
-config.test_source_root = os.path.join(config.fortranruntime_binary_dir, "unittests")
+config.test_source_root = os.path.join(config.flangrt_binary_dir, "unittests")
# test_exec_root: The root path where tests should be run.
# lit writes a '.lit_test_times.txt' file into this directory.
-config.test_exec_root = config.fortranruntime_binary_test_dir
+config.test_exec_root = config.flangrt_binary_test_dir
# testFormat: The test format to use to interpret tests.
config.test_format = lit.formats.GoogleTest(config.llvm_build_mode, "Tests")
diff --git a/flang-rt/test/Unit/lit.site.cfg.py.in b/flang-rt/test/Unit/lit.site.cfg.py.in
new file mode 100644
index 00000000000000..f6ed1e758d9374
--- /dev/null
+++ b/flang-rt/test/Unit/lit.site.cfg.py.in
@@ -0,0 +1,15 @@
+ at LIT_SITE_CFG_IN_HEADER@
+
+import os
+
+config.llvm_tools_dir = "@LLVM_TOOLS_DIR@"
+config.llvm_build_mode = "@LLVM_BUILD_MODE@"
+config.flangrt_source_dir = "@FLANGRT_SOURCE_DIR@"
+config.flangrt_binary_dir = "@FLANGRT_BINARY_DIR@"
+config.flangrt_binary_test_dir = os.path.dirname(__file__)
+
+import lit.llvm
+lit.llvm.initialize(lit_config, config)
+
+# Let the main config do the real work.
+lit_config.load_config(config, os.path.join(config.flangrt_source_dir, 'test', 'Unit', 'lit.cfg.py'))
diff --git a/FortranRuntime/test/lit.cfg.py b/flang-rt/test/lit.cfg.py
similarity index 89%
rename from FortranRuntime/test/lit.cfg.py
rename to flang-rt/test/lit.cfg.py
index 1b9041111b72e8..1c3a08b3ae75b7 100644
--- a/FortranRuntime/test/lit.cfg.py
+++ b/flang-rt/test/lit.cfg.py
@@ -8,7 +8,7 @@
# Configuration file for the 'lit' test runner.
# name: The name of this test suite.
-config.name = "FortranRuntime"
+config.name = "flang-rt"
# testFormat: The test format to use to interpret tests.
#
@@ -54,7 +54,7 @@
# test_exec_root: The root path where tests should be run.
# lit writes a '.lit_test_times.txt' file into this directory.
-config.test_exec_root = config.fortranruntime_binary_test_dir
+config.test_exec_root = config.flangrt_binary_test_dir
# On MacOS, -isysroot is needed to build binaries.
isysroot_flag = []
@@ -72,7 +72,7 @@
# Define some variables to help us test that the flang runtime doesn't depend on
# the C++ runtime libraries. For this we need a C compiler.
-libruntime = os.path.join(config.fortranruntime_build_lib_dir, "libFortranRuntime.a")
+libruntime = os.path.join(config.flangrt_build_lib_dir, "libflang_rt.a")
include = os.path.join(config.flang_source_dir, "include")
tools.append(
ToolSubst("%cc", command=config.cc, extra_args=isysroot_flag, unresolved="fatal")
@@ -80,7 +80,7 @@
tools.append(ToolSubst("%libruntime", command=libruntime, unresolved="fatal"))
tools.append(ToolSubst("%include", command=include, unresolved="fatal"))
-# Lwt tests find LLVM's standard tools (FileCheck, split-file, not, ...)
+# Let tests find LLVM's standard tools (FileCheck, split-file, not, ...)
llvm_config.with_environment("PATH", config.llvm_tools_dir, append_path=True)
llvm_config.add_tool_substitutions(tools)
diff --git a/flang-rt/test/lit.site.cfg.py.in b/flang-rt/test/lit.site.cfg.py.in
new file mode 100644
index 00000000000000..630f7dfcd508c7
--- /dev/null
+++ b/flang-rt/test/lit.site.cfg.py.in
@@ -0,0 +1,17 @@
+ at LIT_SITE_CFG_IN_HEADER@
+
+import sys
+
+config.llvm_tools_dir = "@LLVM_TOOLS_DIR@"
+config.flang_source_dir = "@FLANG_SOURCE_DIR@"
+config.flangrt_source_dir = "@FLANGRT_SOURCE_DIR@"
+config.flangrt_binary_test_dir = os.path.dirname(__file__)
+config.flangrt_build_lib_dir = "@FLANGRT_BUILD_LIB_DIR@"
+config.cc = "@CMAKE_C_COMPILER@"
+config.osx_sysroot = path(r"@CMAKE_OSX_SYSROOT@")
+
+import lit.llvm
+lit.llvm.initialize(lit_config, config)
+
+# Let the main config do the real work.
+lit_config.load_config(config, os.path.join(config.flangrt_source_dir, 'test', 'lit.cfg.py'))
diff --git a/FortranRuntime/unittests/CMakeLists.txt b/flang-rt/unittests/CMakeLists.txt
similarity index 72%
rename from FortranRuntime/unittests/CMakeLists.txt
rename to flang-rt/unittests/CMakeLists.txt
index 592f2ef7ce42ab..d6ed84c9f72bf0 100644
--- a/FortranRuntime/unittests/CMakeLists.txt
+++ b/flang-rt/unittests/CMakeLists.txt
@@ -26,13 +26,13 @@ endif()
# Target that depends on all unittests
-add_custom_target(FortranRuntimeUnitTests)
-set_target_properties(FortranRuntimeUnitTests PROPERTIES FOLDER "Fortran Runtime/Meta")
+add_custom_target(FlangRTUnitTests)
+set_target_properties(FlangRTUnitTests PROPERTIES FOLDER "Fortran Runtime/Meta")
-function(add_fortranruntime_unittest_offload_properties target)
+function(add_flangrt_unittest_offload_properties target)
# Set CUDA_RESOLVE_DEVICE_SYMBOLS.
- if (FORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT STREQUAL "CUDA")
+ if (FLANG_RT_EXPERIMENTAL_OFFLOAD_SUPPORT STREQUAL "CUDA")
set_target_properties(${target}
PROPERTIES CUDA_RESOLVE_DEVICE_SYMBOLS ON
)
@@ -43,7 +43,7 @@ function(add_fortranruntime_unittest_offload_properties target)
#
# FIXME: replace 'native' in --offload-arch option with the list
# of targets that Fortran Runtime was built for.
- if (FORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT STREQUAL "OpenMP")
+ if (FLANG_RT_EXPERIMENTAL_OFFLOAD_SUPPORT STREQUAL "OpenMP")
set_target_properties(${target}
PROPERTIES LINK_OPTIONS
"-fopenmp;--offload-arch=native"
@@ -52,22 +52,22 @@ function(add_fortranruntime_unittest_offload_properties target)
endfunction()
-function(add_fortranruntime_unittest test_dirname)
+function(add_flangrt_unittest test_dirname)
cmake_parse_arguments(ARG
""
""
"LINK_LIBS"
${ARGN})
- add_unittest(FortranRuntimeUnitTests ${test_dirname} ${ARG_UNPARSED_ARGUMENTS})
+ add_unittest(FlangRTUnitTests ${test_dirname} ${ARG_UNPARSED_ARGUMENTS})
- target_include_directories(${test_dirname} PRIVATE "${FORTRANRUNTIME_SOURCE_DIR}/include")
+ target_include_directories(${test_dirname} PRIVATE "${FLANGRT_SOURCE_DIR}/include")
target_include_directories(${test_dirname} PRIVATE "${FLANG_SOURCE_DIR}/include")
target_link_libraries(${test_dirname} PRIVATE ${ARG_LINK_LIBS})
- add_fortranruntime_unittest_offload_properties(${test_dirname})
+ add_flangrt_unittest_offload_properties(${test_dirname})
endfunction()
-function(add_fortranruntime_nongtest_unittest test_name)
+function(add_flangrt_nongtest_unittest test_name)
cmake_parse_arguments(ARG
"SLOW_TEST"
""
@@ -83,15 +83,15 @@ function(add_fortranruntime_nongtest_unittest test_name)
add_executable(${test_name}${suffix} ${ARG_UNPARSED_ARGUMENTS})
set_target_properties(${test_name}${suffix} PROPERTIES FOLDER "Fortran Runtime/Tests/Unit")
- target_include_directories(${test_name}${suffix} PRIVATE "${FORTRANRUNTIME_SOURCE_DIR}/include")
+ target_include_directories(${test_name}${suffix} PRIVATE "${FLANGRT_SOURCE_DIR}/include")
target_include_directories(${test_name}${suffix} PRIVATE "${FLANG_SOURCE_DIR}/include")
target_link_libraries(${test_name}${suffix} PRIVATE NonGTestTesting ${ARG_LINK_LIBS})
if(NOT ARG_SLOW_TEST)
- add_dependencies(FortranRuntimeUnitTests ${test_name}${suffix})
+ add_dependencies(FlangRTUnitTests ${test_name}${suffix})
endif()
- add_fortranruntime_unittest_offload_properties(${test_name}${suffix})
+ add_flangrt_unittest_offload_properties(${test_name}${suffix})
endfunction()
add_subdirectory(Evaluate)
diff --git a/FortranRuntime/unittests/Evaluate/CMakeLists.txt b/flang-rt/unittests/Evaluate/CMakeLists.txt
similarity index 73%
rename from FortranRuntime/unittests/Evaluate/CMakeLists.txt
rename to flang-rt/unittests/Evaluate/CMakeLists.txt
index fd3a5755dd1227..dd4b729f698cf6 100644
--- a/FortranRuntime/unittests/Evaluate/CMakeLists.txt
+++ b/flang-rt/unittests/Evaluate/CMakeLists.txt
@@ -6,14 +6,14 @@
#
#===------------------------------------------------------------------------===#
-add_fortranruntime_nongtest_unittest(reshape
+add_flangrt_nongtest_unittest(reshape
reshape.cpp
LINK_LIBS
- FortranRuntime.unittest
+ flang_rt.unittest
)
-add_fortranruntime_nongtest_unittest(ISO-Fortran-binding
+add_flangrt_nongtest_unittest(ISO-Fortran-binding
ISO-Fortran-binding.cpp
LINK_LIBS
- FortranRuntime.unittest
+ flang_rt.unittest
)
diff --git a/FortranRuntime/unittests/Evaluate/ISO-Fortran-binding.cpp b/flang-rt/unittests/Evaluate/ISO-Fortran-binding.cpp
similarity index 99%
rename from FortranRuntime/unittests/Evaluate/ISO-Fortran-binding.cpp
rename to flang-rt/unittests/Evaluate/ISO-Fortran-binding.cpp
index b68dfbcbd5b335..03cc59291787aa 100644
--- a/FortranRuntime/unittests/Evaluate/ISO-Fortran-binding.cpp
+++ b/flang-rt/unittests/Evaluate/ISO-Fortran-binding.cpp
@@ -6,7 +6,7 @@
//
//===----------------------------------------------------------------------===//
-#include "FortranRuntime/Runtime/descriptor.h"
+#include "flang-rt/flang_rt/descriptor.h"
#include "flang/Common/ISO_Fortran_binding_wrapper.h"
#include "flang/Testing/testing.h"
#include "llvm/Support/raw_ostream.h"
diff --git a/FortranRuntime/unittests/Evaluate/reshape.cpp b/flang-rt/unittests/Evaluate/reshape.cpp
similarity index 98%
rename from FortranRuntime/unittests/Evaluate/reshape.cpp
rename to flang-rt/unittests/Evaluate/reshape.cpp
index 0233ab37e25c6e..c9ead4fe744f91 100644
--- a/FortranRuntime/unittests/Evaluate/reshape.cpp
+++ b/flang-rt/unittests/Evaluate/reshape.cpp
@@ -6,7 +6,7 @@
//
//===----------------------------------------------------------------------===//
-#include "FortranRuntime/Runtime/descriptor.h"
+#include "flang-rt/flang_rt/descriptor.h"
#include "flang/Runtime/transformational.h"
#include "flang/Testing/testing.h"
#include <cinttypes>
diff --git a/FortranRuntime/unittests/Runtime/AccessTest.cpp b/flang-rt/unittests/Runtime/AccessTest.cpp
similarity index 100%
rename from FortranRuntime/unittests/Runtime/AccessTest.cpp
rename to flang-rt/unittests/Runtime/AccessTest.cpp
diff --git a/FortranRuntime/unittests/Runtime/Allocatable.cpp b/flang-rt/unittests/Runtime/Allocatable.cpp
similarity index 100%
rename from FortranRuntime/unittests/Runtime/Allocatable.cpp
rename to flang-rt/unittests/Runtime/Allocatable.cpp
diff --git a/FortranRuntime/unittests/Runtime/ArrayConstructor.cpp b/flang-rt/unittests/Runtime/ArrayConstructor.cpp
similarity index 97%
rename from FortranRuntime/unittests/Runtime/ArrayConstructor.cpp
rename to flang-rt/unittests/Runtime/ArrayConstructor.cpp
index 9d9a4ddae8689f..c52ce8e4ea54fd 100644
--- a/FortranRuntime/unittests/Runtime/ArrayConstructor.cpp
+++ b/flang-rt/unittests/Runtime/ArrayConstructor.cpp
@@ -6,9 +6,9 @@
//
//===----------------------------------------------------------------------===//
-#include "FortranRuntime/Runtime/array-constructor.h"
-#include "FortranRuntime/Runtime/descriptor.h"
-#include "FortranRuntime/Runtime/type-code.h"
+#include "flang-rt/flang_rt/array-constructor.h"
+#include "flang-rt/flang_rt/descriptor.h"
+#include "flang-rt/flang_rt/type-code.h"
#include "gtest/gtest.h"
#include "tools.h"
#include "flang/Runtime/allocatable.h"
diff --git a/FortranRuntime/unittests/Runtime/BufferTest.cpp b/flang-rt/unittests/Runtime/BufferTest.cpp
similarity index 99%
rename from FortranRuntime/unittests/Runtime/BufferTest.cpp
rename to flang-rt/unittests/Runtime/BufferTest.cpp
index 9a7dd86d0c1dc6..41c660e638e712 100644
--- a/FortranRuntime/unittests/Runtime/BufferTest.cpp
+++ b/flang-rt/unittests/Runtime/BufferTest.cpp
@@ -6,7 +6,7 @@
//
//===----------------------------------------------------------------------===//
-#include "../../lib/Runtime/buffer.h"
+#include "../../lib/flang_rt/buffer.h"
#include "CrashHandlerFixture.h"
#include "gtest/gtest.h"
#include <algorithm>
diff --git a/FortranRuntime/unittests/Runtime/CMakeLists.txt b/flang-rt/unittests/Runtime/CMakeLists.txt
similarity index 90%
rename from FortranRuntime/unittests/Runtime/CMakeLists.txt
rename to flang-rt/unittests/Runtime/CMakeLists.txt
index e4439dcc8b3c7e..ce15fe5ef74f96 100644
--- a/FortranRuntime/unittests/Runtime/CMakeLists.txt
+++ b/flang-rt/unittests/Runtime/CMakeLists.txt
@@ -6,7 +6,7 @@
#
#===------------------------------------------------------------------------===#
-add_fortranruntime_unittest(FlangRuntimeTests
+add_flangrt_unittest(RuntimeTests
AccessTest.cpp
Allocatable.cpp
ArrayConstructor.cpp
@@ -38,9 +38,9 @@ add_fortranruntime_unittest(FlangRuntimeTests
TemporaryStack.cpp
Transformational.cpp
LINK_LIBS
- FortranRuntime.unittest
+ flang_rt.unittest
)
-if (FORTRANRUNTIME_ENABLE_CUF)
+if (FLANG_RT_ENABLE_CUF)
add_subdirectory(CUDA)
endif ()
diff --git a/FortranRuntime/unittests/Runtime/CUDA/AllocatorCUF.cpp b/flang-rt/unittests/Runtime/CUDA/AllocatorCUF.cpp
similarity index 90%
rename from FortranRuntime/unittests/Runtime/CUDA/AllocatorCUF.cpp
rename to flang-rt/unittests/Runtime/CUDA/AllocatorCUF.cpp
index d2a2e5a11abf80..46461a863c0696 100644
--- a/FortranRuntime/unittests/Runtime/CUDA/AllocatorCUF.cpp
+++ b/flang-rt/unittests/Runtime/CUDA/AllocatorCUF.cpp
@@ -6,16 +6,16 @@
//
//===----------------------------------------------------------------------===//
-#include "FortranRuntime/Runtime/CUDA/allocator.h"
-#include "FortranRuntime/Runtime/CUDA/descriptor.h"
-#include "FortranRuntime/Runtime/allocatable.h"
-#include "FortranRuntime/Runtime/allocator-registry.h"
+#include "cuda_runtime.h"
+#include "flang-rt/flang_rt/allocator-registry.h"
+#include "flang-rt/flang_rt/descriptor.h"
#include "gtest/gtest.h"
-#include "../../../runtime/terminator.h"
+#include "../../../lib/flang_rt/terminator.h"
+#include "flang-rt/CufRuntime/allocator.h"
+#include "flang/Runtime/CUDA/descriptor.h"
+#include "flang/Runtime/allocatable.h"
#include "flang/Support/Fortran.h"
-#include "cuda_runtime.h"
-
using namespace Fortran::runtime;
using namespace Fortran::runtime::cuda;
diff --git a/FortranRuntime/unittests/Runtime/CUDA/CMakeLists.txt b/flang-rt/unittests/Runtime/CUDA/CMakeLists.txt
similarity index 89%
rename from FortranRuntime/unittests/Runtime/CUDA/CMakeLists.txt
rename to flang-rt/unittests/Runtime/CUDA/CMakeLists.txt
index 04321e65d733ad..829ae9250f345e 100644
--- a/FortranRuntime/unittests/Runtime/CUDA/CMakeLists.txt
+++ b/flang-rt/unittests/Runtime/CUDA/CMakeLists.txt
@@ -6,14 +6,14 @@
#
#===------------------------------------------------------------------------===#
-add_fortranruntime_unittest(FlangCufRuntimeTests
+add_flangrt_unittest(FlangCufRuntimeTests
AllocatorCUF.cpp
)
target_link_libraries(FlangCufRuntimeTests
PRIVATE
CufRuntime_cuda_${CUDAToolkit_VERSION_MAJOR}
- FortranRuntime
+ flang_rt
)
target_include_directories(FlangCufRuntimeTests PRIVATE ${CUDAToolkit_INCLUDE_DIRS})
diff --git a/FortranRuntime/unittests/Runtime/CharacterTest.cpp b/flang-rt/unittests/Runtime/CharacterTest.cpp
similarity index 99%
rename from FortranRuntime/unittests/Runtime/CharacterTest.cpp
rename to flang-rt/unittests/Runtime/CharacterTest.cpp
index 610061e2122cd5..3a4b5706e53849 100644
--- a/FortranRuntime/unittests/Runtime/CharacterTest.cpp
+++ b/flang-rt/unittests/Runtime/CharacterTest.cpp
@@ -10,7 +10,7 @@
// in Fortran.
#include "flang/Runtime/character.h"
-#include "FortranRuntime/Runtime/descriptor.h"
+#include "flang-rt/flang_rt/descriptor.h"
#include "gtest/gtest.h"
#include <cstring>
#include <functional>
diff --git a/FortranRuntime/unittests/Runtime/CommandTest.cpp b/flang-rt/unittests/Runtime/CommandTest.cpp
similarity index 99%
rename from FortranRuntime/unittests/Runtime/CommandTest.cpp
rename to flang-rt/unittests/Runtime/CommandTest.cpp
index a7d68508c5abca..15b2ed2e42bba1 100644
--- a/FortranRuntime/unittests/Runtime/CommandTest.cpp
+++ b/flang-rt/unittests/Runtime/CommandTest.cpp
@@ -7,7 +7,7 @@
//===----------------------------------------------------------------------===//
#include "flang/Runtime/command.h"
-#include "FortranRuntime/Runtime/descriptor.h"
+#include "flang-rt/flang_rt/descriptor.h"
#include "gmock/gmock.h"
#include "gtest/gtest.h"
#include "flang/Runtime/execute.h"
diff --git a/FortranRuntime/unittests/Runtime/Complex.cpp b/flang-rt/unittests/Runtime/Complex.cpp
similarity index 100%
rename from FortranRuntime/unittests/Runtime/Complex.cpp
rename to flang-rt/unittests/Runtime/Complex.cpp
diff --git a/FortranRuntime/unittests/Runtime/CrashHandlerFixture.cpp b/flang-rt/unittests/Runtime/CrashHandlerFixture.cpp
similarity index 96%
rename from FortranRuntime/unittests/Runtime/CrashHandlerFixture.cpp
rename to flang-rt/unittests/Runtime/CrashHandlerFixture.cpp
index 5e0b746c7e974a..3959b0d4b78809 100644
--- a/FortranRuntime/unittests/Runtime/CrashHandlerFixture.cpp
+++ b/flang-rt/unittests/Runtime/CrashHandlerFixture.cpp
@@ -6,7 +6,7 @@
//
//===----------------------------------------------------------------------===//
#include "CrashHandlerFixture.h"
-#include "../../lib/Runtime/terminator.h"
+#include "../../lib/flang_rt/terminator.h"
#include <cstdarg>
#include <cstdlib>
diff --git a/FortranRuntime/unittests/Runtime/CrashHandlerFixture.h b/flang-rt/unittests/Runtime/CrashHandlerFixture.h
similarity index 100%
rename from FortranRuntime/unittests/Runtime/CrashHandlerFixture.h
rename to flang-rt/unittests/Runtime/CrashHandlerFixture.h
diff --git a/FortranRuntime/unittests/Runtime/Derived.cpp b/flang-rt/unittests/Runtime/Derived.cpp
similarity index 98%
rename from FortranRuntime/unittests/Runtime/Derived.cpp
rename to flang-rt/unittests/Runtime/Derived.cpp
index 22361352fdf5d9..055174a3b5a907 100644
--- a/FortranRuntime/unittests/Runtime/Derived.cpp
+++ b/flang-rt/unittests/Runtime/Derived.cpp
@@ -6,7 +6,7 @@
//
//===----------------------------------------------------------------------===//
-#include "FortranRuntime/Runtime/descriptor.h"
+#include "flang-rt/flang_rt/descriptor.h"
#include "gtest/gtest.h"
#include "tools.h"
#include "flang/Runtime/derived-api.h"
diff --git a/FortranRuntime/unittests/Runtime/ExternalIOTest.cpp b/flang-rt/unittests/Runtime/ExternalIOTest.cpp
similarity index 99%
rename from FortranRuntime/unittests/Runtime/ExternalIOTest.cpp
rename to flang-rt/unittests/Runtime/ExternalIOTest.cpp
index 7ff4aa3c14bdc5..a93ee97da8f5f7 100644
--- a/FortranRuntime/unittests/Runtime/ExternalIOTest.cpp
+++ b/flang-rt/unittests/Runtime/ExternalIOTest.cpp
@@ -11,8 +11,8 @@
//===----------------------------------------------------------------------===//
#include "CrashHandlerFixture.h"
-#include "FortranRuntime/Runtime/descriptor.h"
-#include "FortranRuntime/Runtime/io-api-funcs.h"
+#include "flang-rt/flang_rt/descriptor.h"
+#include "flang-rt/flang_rt/io-api-funcs.h"
#include "gtest/gtest.h"
#include "flang/Runtime/main.h"
#include "flang/Runtime/stop.h"
diff --git a/FortranRuntime/unittests/Runtime/Format.cpp b/flang-rt/unittests/Runtime/Format.cpp
similarity index 97%
rename from FortranRuntime/unittests/Runtime/Format.cpp
rename to flang-rt/unittests/Runtime/Format.cpp
index f1447608917f2d..3012806a8eacc1 100644
--- a/FortranRuntime/unittests/Runtime/Format.cpp
+++ b/flang-rt/unittests/Runtime/Format.cpp
@@ -7,9 +7,9 @@
//===----------------------------------------------------------------------===//
#include "CrashHandlerFixture.h"
-#include "../../lib/Runtime/connection.h"
-#include "../../lib/Runtime/format-implementation.h"
-#include "../../lib/Runtime/io-error.h"
+#include "../../lib/flang_rt/connection.h"
+#include "../../lib/flang_rt/format-implementation.h"
+#include "../../lib/flang_rt/io-error.h"
#include <optional>
#include <string>
#include <tuple>
diff --git a/FortranRuntime/unittests/Runtime/Inquiry.cpp b/flang-rt/unittests/Runtime/Inquiry.cpp
similarity index 99%
rename from FortranRuntime/unittests/Runtime/Inquiry.cpp
rename to flang-rt/unittests/Runtime/Inquiry.cpp
index 3e5f0037177f1c..0bda07aaef295c 100644
--- a/FortranRuntime/unittests/Runtime/Inquiry.cpp
+++ b/flang-rt/unittests/Runtime/Inquiry.cpp
@@ -7,7 +7,7 @@
//===----------------------------------------------------------------------===//
#include "flang/Runtime/inquiry.h"
-#include "FortranRuntime/Runtime/type-code.h"
+#include "flang-rt/flang_rt/type-code.h"
#include "gtest/gtest.h"
#include "tools.h"
diff --git a/FortranRuntime/unittests/Runtime/ListInputTest.cpp b/flang-rt/unittests/Runtime/ListInputTest.cpp
similarity index 98%
rename from FortranRuntime/unittests/Runtime/ListInputTest.cpp
rename to flang-rt/unittests/Runtime/ListInputTest.cpp
index e0fe4dfeac3949..7e04ab834eb247 100644
--- a/FortranRuntime/unittests/Runtime/ListInputTest.cpp
+++ b/flang-rt/unittests/Runtime/ListInputTest.cpp
@@ -7,9 +7,9 @@
//===----------------------------------------------------------------------===//
#include "CrashHandlerFixture.h"
-#include "FortranRuntime/Runtime/descriptor.h"
-#include "FortranRuntime/Runtime/io-api-funcs.h"
-#include "../../lib/Runtime/io-error.h"
+#include "flang-rt/flang_rt/descriptor.h"
+#include "flang-rt/flang_rt/io-api-funcs.h"
+#include "../../lib/flang_rt/io-error.h"
using namespace Fortran::runtime;
using namespace Fortran::runtime::io;
diff --git a/FortranRuntime/unittests/Runtime/LogicalFormatTest.cpp b/flang-rt/unittests/Runtime/LogicalFormatTest.cpp
similarity index 95%
rename from FortranRuntime/unittests/Runtime/LogicalFormatTest.cpp
rename to flang-rt/unittests/Runtime/LogicalFormatTest.cpp
index 9fa0c2f4260edb..b5a9e2d317841f 100644
--- a/FortranRuntime/unittests/Runtime/LogicalFormatTest.cpp
+++ b/flang-rt/unittests/Runtime/LogicalFormatTest.cpp
@@ -7,8 +7,8 @@
//===----------------------------------------------------------------------===//
#include "CrashHandlerFixture.h"
-#include "FortranRuntime/Runtime/descriptor.h"
-#include "FortranRuntime/Runtime/io-api-funcs.h"
+#include "flang-rt/flang_rt/descriptor.h"
+#include "flang-rt/flang_rt/io-api-funcs.h"
#include <algorithm>
#include <array>
#include <cstring>
diff --git a/FortranRuntime/unittests/Runtime/Matmul.cpp b/flang-rt/unittests/Runtime/Matmul.cpp
similarity index 98%
rename from FortranRuntime/unittests/Runtime/Matmul.cpp
rename to flang-rt/unittests/Runtime/Matmul.cpp
index 6eb4012e785ff1..e833b3861badac 100644
--- a/FortranRuntime/unittests/Runtime/Matmul.cpp
+++ b/flang-rt/unittests/Runtime/Matmul.cpp
@@ -7,8 +7,8 @@
//===----------------------------------------------------------------------===//
#include "flang/Runtime/matmul.h"
-#include "FortranRuntime/Runtime/descriptor.h"
-#include "FortranRuntime/Runtime/type-code.h"
+#include "flang-rt/flang_rt/descriptor.h"
+#include "flang-rt/flang_rt/type-code.h"
#include "gtest/gtest.h"
#include "tools.h"
#include "flang/Runtime/allocatable.h"
diff --git a/FortranRuntime/unittests/Runtime/MatmulTranspose.cpp b/flang-rt/unittests/Runtime/MatmulTranspose.cpp
similarity index 99%
rename from FortranRuntime/unittests/Runtime/MatmulTranspose.cpp
rename to flang-rt/unittests/Runtime/MatmulTranspose.cpp
index 199062f820c303..560f62935e35bc 100644
--- a/FortranRuntime/unittests/Runtime/MatmulTranspose.cpp
+++ b/flang-rt/unittests/Runtime/MatmulTranspose.cpp
@@ -6,8 +6,8 @@
//
//===----------------------------------------------------------------------===//
-#include "FortranRuntime/Runtime/descriptor.h"
-#include "FortranRuntime/Runtime/type-code.h"
+#include "flang-rt/flang_rt/descriptor.h"
+#include "flang-rt/flang_rt/type-code.h"
#include "gtest/gtest.h"
#include "tools.h"
#include "flang/Runtime/allocatable.h"
diff --git a/FortranRuntime/unittests/Runtime/MiscIntrinsic.cpp b/flang-rt/unittests/Runtime/MiscIntrinsic.cpp
similarity index 98%
rename from FortranRuntime/unittests/Runtime/MiscIntrinsic.cpp
rename to flang-rt/unittests/Runtime/MiscIntrinsic.cpp
index 1033dda9d636f7..ca3a3e4fd3b839 100644
--- a/FortranRuntime/unittests/Runtime/MiscIntrinsic.cpp
+++ b/flang-rt/unittests/Runtime/MiscIntrinsic.cpp
@@ -6,7 +6,7 @@
//
//===----------------------------------------------------------------------===//
-#include "FortranRuntime/Runtime/descriptor.h"
+#include "flang-rt/flang_rt/descriptor.h"
#include "gtest/gtest.h"
#include "tools.h"
#include "flang/Runtime/allocatable.h"
diff --git a/FortranRuntime/unittests/Runtime/Namelist.cpp b/flang-rt/unittests/Runtime/Namelist.cpp
similarity index 99%
rename from FortranRuntime/unittests/Runtime/Namelist.cpp
rename to flang-rt/unittests/Runtime/Namelist.cpp
index 544ab85234fd65..d30625f23bfc1c 100644
--- a/FortranRuntime/unittests/Runtime/Namelist.cpp
+++ b/flang-rt/unittests/Runtime/Namelist.cpp
@@ -6,10 +6,10 @@
//
//===----------------------------------------------------------------------===//
-#include "../../lib/Runtime/namelist.h"
+#include "../../lib/flang_rt/namelist.h"
#include "CrashHandlerFixture.h"
-#include "FortranRuntime/Runtime/descriptor.h"
-#include "FortranRuntime/Runtime/io-api-funcs.h"
+#include "flang-rt/flang_rt/descriptor.h"
+#include "flang-rt/flang_rt/io-api-funcs.h"
#include "tools.h"
#include <algorithm>
#include <cinttypes>
diff --git a/FortranRuntime/unittests/Runtime/Numeric.cpp b/flang-rt/unittests/Runtime/Numeric.cpp
similarity index 100%
rename from FortranRuntime/unittests/Runtime/Numeric.cpp
rename to flang-rt/unittests/Runtime/Numeric.cpp
diff --git a/FortranRuntime/unittests/Runtime/NumericalFormatTest.cpp b/flang-rt/unittests/Runtime/NumericalFormatTest.cpp
similarity index 99%
rename from FortranRuntime/unittests/Runtime/NumericalFormatTest.cpp
rename to flang-rt/unittests/Runtime/NumericalFormatTest.cpp
index c588c739686bed..6c11bb0d4a49d6 100644
--- a/FortranRuntime/unittests/Runtime/NumericalFormatTest.cpp
+++ b/flang-rt/unittests/Runtime/NumericalFormatTest.cpp
@@ -7,8 +7,8 @@
//===----------------------------------------------------------------------===//
#include "CrashHandlerFixture.h"
-#include "FortranRuntime/Runtime/descriptor.h"
-#include "FortranRuntime/Runtime/io-api-funcs.h"
+#include "flang-rt/flang_rt/descriptor.h"
+#include "flang-rt/flang_rt/io-api-funcs.h"
#include <algorithm>
#include <array>
#include <cstring>
diff --git a/FortranRuntime/unittests/Runtime/Pointer.cpp b/flang-rt/unittests/Runtime/Pointer.cpp
similarity index 98%
rename from FortranRuntime/unittests/Runtime/Pointer.cpp
rename to flang-rt/unittests/Runtime/Pointer.cpp
index 733cd42232875f..c787ed9e71eee9 100644
--- a/FortranRuntime/unittests/Runtime/Pointer.cpp
+++ b/flang-rt/unittests/Runtime/Pointer.cpp
@@ -7,7 +7,7 @@
//===----------------------------------------------------------------------===//
#include "flang/Runtime/pointer.h"
-#include "FortranRuntime/Runtime/descriptor.h"
+#include "flang-rt/flang_rt/descriptor.h"
#include "gtest/gtest.h"
#include "tools.h"
diff --git a/FortranRuntime/unittests/Runtime/Ragged.cpp b/flang-rt/unittests/Runtime/Ragged.cpp
similarity index 100%
rename from FortranRuntime/unittests/Runtime/Ragged.cpp
rename to flang-rt/unittests/Runtime/Ragged.cpp
diff --git a/FortranRuntime/unittests/Runtime/Random.cpp b/flang-rt/unittests/Runtime/Random.cpp
similarity index 95%
rename from FortranRuntime/unittests/Runtime/Random.cpp
rename to flang-rt/unittests/Runtime/Random.cpp
index 81497a682660a8..bd4fcfd5e87975 100644
--- a/FortranRuntime/unittests/Runtime/Random.cpp
+++ b/flang-rt/unittests/Runtime/Random.cpp
@@ -7,8 +7,8 @@
//===----------------------------------------------------------------------===//
#include "flang/Runtime/random.h"
-#include "FortranRuntime/Runtime/descriptor.h"
-#include "FortranRuntime/Runtime/type-code.h"
+#include "flang-rt/flang_rt/descriptor.h"
+#include "flang-rt/flang_rt/type-code.h"
#include "gtest/gtest.h"
#include <cmath>
diff --git a/FortranRuntime/unittests/Runtime/Reduction.cpp b/flang-rt/unittests/Runtime/Reduction.cpp
similarity index 99%
rename from FortranRuntime/unittests/Runtime/Reduction.cpp
rename to flang-rt/unittests/Runtime/Reduction.cpp
index a382f4b7a71770..0f3789b017c6f6 100644
--- a/FortranRuntime/unittests/Runtime/Reduction.cpp
+++ b/flang-rt/unittests/Runtime/Reduction.cpp
@@ -7,8 +7,8 @@
//===----------------------------------------------------------------------===//
#include "flang/Runtime/reduction.h"
-#include "FortranRuntime/Runtime/descriptor.h"
-#include "FortranRuntime/Runtime/type-code.h"
+#include "flang-rt/flang_rt/descriptor.h"
+#include "flang-rt/flang_rt/type-code.h"
#include "gtest/gtest.h"
#include "tools.h"
#include "flang/Common/float128.h"
diff --git a/FortranRuntime/unittests/Runtime/RuntimeCrashTest.cpp b/flang-rt/unittests/Runtime/RuntimeCrashTest.cpp
similarity index 99%
rename from FortranRuntime/unittests/Runtime/RuntimeCrashTest.cpp
rename to flang-rt/unittests/Runtime/RuntimeCrashTest.cpp
index 7ce1ee796d739b..f1ea6c897d515e 100644
--- a/FortranRuntime/unittests/Runtime/RuntimeCrashTest.cpp
+++ b/flang-rt/unittests/Runtime/RuntimeCrashTest.cpp
@@ -12,7 +12,7 @@
//===----------------------------------------------------------------------===//
#include "CrashHandlerFixture.h"
#include "tools.h"
-#include "../../lib/Runtime/terminator.h"
+#include "../../lib/flang_rt/terminator.h"
#include "flang/Runtime/io-api.h"
#include "flang/Runtime/transformational.h"
#include <gtest/gtest.h>
diff --git a/FortranRuntime/unittests/Runtime/Stop.cpp b/flang-rt/unittests/Runtime/Stop.cpp
similarity index 98%
rename from FortranRuntime/unittests/Runtime/Stop.cpp
rename to flang-rt/unittests/Runtime/Stop.cpp
index c12ec097068438..9aaabc2e6c6384 100644
--- a/FortranRuntime/unittests/Runtime/Stop.cpp
+++ b/flang-rt/unittests/Runtime/Stop.cpp
@@ -11,7 +11,7 @@
//===----------------------------------------------------------------------===//
#include "flang/Runtime/stop.h"
#include "CrashHandlerFixture.h"
-#include "../../lib/Runtime/environment.h"
+#include "../../lib/flang_rt/environment.h"
#include <cstdlib>
#include <gtest/gtest.h>
diff --git a/FortranRuntime/unittests/Runtime/Support.cpp b/flang-rt/unittests/Runtime/Support.cpp
similarity index 98%
rename from FortranRuntime/unittests/Runtime/Support.cpp
rename to flang-rt/unittests/Runtime/Support.cpp
index 05328e6baa411c..d37369df025f45 100644
--- a/FortranRuntime/unittests/Runtime/Support.cpp
+++ b/flang-rt/unittests/Runtime/Support.cpp
@@ -7,7 +7,7 @@
//===----------------------------------------------------------------------===//
#include "flang/Runtime/support.h"
-#include "FortranRuntime/Runtime/descriptor.h"
+#include "flang-rt/flang_rt/descriptor.h"
#include "gtest/gtest.h"
#include "tools.h"
diff --git a/FortranRuntime/unittests/Runtime/TemporaryStack.cpp b/flang-rt/unittests/Runtime/TemporaryStack.cpp
similarity index 99%
rename from FortranRuntime/unittests/Runtime/TemporaryStack.cpp
rename to flang-rt/unittests/Runtime/TemporaryStack.cpp
index b0b1041f0f09e7..8a9f2dfe6d22f1 100644
--- a/FortranRuntime/unittests/Runtime/TemporaryStack.cpp
+++ b/flang-rt/unittests/Runtime/TemporaryStack.cpp
@@ -6,8 +6,8 @@
//
//===----------------------------------------------------------------------===//
-#include "FortranRuntime/Runtime/descriptor.h"
-#include "FortranRuntime/Runtime/type-code.h"
+#include "flang-rt/flang_rt/descriptor.h"
+#include "flang-rt/flang_rt/type-code.h"
#include "gtest/gtest.h"
#include "tools.h"
#include "flang/Common/ISO_Fortran_binding_wrapper.h"
diff --git a/FortranRuntime/unittests/Runtime/Time.cpp b/flang-rt/unittests/Runtime/Time.cpp
similarity index 100%
rename from FortranRuntime/unittests/Runtime/Time.cpp
rename to flang-rt/unittests/Runtime/Time.cpp
diff --git a/FortranRuntime/unittests/Runtime/Transformational.cpp b/flang-rt/unittests/Runtime/Transformational.cpp
similarity index 99%
rename from FortranRuntime/unittests/Runtime/Transformational.cpp
rename to flang-rt/unittests/Runtime/Transformational.cpp
index 6b8903750d0aec..e8981e9b122eb7 100644
--- a/FortranRuntime/unittests/Runtime/Transformational.cpp
+++ b/flang-rt/unittests/Runtime/Transformational.cpp
@@ -7,7 +7,7 @@
//===----------------------------------------------------------------------===//
#include "flang/Runtime/transformational.h"
-#include "FortranRuntime/Runtime/type-code.h"
+#include "flang-rt/flang_rt/type-code.h"
#include "gtest/gtest.h"
#include "tools.h"
#include "flang/Common/float128.h"
diff --git a/FortranRuntime/unittests/Runtime/tools.h b/flang-rt/unittests/Runtime/tools.h
similarity index 95%
rename from FortranRuntime/unittests/Runtime/tools.h
rename to flang-rt/unittests/Runtime/tools.h
index 8000d83fc0c394..7edeff7f7eb579 100644
--- a/FortranRuntime/unittests/Runtime/tools.h
+++ b/flang-rt/unittests/Runtime/tools.h
@@ -9,8 +9,8 @@
#ifndef FORTRAN_UNITTESTS_RUNTIME_TOOLS_H_
#define FORTRAN_UNITTESTS_RUNTIME_TOOLS_H_
-#include "FortranRuntime/Runtime/descriptor.h"
-#include "FortranRuntime/Runtime/type-code.h"
+#include "flang-rt/flang_rt/descriptor.h"
+#include "flang-rt/flang_rt/type-code.h"
#include "gtest/gtest.h"
#include "flang/Runtime/allocatable.h"
#include "flang/Runtime/cpp-type.h"
diff --git a/flang/CMakeLists.txt b/flang/CMakeLists.txt
index ac189de2386b16..34c5661c963a80 100644
--- a/flang/CMakeLists.txt
+++ b/flang/CMakeLists.txt
@@ -23,7 +23,6 @@ if (LLVM_ENABLE_EH)
endif()
set(FLANG_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
-set(FORTRANRUNTIME_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../FortranRuntime")
if (CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR AND NOT MSVC_IDE)
message(FATAL_ERROR "In-source builds are not allowed. \
@@ -247,13 +246,11 @@ set(LLVM_BUILD_TOOLS ON)
include_directories(BEFORE
${FLANG_BINARY_DIR}/include
- ${FLANG_SOURCE_DIR}/include
- ${FORTRANRUNTIME_SOURCE_DIR}/include)
+ ${FLANG_SOURCE_DIR}/include)
# Add Flang-centric modules to cmake path.
list(INSERT CMAKE_MODULE_PATH 0
"${FLANG_SOURCE_DIR}/cmake/modules"
- "${FORTRANRUNTIME_SOURCE_DIR}/cmake/modules"
"${LLVM_COMMON_CMAKE_UTILS}/Modules"
)
include(AddFlang)
@@ -271,7 +268,7 @@ set(FLANG_DEFAULT_LINKER "" CACHE STRING
"Default linker to use (linker name or absolute path, empty for platform default)")
set(FLANG_DEFAULT_RTLIB "" CACHE STRING
- "Default Fortran runtime library to use (\"libFortranRuntime\"), leave empty for platform default.")
+ "Default Fortran runtime library to use (\"libflang_rt\"), leave empty for platform default.")
if (NOT(FLANG_DEFAULT_RTLIB STREQUAL ""))
message(WARNING "Resetting Flang's default runtime library to use platform default.")
diff --git a/FortranRuntime/cmake/modules/FlangCommon.cmake b/flang/cmake/modules/FlangCommon.cmake
similarity index 93%
rename from FortranRuntime/cmake/modules/FlangCommon.cmake
rename to flang/cmake/modules/FlangCommon.cmake
index d7194ad4d7ef56..1b8606843b2240 100644
--- a/FortranRuntime/cmake/modules/FlangCommon.cmake
+++ b/flang/cmake/modules/FlangCommon.cmake
@@ -1,43 +1,43 @@
-#===-- cmake/modules/FlangCommon.txt ----------------------------===#
-#
-# 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
-#
-#===------------------------------------------------------------------------===#
-#
-# CMake definitions shared betwween Flang and FortranRuntime
-#
-#===------------------------------------------------------------------------===#
-
-# The out of tree builds of the compiler and the Fortran runtime
-# must use the same setting of FLANG_RUNTIME_F128_MATH_LIB
-# to be composable. Failure to synchronize this setting may result
-# in linking errors or fatal failures in F128 runtime functions.
-set(FLANG_RUNTIME_F128_MATH_LIB "" CACHE STRING
- "Specifies the target library used for implementing IEEE-754 128-bit float \
- math in F18 runtime, e.g. it might be libquadmath for targets where \
- REAL(16) is mapped to __float128, or libm for targets where REAL(16) \
- is mapped to long double, etc."
- )
-if (FLANG_RUNTIME_F128_MATH_LIB)
- add_compile_definitions(FLANG_RUNTIME_F128_MATH_LIB="${FLANG_RUNTIME_F128_MATH_LIB}")
-endif()
-
-# Check if 128-bit float computations can be done via long double
-check_cxx_source_compiles(
- "#include <cfloat>
- #if LDBL_MANT_DIG != 113
- #error LDBL_MANT_DIG != 113
- #endif
- int main() { return 0; }
- "
- HAVE_LDBL_MANT_DIG_113)
-
-include(TestBigEndian)
-test_big_endian(IS_BIGENDIAN)
-if (IS_BIGENDIAN)
- add_compile_definitions(FLANG_BIG_ENDIAN=1)
-else ()
- add_compile_definitions(FLANG_LITTLE_ENDIAN=1)
-endif ()
+#===-- cmake/modules/FlangCommon.txt ----------------------------===#
+#
+# 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
+#
+#===------------------------------------------------------------------------===#
+#
+# CMake definitions shared between Flang and Flang-RT
+#
+#===------------------------------------------------------------------------===#
+
+# The out of tree builds of the compiler and the Fortran runtime
+# must use the same setting of FLANG_RUNTIME_F128_MATH_LIB
+# to be composable. Failure to synchronize this setting may result
+# in linking errors or fatal failures in F128 runtime functions.
+set(FLANG_RUNTIME_F128_MATH_LIB "" CACHE STRING
+ "Specifies the target library used for implementing IEEE-754 128-bit float \
+ math in F18 runtime, e.g. it might be libquadmath for targets where \
+ REAL(16) is mapped to __float128, or libm for targets where REAL(16) \
+ is mapped to long double, etc."
+ )
+if (FLANG_RUNTIME_F128_MATH_LIB)
+ add_compile_definitions(FLANG_RUNTIME_F128_MATH_LIB="${FLANG_RUNTIME_F128_MATH_LIB}")
+endif()
+
+# Check if 128-bit float computations can be done via long double
+check_cxx_source_compiles(
+ "#include <cfloat>
+ #if LDBL_MANT_DIG != 113
+ #error LDBL_MANT_DIG != 113
+ #endif
+ int main() { return 0; }
+ "
+ HAVE_LDBL_MANT_DIG_113)
+
+include(TestBigEndian)
+test_big_endian(IS_BIGENDIAN)
+if (IS_BIGENDIAN)
+ add_compile_definitions(FLANG_BIG_ENDIAN=1)
+else ()
+ add_compile_definitions(FLANG_LITTLE_ENDIAN=1)
+endif ()
diff --git a/flang/docs/FlangDriver.md b/flang/docs/FlangDriver.md
index 98611ee338e706..5165ac6c323ac2 100644
--- a/flang/docs/FlangDriver.md
+++ b/flang/docs/FlangDriver.md
@@ -179,18 +179,18 @@ like this:
```
$ flang -v -o example example.o
-"/usr/bin/ld" [...] example.o [...] "-lFortranRuntime" [...]
+"/usr/bin/ld" [...] example.o [...] "-lflang_rt" [...]
```
The automatically added libraries are:
-* `FortranRuntime`: Provides most of the Flang runtime library.
+* `flang_rt`: Provides most of the Flang runtime library.
If the code is C/C++ based and invokes Fortran routines, one can either use Clang
or Flang as the linker driver. If Clang is used, it will automatically all
required runtime libraries needed by C++ (e.g., for STL) to the linker invocation.
-In this case, one has to explicitly provide the Fortran runtime libraries
-`FortranRuntime`. An alternative is to use Flang to link.
+In this case, one has to explicitly provide the Fortran runtime library
+`flang_ty`. An alternative is to use Flang to link.
In this case, it may be required to explicitly supply C++ runtime libraries.
On Darwin, the logical root where the system libraries are located (sysroot)
diff --git a/flang/docs/GettingStarted.md b/flang/docs/GettingStarted.md
index eb9049ad607570..9061a00c2de250 100644
--- a/flang/docs/GettingStarted.md
+++ b/flang/docs/GettingStarted.md
@@ -32,8 +32,8 @@ tool.
### Building flang in tree (bootstrap build)
Building flang in tree means building flang along with all of the projects on
-which it depends. These projects include mlir, clang, flang, openmp,
-compiler-rt, and FortranRuntime. Note that compiler-rt is only needed to access libraries that
+which it depends. These projects include mlir, clang, flang, openmp, and
+compiler-rt. Note that compiler-rt is only needed to access libraries that
support 16 bit floating point numbers. It's not needed to run the automated
tests. You can use several different C++ compilers for most of the build,
includig GNU and clang. But building compiler-rt requres using the clang
@@ -82,7 +82,7 @@ cmake \
-DLLVM_TARGETS_TO_BUILD=host \
-DLLVM_LIT_ARGS=-v \
-DLLVM_ENABLE_PROJECTS="clang;mlir;flang;openmp" \
- -DLLVM_ENABLE_RUNTIMES="compiler-rt;FortranRuntime" \
+ -DLLVM_ENABLE_RUNTIMES="compiler-rt;flang_rt" \
../llvm-project/llvm
ninja
@@ -209,15 +209,15 @@ mkdir build_flang_runtime
cd build_flang_runtime
cmake \
- -DLLVM_ENABLE_RUNTIMES=FortranRuntime \
- -DFORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT=CUDA \
+ -DLLVM_ENABLE_RUNTIMES=flang_rt \
+ -DFLANG_RT_EXPERIMENTAL_OFFLOAD_SUPPORT=CUDA \
-DCMAKE_CUDA_ARCHITECTURES=80 \
-DCMAKE_C_COMPILER=clang \
-DCMAKE_CXX_COMPILER=clang++ \
-DCMAKE_CUDA_COMPILER=clang \
-DCMAKE_CUDA_HOST_COMPILER=clang++ \
../runtimes/
-make -j`nprocs` FortranRuntime
+make -j`nprocs` flang_rt
```
Note that the used version of `clang` must [support](https://releases.llvm.org/16.0.0/tools/clang/docs/ReleaseNotes.html#cuda-support)
@@ -232,8 +232,8 @@ mkdir build_flang_runtime
cd build_flang_runtime
cmake \
- -DLLVM_ENABLE_RUNTIMES=FortranRuntime \
- -DFORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT=CUDA \
+ -DLLVM_ENABLE_RUNTIMES=flang_rt \
+ -DFLANG_RT_EXPERIMENTAL_OFFLOAD_SUPPORT=CUDA \
-DCMAKE_CUDA_ARCHITECTURES=80 \
-DCMAKE_C_COMPILER=clang \
-DCMAKE_CXX_COMPILER=clang++ \
@@ -241,7 +241,7 @@ cmake \
-DCMAKE_CUDA_HOST_COMPILER=clang++ \
../runtimes/
-make -j`nprocs` FortranRuntime
+make -j`nprocs` flang_rt
```
Note that `nvcc` might limit support to certain
@@ -260,8 +260,8 @@ build config:
For example:
```bash
- -DLLVM_ENABLE_RUNTIMES=FortranRuntime \
- -DFORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT=CUDA \
+ -DLLVM_ENABLE_RUNTIMES=flang_rt \
+ -DFLANG_RT_EXPERIMENTAL_OFFLOAD_SUPPORT=CUDA \
-DCMAKE_CUDA_ARCHITECTURES=80 \
-DCMAKE_C_COMPILER=clang \
-DCMAKE_CXX_COMPILER=clang++ \
@@ -272,8 +272,8 @@ For example:
Or:
```bash
- -DLLVM_ENABLE_RUNTIMES=FortranRuntime \
- -DFORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT=CUDA \
+ -DLLVM_ENABLE_RUNTIMES=flang_rt \
+ -DFLANG_RT_EXPERIMENTAL_OFFLOAD_SUPPORT=CUDA \
-DCMAKE_CUDA_ARCHITECTURES=80 \
-DCMAKE_C_COMPILER=gcc \
-DCMAKE_CXX_COMPILER=g++ \
@@ -295,14 +295,14 @@ mkdir build_flang_runtime
cd build_flang_runtime
cmake \
- -DLLVM_ENABLE_RUNTIMES=FortranRuntime \
- -DFORTRANRUNTIME_EXPERIMENTAL_OFFLOAD_SUPPORT="OpenMP" \
+ -DLLVM_ENABLE_RUNTIMES=flang_rt \
+ -DFLANG_RT_EXPERIMENTAL_OFFLOAD_SUPPORT="OpenMP" \
-DCMAKE_C_COMPILER=clang \
-DCMAKE_CXX_COMPILER=clang++ \
- -DFORTRANRUNTIME_DEVICE_ARCHITECTURES="all" \
+ -DFLANG_RT_DEVICE_ARCHITECTURES="all" \
../runtimes/
-make -j`nprocs` FortranRuntime
+make -j`nprocs` flang_rt
```
The result of the build is a "device-only" library, i.e. the host
diff --git a/flang/docs/OpenACC-descriptor-management.md b/flang/docs/OpenACC-descriptor-management.md
index 0b5103000d8e7c..215643086fb7d1 100644
--- a/flang/docs/OpenACC-descriptor-management.md
+++ b/flang/docs/OpenACC-descriptor-management.md
@@ -427,7 +427,7 @@ The implementation's behavior may be described as (OpenACC 2.7.2):
All the "is-present" checks and the data actions for the auxiliary pointers must be performed atomically with regards to the present counters bookkeeping.
-The API relies on the primitives provided by `liboffload`, so it is provided by a new F18 runtime library, e.g. `FortranOffloadRuntime`, that depends on `FortranRuntime` and `liboffload`. The F18 driver adds `FortranOffloadRuntime` for linking under `-fopenacc`/`-fopenmp` (and maybe additional switches like `-fopenmp-targets`).
+The API relies on the primitives provided by `liboffload`, so it is provided by a new F18 runtime library, e.g. `FortranOffloadRuntime`, that depends on `flang_rt` and `liboffload`. The F18 driver adds `FortranOffloadRuntime` for linking under `-fopenacc`/`-fopenmp` (and maybe additional switches like `-fopenmp-targets`).
## TODOs:
diff --git a/flang/docs/ReleaseNotes.md b/flang/docs/ReleaseNotes.md
index 80ebbb5481ba50..347f470452b247 100644
--- a/flang/docs/ReleaseNotes.md
+++ b/flang/docs/ReleaseNotes.md
@@ -36,12 +36,13 @@ page](https://llvm.org/releases/).
## Build System Changes
- * The Fortran Runtime library (libFortranRuntime) has been move to a new
- top-level directory named "FortranRuntime". It now supports the
- LLVM_ENABLE_RUNTIMES mechanism to build libFortranRuntime for multiple target
- triples. libFortranRuntime.a will now be emitted into Clang's per-target
- resource directory (next to libclang_rt) where it is also found by Flang's
- driver.
+ * The Fortran Runtime library has been move to a new top-level directory
+ named "flang-rt". The library was also renamed from `libFortranRuntime.a` to
+ `libflang_rt.a`. It now supports the
+ LLVM_ENABLE_RUNTIMES mechanism to build flang-rt for multiple target
+ triples. libflang_rt.a will now be emitted into Clang's per-target
+ resource directory (next to libclang_rt.*.*) where it is also found by
+ Flang's driver.
## New Issues Found
diff --git a/flang/examples/ExternalHelloWorld/CMakeLists.txt b/flang/examples/ExternalHelloWorld/CMakeLists.txt
index 042d4b6238ba45..213fc462ac2b1a 100644
--- a/flang/examples/ExternalHelloWorld/CMakeLists.txt
+++ b/flang/examples/ExternalHelloWorld/CMakeLists.txt
@@ -5,5 +5,5 @@ add_llvm_example(external-hello-world
target_link_libraries(external-hello-world
PRIVATE
- FortranRuntime
+ flang_rt
)
diff --git a/flang/include/flang/Common/README.md b/flang/include/flang/Common/README.md
index a722732fb76407..5203465f7f2fa9 100644
--- a/flang/include/flang/Common/README.md
+++ b/flang/include/flang/Common/README.md
@@ -1,8 +1,8 @@
-Files in this directory are used by Flang (the compiler) and FortranRuntime
+Files in this directory are used by Flang (the compiler) and flang-rt
(the runtime library for Flang-compiled programs). They must be compatible by
both. For definitions used only by Flang, consider
`flang/{lib,include/flang}/Support` instead. For definitions used only by
-FortranRuntime, consider `FortranRuntime/{lib,include/FortranRuntime}/Runtime`.
+the runtime, consider `flang-rt/{lib,include/flang-rt}/flang_rt`.
The requirements for common code include:
@@ -23,3 +23,5 @@ The requirements for common code include:
* Global declarations may need to be annotated using definitions from
`api-attrs.h`.
+
+ * The `Runtime` component is header-only.
diff --git a/flang/include/flang/ISO_Fortran_binding.h b/flang/include/flang/ISO_Fortran_binding.h
index 89a10ce69a2ba2..b211bcd98af868 100644
--- a/flang/include/flang/ISO_Fortran_binding.h
+++ b/flang/include/flang/ISO_Fortran_binding.h
@@ -1,3 +1,11 @@
+//===-- include/flang/ISO_Fortran_binding.h ---------------------*- C++ -*-===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
/*===-- include/flang/ISO_Fortran_binding.h -----------------------*- C++ -*-===
*
* Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
@@ -7,14 +15,14 @@
* ===-----------------------------------------------------------------------===
*/
-#ifndef CFI_ISO_FORTRAN_BINDING_H_
-#define CFI_ISO_FORTRAN_BINDING_H_
+#ifndef FORTRAN_ISO_FORTRAN_BINDING_H_
+#define FORTRAN_ISO_FORTRAN_BINDING_H_
/* When this header is included into the compiler and runtime implementations,
* it does so by means of a wrapper header that establishes namespaces and
* a macro for extra function attributes (RT_API_ATTRS).
*/
-#ifndef FORTRAN_ISO_FORTRAN_BINDING_WRAPPER_H_
+#ifndef FORTRAN_COMMON_ISO_FORTRAN_BINDING_WRAPPER_H_
#include <stddef.h>
#define FORTRAN_ISO_NAMESPACE_
#endif
@@ -207,4 +215,4 @@ RT_API_ATTRS int CFI_setpointer(
} // extern "C"
#endif
-#endif /* CFI_ISO_FORTRAN_BINDING_H_ */
+#endif /* FORTRAN_ISO_FORTRAN_BINDING_H_ */
diff --git a/flang/include/flang/Runtime/README.md b/flang/include/flang/Runtime/README.md
index a13a7e23162e98..5203465f7f2fa9 100644
--- a/flang/include/flang/Runtime/README.md
+++ b/flang/include/flang/Runtime/README.md
@@ -1,8 +1,8 @@
-Files in this directory are used by Flang (the compiler) and FortranRuntime
+Files in this directory are used by Flang (the compiler) and flang-rt
(the runtime library for Flang-compiled programs). They must be compatible by
both. For definitions used only by Flang, consider
`flang/{lib,include/flang}/Support` instead. For definitions used only by
-FortranRuntime, consider `FortranRuntime/{lib,include/FortranRuntime}/Runtime`.
+the runtime, consider `flang-rt/{lib,include/flang-rt}/flang_rt`.
The requirements for common code include:
diff --git a/flang/include/flang/Testing/README.md b/flang/include/flang/Testing/README.md
index a722732fb76407..5203465f7f2fa9 100644
--- a/flang/include/flang/Testing/README.md
+++ b/flang/include/flang/Testing/README.md
@@ -1,8 +1,8 @@
-Files in this directory are used by Flang (the compiler) and FortranRuntime
+Files in this directory are used by Flang (the compiler) and flang-rt
(the runtime library for Flang-compiled programs). They must be compatible by
both. For definitions used only by Flang, consider
`flang/{lib,include/flang}/Support` instead. For definitions used only by
-FortranRuntime, consider `FortranRuntime/{lib,include/FortranRuntime}/Runtime`.
+the runtime, consider `flang-rt/{lib,include/flang-rt}/flang_rt`.
The requirements for common code include:
@@ -23,3 +23,5 @@ The requirements for common code include:
* Global declarations may need to be annotated using definitions from
`api-attrs.h`.
+
+ * The `Runtime` component is header-only.
diff --git a/flang/lib/Common/README.md b/flang/lib/Common/README.md
index a722732fb76407..5203465f7f2fa9 100644
--- a/flang/lib/Common/README.md
+++ b/flang/lib/Common/README.md
@@ -1,8 +1,8 @@
-Files in this directory are used by Flang (the compiler) and FortranRuntime
+Files in this directory are used by Flang (the compiler) and flang-rt
(the runtime library for Flang-compiled programs). They must be compatible by
both. For definitions used only by Flang, consider
`flang/{lib,include/flang}/Support` instead. For definitions used only by
-FortranRuntime, consider `FortranRuntime/{lib,include/FortranRuntime}/Runtime`.
+the runtime, consider `flang-rt/{lib,include/flang-rt}/flang_rt`.
The requirements for common code include:
@@ -23,3 +23,5 @@ The requirements for common code include:
* Global declarations may need to be annotated using definitions from
`api-attrs.h`.
+
+ * The `Runtime` component is header-only.
diff --git a/flang/lib/Optimizer/Builder/IntrinsicCall.cpp b/flang/lib/Optimizer/Builder/IntrinsicCall.cpp
index b98ab3e6999655..44c8fba5ee3c66 100644
--- a/flang/lib/Optimizer/Builder/IntrinsicCall.cpp
+++ b/flang/lib/Optimizer/Builder/IntrinsicCall.cpp
@@ -751,7 +751,7 @@ prettyPrintIntrinsicName(fir::FirOpBuilder &builder, mlir::Location loc,
// Generate a call to the Fortran runtime library providing
// support for 128-bit float math.
// On 'LDBL_MANT_DIG == 113' targets the implementation
-// is provided by FortranRuntime, otherwise, it is done via
+// is provided by flang-rt, otherwise, it is done via
// FortranFloat128Math library. In the latter case the compiler
// has to be built with FLANG_RUNTIME_F128_MATH_LIB to guarantee
// proper linking actions in the driver.
diff --git a/flang/lib/Optimizer/Transforms/CufOpConversion.cpp b/flang/lib/Optimizer/Transforms/CufOpConversion.cpp
index d7d321c6b9af3f..68ce3ab7045505 100644
--- a/flang/lib/Optimizer/Transforms/CufOpConversion.cpp
+++ b/flang/lib/Optimizer/Transforms/CufOpConversion.cpp
@@ -1,4 +1,4 @@
-//===-- CufOpConversion.cpp -----------------------------------------------===//
+//===-- lib/Optimizer/Transforms/CufOpConversion.cpp ------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/flang/lib/Testing/CMakeLists.txt b/flang/lib/Testing/CMakeLists.txt
deleted file mode 100644
index d5caada3fb68e8..00000000000000
--- a/flang/lib/Testing/CMakeLists.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-#===-- lib/Testing/CMakeLists.txt ------------------------------------------===#
-#
-# 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
-#
-#===------------------------------------------------------------------------===#
-
-set(public_headers "")
-file(GLOB_RECURSE public_headers
- "${FLANGRUNTIME_SOURCE_DIR}/lib/Testing/*.h"
-)
-
-add_fortranruntime_library(NonGTestTesting EXCLUDE_FROM_ALL LINK_TO_LLVM
- testing.cpp
- fp-testing.cpp
- ADDITIONAL_HEADERS
- ${public_headers}
-)
-
diff --git a/flang/lib/Testing/README.md b/flang/lib/Testing/README.md
index a722732fb76407..5203465f7f2fa9 100644
--- a/flang/lib/Testing/README.md
+++ b/flang/lib/Testing/README.md
@@ -1,8 +1,8 @@
-Files in this directory are used by Flang (the compiler) and FortranRuntime
+Files in this directory are used by Flang (the compiler) and flang-rt
(the runtime library for Flang-compiled programs). They must be compatible by
both. For definitions used only by Flang, consider
`flang/{lib,include/flang}/Support` instead. For definitions used only by
-FortranRuntime, consider `FortranRuntime/{lib,include/FortranRuntime}/Runtime`.
+the runtime, consider `flang-rt/{lib,include/flang-rt}/flang_rt`.
The requirements for common code include:
@@ -23,3 +23,5 @@ The requirements for common code include:
* Global declarations may need to be annotated using definitions from
`api-attrs.h`.
+
+ * The `Runtime` component is header-only.
diff --git a/FortranRuntime/lib/Runtime/iso_fortran_env_impl.f90 b/flang/module/iso_fortran_env_impl.f90
similarity index 97%
rename from FortranRuntime/lib/Runtime/iso_fortran_env_impl.f90
rename to flang/module/iso_fortran_env_impl.f90
index 1a4da69266c55b..782be81791af2e 100644
--- a/FortranRuntime/lib/Runtime/iso_fortran_env_impl.f90
+++ b/flang/module/iso_fortran_env_impl.f90
@@ -1,4 +1,4 @@
-!===-- lib/Runtime/iso_fortran_env_impl.f90 --------------------------------===!
+!===-- 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.
@@ -8,7 +8,7 @@
! This MODULE implements part of the ISO_FORTRAN_ENV module file, which
! partially requires linkable symbols for some entities defined
-! (e.g., real_kinds).
+! (e.g., real_kinds). Hence, this file is also used by Flang-RT.
module iso_fortran_env_impl
implicit none
diff --git a/flang/test/Driver/gcc-toolchain-install-dir.f90 b/flang/test/Driver/gcc-toolchain-install-dir.f90
index 5a073b0c517122..d9160e1971250f 100644
--- a/flang/test/Driver/gcc-toolchain-install-dir.f90
+++ b/flang/test/Driver/gcc-toolchain-install-dir.f90
@@ -1,5 +1,5 @@
!! Test that --gcc-toolchain and --gcc-install-dir options are working as expected.
-!! It does not test cross-compiling (--sysroot), so crtbegin.o, libgcc/compiler-rt, libc, libFortranRuntime, etc. are not supposed to be affected.
+!! It does not test cross-compiling (--sysroot), so crtbegin.o, libgcc/compiler-rt, libc, libflang_rt, etc. are not supposed to be affected.
!! PREFIX is captured twice because the driver escapes backslashes (occuring in Windows paths) in the -### output, but not on the "Selected GCC installation:" line.
! RUN: %flang 2>&1 -### -v -o %t %s -no-integrated-as -fuse-ld=ld --target=i386-unknown-linux-gnu --gcc-install-dir=%S/Inputs/basic_cross_linux_tree/usr/lib/gcc/i386-unknown-linux-gnu/10.2.0 | FileCheck %s --check-prefix=CHECK-I386
diff --git a/flang/test/Driver/linker-flags.f90 b/flang/test/Driver/linker-flags.f90
index fdeb95e4dd97c6..5dc89fe45c8cc0 100644
--- a/flang/test/Driver/linker-flags.f90
+++ b/flang/test/Driver/linker-flags.f90
@@ -33,26 +33,26 @@
! SOLARIS-F128NONE-NOT: FortranFloat128Math
! UNIX-F128LIBQUADMATH-SAME: "-lFortranFloat128Math" "--as-needed" "-lquadmath" "--no-as-needed"
! SOLARIS-F128LIBQUADMATH-SAME: "-lFortranFloat128Math" "-z" "ignore" "-lquadmath" "-z" "record"
-! UNIX-SAME: "-lFortranRuntime" "-lm"
+! UNIX-SAME: "-lflang_rt" "-lm"
! COMPILER-RT: "{{.*}}{{\\|/}}libclang_rt.builtins.a"
! DARWIN-LABEL: "{{.*}}ld{{(\.exe)?}}"
! DARWIN-SAME: "[[object_file]]"
! DARWIN-F128NONE-NOT: FortranFloat128Math
! DARWIN-F128LIBQUADMATH-SAME: "-lFortranFloat128Math" "--as-needed" "-lquadmath" "--no-as-needed"
-! DARWIN-SAME: -lFortranRuntime
+! DARWIN-SAME: -lflang_rt
! HAIKU-LABEL: "{{.*}}ld{{(\.exe)?}}"
! HAIKU-SAME: "[[object_file]]"
! HAIKU-F128NONE-NOT: FortranFloat128Math
! HAIKU-F128LIBQUADMATH-SAME: "-lFortranFloat128Math" "--as-needed" "-lquadmath" "--no-as-needed"
-! HAIKU-SAME: "-lFortranRuntime"
+! HAIKU-SAME: "-lflang_rt"
! MINGW-LABEL: "{{.*}}ld{{(\.exe)?}}"
! MINGW-SAME: "[[object_file]]"
! MINGW-F128NONE-NOT: FortranFloat128Math
! MINGW-F128LIBQUADMATH-SAME: "-lFortranFloat128Math" "--as-needed" "-lquadmath" "--no-as-needed"
-! MINGW-SAME: -lFortranRuntime
+! MINGW-SAME: -lflang_rt
! NOTE: This also matches lld-link (when CLANG_DEFAULT_LINKER=lld) and
! any .exe suffix that is added when resolving to the full path of
diff --git a/flang/test/Driver/msvc-dependent-lib-flags.f90 b/flang/test/Driver/msvc-dependent-lib-flags.f90
index e7fa63548fa840..5e4e6d5952efda 100644
--- a/flang/test/Driver/msvc-dependent-lib-flags.f90
+++ b/flang/test/Driver/msvc-dependent-lib-flags.f90
@@ -6,23 +6,23 @@
! MSVC: -fc1
! MSVC-SAME: -D_MT
! MSVC-SAME: --dependent-lib=libcmt
-! MSVC-SAME: --dependent-lib=FortranRuntime.static.lib
+! MSVC-SAME: --dependent-lib=flang_rt.static.lib
! MSVC-DEBUG: -fc1
! MSVC-DEBUG-SAME: -D_MT
! MSVC-DEBUG-SAME: -D_DEBUG
! MSVC-DEBUG-SAME: --dependent-lib=libcmtd
-! MSVC-DEBUG-SAME: --dependent-lib=FortranRuntime.static_dbg.lib
+! MSVC-DEBUG-SAME: --dependent-lib=flang_rt.static_dbg.lib
! MSVC-DLL: -fc1
! MSVC-DLL-SAME: -D_MT
! MSVC-DLL-SAME: -D_DLL
! MSVC-DLL-SAME: --dependent-lib=msvcrt
-! MSVC-DLL-SAME: --dependent-lib=FortranRuntime.dynamic.lib
+! MSVC-DLL-SAME: --dependent-lib=flang_rt.dynamic.lib
! MSVC-DLL-DEBUG: -fc1
! MSVC-DLL-DEBUG-SAME: -D_MT
! MSVC-DLL-DEBUG-SAME: -D_DEBUG
! MSVC-DLL-DEBUG-SAME: -D_DLL
! MSVC-DLL-DEBUG-SAME: --dependent-lib=msvcrtd
-! MSVC-DLL-DEBUG-SAME: --dependent-lib=FortranRuntime.dynamic_dbg.lib
+! MSVC-DLL-DEBUG-SAME: --dependent-lib=flang_rt.dynamic_dbg.lib
diff --git a/flang/tools/f18/CMakeLists.txt b/flang/tools/f18/CMakeLists.txt
index 401c7cc2bdef79..ada258fae8f7a2 100644
--- a/flang/tools/f18/CMakeLists.txt
+++ b/flang/tools/f18/CMakeLists.txt
@@ -54,8 +54,6 @@ if (NOT CMAKE_CROSSCOMPILING)
foreach(filename ${MODULES})
set(depends "")
set(opts "")
- set(sourcepath "${FLANG_SOURCE_DIR}/module/${filename}.f90")
- set(modpath "${FLANG_INTRINSIC_MODULES_DIR}/${filename}.mod")
if(${filename} STREQUAL "__fortran_builtins" OR
${filename} STREQUAL "__ppc_types")
elseif(${filename} STREQUAL "__ppc_intrinsics" OR
@@ -66,9 +64,6 @@ if (NOT CMAKE_CROSSCOMPILING)
set(depends ${FLANG_INTRINSIC_MODULES_DIR}/__cuda_builtins.mod)
else()
set(depends ${FLANG_INTRINSIC_MODULES_DIR}/__fortran_builtins.mod)
- if(${filename} STREQUAL "iso_fortran_env_impl")
- set(sourcepath "${FORTRANRUNTIME_SOURCE_DIR}/lib/Runtime/${filename}.f90")
- endif()
if(${filename} STREQUAL "iso_fortran_env")
set(depends ${depends} ${FLANG_INTRINSIC_MODULES_DIR}/iso_fortran_env_impl.mod)
endif()
@@ -97,27 +92,20 @@ if (NOT CMAKE_CROSSCOMPILING)
set(decls "-DFLANG_SUPPORT_R16")
endif()
- # Some modules have an implementation part that needs to be added to the
- # FortranRuntime library.
set(compile_with "-fsyntax-only")
set(object_output "")
set(include_in_link FALSE)
+ set(base ${FLANG_INTRINSIC_MODULES_DIR}/${filename})
# TODO: We may need to flag this with conditional, in case Flang is built w/o OpenMP support
- add_custom_command(OUTPUT ${modpath} ${object_output}
+ add_custom_command(OUTPUT ${base}.mod ${object_output}
COMMAND ${CMAKE_COMMAND} -E make_directory ${FLANG_INTRINSIC_MODULES_DIR}
COMMAND flang-new ${opts} ${decls} -cpp ${compile_with} -module-dir ${FLANG_INTRINSIC_MODULES_DIR}
- ${sourcepath}
- DEPENDS flang-new ${sourcepath} ${FLANG_SOURCE_DIR}/module/__fortran_builtins.f90 ${depends}
+ ${FLANG_SOURCE_DIR}/module/${filename}.f90
+ DEPENDS flang-new ${FLANG_SOURCE_DIR}/module/${filename}.f90 ${FLANG_SOURCE_DIR}/module/__fortran_builtins.f90 ${depends}
)
- list(APPEND MODULE_FILES "${modpath}")
- install(FILES "${modpath}" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/flang")
-
- # If a module has been compiled into an object file, add the file to
- # the link line for the FortranRuntime library.
- if(include_in_link)
- list(APPEND module_objects ${object_output})
- endif()
+ list(APPEND MODULE_FILES ${base}.mod)
+ install(FILES ${base}.mod DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/flang")
endforeach()
# Special case for omp_lib.mod, because its source comes from openmp/runtime/src/include.
diff --git a/flang/unittests/Common/CMakeLists.txt b/flang/unittests/Common/CMakeLists.txt
index 5b3aebaf5f654a..709a02f5c789c7 100644
--- a/flang/unittests/Common/CMakeLists.txt
+++ b/flang/unittests/Common/CMakeLists.txt
@@ -6,8 +6,8 @@
#
#===------------------------------------------------------------------------===#
-add_fortranruntime_unittest(FlangCommonTests
+add_flangrt_unittest(FlangCommonTests
FastIntSetTest.cpp
LINK_LIBS
- FortranRuntime.unittest
+ flang_rt.unittest
)
diff --git a/flang/unittests/Decimal/CMakeLists.txt b/flang/unittests/Decimal/CMakeLists.txt
index 033773049680f6..aaa3210aade7e3 100644
--- a/flang/unittests/Decimal/CMakeLists.txt
+++ b/flang/unittests/Decimal/CMakeLists.txt
@@ -6,15 +6,15 @@
#
#===------------------------------------------------------------------------===#
-add_fortranruntime_nongtest_unittest(quick-sanity-test
+add_flangrt_nongtest_unittest(quick-sanity-test
quick-sanity-test.cpp
LINK_LIBS
- FortranRuntime.unittest
+ flang_rt.unittest
)
# This test is not run by default as it takes a long time to execute.
-add_fortranruntime_nongtest_unittest(thorough-test SLOW_TEST
+add_flangrt_nongtest_unittest(thorough-test SLOW_TEST
thorough-test.cpp
LINK_LIBS
- FortranRuntime.unittest
+ flang_rt.unittest
)
diff --git a/lld/COFF/MinGW.cpp b/lld/COFF/MinGW.cpp
index 74d1ae0615fa6a..ae51bd5fcae62e 100644
--- a/lld/COFF/MinGW.cpp
+++ b/lld/COFF/MinGW.cpp
@@ -50,11 +50,11 @@ AutoExporter::AutoExporter(
"libclang_rt.profile-x86_64",
"libc++",
"libc++abi",
- "libFortranRuntime",
- "libFortranRuntime.static",
- "libFortranRuntime.dynamic",
- "libFortranRuntime.static_dbg",
- "libFortranRuntime.dynamic_dbg",
+ "libflang_rt",
+ "libflang_rt.static",
+ "libflang_rt.dynamic",
+ "libflang_rtstatic_dbg",
+ "libflang_rt.dynamic_dbg",
"libunwind",
"libmsvcrt",
"libucrtbase",
diff --git a/llvm/CMakeLists.txt b/llvm/CMakeLists.txt
index 70f6f50ee5e11a..60daeaae6613e9 100644
--- a/llvm/CMakeLists.txt
+++ b/llvm/CMakeLists.txt
@@ -149,7 +149,7 @@ endif()
# As we migrate runtimes to using the bootstrapping build, the set of default runtimes
# should grow as we remove those runtimes from LLVM_ENABLE_PROJECTS above.
set(LLVM_DEFAULT_RUNTIMES "libcxx;libcxxabi;libunwind")
-set(LLVM_SUPPORTED_RUNTIMES "libc;libunwind;libcxxabi;pstl;libcxx;compiler-rt;openmp;llvm-libgcc;offload;FortranRuntime")
+set(LLVM_SUPPORTED_RUNTIMES "libc;libunwind;libcxxabi;pstl;libcxx;compiler-rt;openmp;llvm-libgcc;offload;flang-rt")
set(LLVM_ENABLE_RUNTIMES "" CACHE STRING
"Semicolon-separated list of runtimes to build, or \"all\" (${LLVM_DEFAULT_RUNTIMES}). Supported runtimes are ${LLVM_SUPPORTED_RUNTIMES}.")
if(LLVM_ENABLE_RUNTIMES STREQUAL "all")
diff --git a/llvm/projects/CMakeLists.txt b/llvm/projects/CMakeLists.txt
index d8808bc79f0129..f254cf10806d75 100644
--- a/llvm/projects/CMakeLists.txt
+++ b/llvm/projects/CMakeLists.txt
@@ -12,7 +12,7 @@ foreach(entry ${entries})
(NOT ${entry} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}/test-suite) AND
(NOT ${entry} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}/openmp) AND
(NOT ${entry} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}/cross-project-tests) AND
- (NOT ${entry} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}/FortranRuntime))
+ (NOT ${entry} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}/flang-rt))
get_filename_component(entry_name "${entry}" NAME)
add_llvm_external_project(${entry_name})
endif()
@@ -38,7 +38,7 @@ if(${LLVM_BUILD_RUNTIME})
if(NOT LLVM_BUILD_EXTERNAL_COMPILER_RT)
add_llvm_external_project(compiler-rt)
endif()
- add_llvm_external_project(FortranRuntime)
+ add_llvm_external_project(flang-rt)
endif()
add_llvm_external_project(dragonegg)
diff --git a/llvm/runtimes/CMakeLists.txt b/llvm/runtimes/CMakeLists.txt
index 80f1cf5d6b6ea6..79abe65b4c17d6 100644
--- a/llvm/runtimes/CMakeLists.txt
+++ b/llvm/runtimes/CMakeLists.txt
@@ -280,8 +280,8 @@ function(runtime_default_target)
${ARG_CMAKE_ARGS}
PASSTHROUGH_PREFIXES LLVM_ENABLE_RUNTIMES
LLVM_USE_LINKER
- CUDA # For runtimes that may look for the CUDA SDK (libc, offload)
- FLANG_RUNTIME # Shared between Flang and FortranRuntime
+ CUDA # For runtimes that may look for the CUDA SDK (libc, offload, flang-rt)
+ FLANG_RUNTIME # Shared between Flang and Flang-RT
${ARG_PREFIXES}
EXTRA_TARGETS ${extra_targets}
${test_targets}
@@ -573,7 +573,7 @@ if(build_runtimes)
if(LLVM_LIBC_FULL_BUILD)
list(APPEND extra_cmake_args "-DLLVM_LIBC_FULL_BUILD=ON")
endif()
- if("FortranRuntime" IN_LIST LLVM_ENABLE_RUNTIMES)
+ if("flang-rt" IN_LIST LLVM_ENABLE_RUNTIMES)
set(enable_fortran ENABLE_FORTRAN)
endif ()
diff --git a/runtimes/CMakeLists.txt b/runtimes/CMakeLists.txt
index 2a7798fd60af42..1dc42ddc27d2d0 100644
--- a/runtimes/CMakeLists.txt
+++ b/runtimes/CMakeLists.txt
@@ -23,8 +23,8 @@ list(INSERT CMAKE_MODULE_PATH 0
# We order libraries to mirror roughly how they are layered, except that compiler-rt can depend
# on libc++, so we put it after.
-set(LLVM_DEFAULT_RUNTIMES "libc;libunwind;libcxxabi;pstl;libcxx;compiler-rt;openmp;offload;FortranRuntime")
-set(LLVM_SUPPORTED_RUNTIMES "${LLVM_DEFAULT_RUNTIMES};llvm-libgcc")
+set(LLVM_DEFAULT_RUNTIMES "libc;libunwind;libcxxabi;pstl;libcxx;compiler-rt;openmp;offload")
+set(LLVM_SUPPORTED_RUNTIMES "${LLVM_DEFAULT_RUNTIMES};llvm-libgcc;flang-rt")
set(LLVM_ENABLE_RUNTIMES "" CACHE STRING
"Semicolon-separated list of runtimes to build, or \"all\" (${LLVM_DEFAULT_RUNTIMES}). Supported runtimes are ${LLVM_SUPPORTED_RUNTIMES}.")
if(LLVM_ENABLE_RUNTIMES STREQUAL "all" )
>From cf35e503c8642f4f378f910faf51de5da75607b2 Mon Sep 17 00:00:00 2001
From: Michael Kruse <llvm-project at meinersbur.de>
Date: Wed, 16 Oct 2024 12:46:47 +0200
Subject: [PATCH 20/32] Update MinGW.cpp
---
lld/COFF/MinGW.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lld/COFF/MinGW.cpp b/lld/COFF/MinGW.cpp
index ae51bd5fcae62e..d5614996e490c2 100644
--- a/lld/COFF/MinGW.cpp
+++ b/lld/COFF/MinGW.cpp
@@ -53,7 +53,7 @@ AutoExporter::AutoExporter(
"libflang_rt",
"libflang_rt.static",
"libflang_rt.dynamic",
- "libflang_rtstatic_dbg",
+ "libflang_rt.static_dbg",
"libflang_rt.dynamic_dbg",
"libunwind",
"libmsvcrt",
>From 193d23da25f4f76a466262198e90bb02c93d4046 Mon Sep 17 00:00:00 2001
From: Michael Kruse <llvm-project at meinersbur.de>
Date: Thu, 17 Oct 2024 17:25:26 +0200
Subject: [PATCH 21/32] Undo whitespace changes in common.cpp
---
flang/lib/Evaluate/common.cpp | 3 ---
1 file changed, 3 deletions(-)
diff --git a/flang/lib/Evaluate/common.cpp b/flang/lib/Evaluate/common.cpp
index ed040b0728c4db..c633bff57b1ecd 100644
--- a/flang/lib/Evaluate/common.cpp
+++ b/flang/lib/Evaluate/common.cpp
@@ -11,11 +11,8 @@
using namespace Fortran::parser::literals;
-
-
namespace Fortran::evaluate {
-
void RealFlagWarnings(
FoldingContext &context, const RealFlags &flags, const char *operation) {
if (context.languageFeatures().ShouldWarn(
>From 035afc6b79f353ea580ced166d4880b8b65bd2de Mon Sep 17 00:00:00 2001
From: Michael Kruse <llvm-project at meinersbur.de>
Date: Thu, 17 Oct 2024 21:52:53 +0200
Subject: [PATCH 22/32] use ARG_EXTRA_ARGS
---
llvm/runtimes/CMakeLists.txt | 21 ++++++++++-----------
1 file changed, 10 insertions(+), 11 deletions(-)
diff --git a/llvm/runtimes/CMakeLists.txt b/llvm/runtimes/CMakeLists.txt
index 79abe65b4c17d6..6e2a4a10522e38 100644
--- a/llvm/runtimes/CMakeLists.txt
+++ b/llvm/runtimes/CMakeLists.txt
@@ -137,7 +137,6 @@ function(builtin_register_target compiler_rt_path name)
-DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON
-DLLVM_CMAKE_DIR=${CMAKE_BINARY_DIR}
-DCMAKE_C_COMPILER_WORKS=ON
- -DCMAKE_Fortran_COMPILER_WORKS=ON
-DCMAKE_ASM_COMPILER_WORKS=ON
-DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON
${COMMON_CMAKE_ARGS}
@@ -232,7 +231,7 @@ foreach(entry ${runtimes})
endforeach()
function(runtime_default_target)
- cmake_parse_arguments(ARG "" "" "DEPENDS;CMAKE_ARGS;PREFIXES" ${ARGN})
+ cmake_parse_arguments(ARG "" "" "DEPENDS;CMAKE_ARGS;PREFIXES;EXTRA_ARGS" ${ARGN})
include(${LLVM_BINARY_DIR}/runtimes/Components.cmake OPTIONAL)
set(SUB_CHECK_TARGETS ${SUB_CHECK_TARGETS} PARENT_SCOPE)
@@ -263,7 +262,6 @@ function(runtime_default_target)
llvm_ExternalProject_Add(runtimes
${CMAKE_CURRENT_SOURCE_DIR}/../../runtimes
DEPENDS ${ARG_DEPENDS}
- ${enable_fortran}
# Builtins were built separately above
CMAKE_ARGS -DCOMPILER_RT_BUILD_BUILTINS=Off
-DLLVM_INCLUDE_TESTS=${LLVM_INCLUDE_TESTS}
@@ -291,7 +289,7 @@ function(runtime_default_target)
USE_TOOLCHAIN
TARGET_TRIPLE ${LLVM_TARGET_TRIPLE}
FOLDER "Runtimes"
- ${EXTRA_ARGS})
+ ${EXTRA_ARGS} ${ARG_EXTRA_ARGS})
endfunction()
# runtime_register_target(name)
@@ -401,7 +399,6 @@ function(runtime_register_target name)
llvm_ExternalProject_Add(runtimes-${name}
${CMAKE_CURRENT_SOURCE_DIR}/../../runtimes
DEPENDS ${ARG_DEPENDS}
- ${enable_fortran}
# Builtins were built separately above
CMAKE_ARGS -DCOMPILER_RT_BUILD_BUILTINS=OFF
-DLLVM_INCLUDE_TESTS=${LLVM_INCLUDE_TESTS}
@@ -469,7 +466,7 @@ if(build_runtimes)
# together in a single CMake invocation.
set(extra_deps "")
set(extra_cmake_args "")
- set(enable_fortran "")
+ set(extra_args "")
if(LLVM_INCLUDE_TESTS)
foreach(dep FileCheck
@@ -574,21 +571,23 @@ if(build_runtimes)
list(APPEND extra_cmake_args "-DLLVM_LIBC_FULL_BUILD=ON")
endif()
if("flang-rt" IN_LIST LLVM_ENABLE_RUNTIMES)
- set(enable_fortran ENABLE_FORTRAN)
+ list(APPEND extra_args ENABLE_FORTRAN)
endif ()
if(NOT LLVM_RUNTIME_TARGETS)
runtime_default_target(
DEPENDS ${builtins_dep} ${extra_deps}
CMAKE_ARGS ${extra_cmake_args}
- PREFIXES ${prefixes})
+ PREFIXES ${prefixes}
+ EXTRA_ARGS ${extra_args})
set(test_targets check-runtimes)
else()
if("default" IN_LIST LLVM_RUNTIME_TARGETS)
runtime_default_target(
DEPENDS ${builtins_dep} ${extra_deps}
CMAKE_ARGS ${extra_cmake_args}
- PREFIXES ${prefixes})
+ PREFIXES ${prefixes}
+ EXTRA_ARGS ${extra_args})
list(REMOVE_ITEM LLVM_RUNTIME_TARGETS "default")
else()
add_custom_target(runtimes)
@@ -635,7 +634,7 @@ if(build_runtimes)
runtime_register_target(${name}
DEPENDS ${builtins_dep_name} ${extra_deps}
CMAKE_ARGS -DLLVM_DEFAULT_TARGET_TRIPLE=${name} ${extra_cmake_args}
- EXTRA_ARGS TARGET_TRIPLE ${name})
+ EXTRA_ARGS TARGET_TRIPLE ${name} ${extra_args})
endforeach()
foreach(multilib ${LLVM_RUNTIME_MULTILIBS})
@@ -646,7 +645,7 @@ if(build_runtimes)
-DLLVM_RUNTIMES_PREFIX=${name}/
-DLLVM_RUNTIMES_LIBDIR_SUBDIR=${multilib}
BASE_NAME ${name}
- EXTRA_ARGS TARGET_TRIPLE ${name})
+ EXTRA_ARGS TARGET_TRIPLE ${name} ${extra_args})
endforeach()
endforeach()
endif()
>From 08c1be224e69e1d3113984fb7cca5503d65f5d25 Mon Sep 17 00:00:00 2001
From: Michael Kruse <llvm-project at meinersbur.de>
Date: Thu, 17 Oct 2024 22:55:26 +0200
Subject: [PATCH 23/32] Re-insert flang-rt dependency check
---
llvm/CMakeLists.txt | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/llvm/CMakeLists.txt b/llvm/CMakeLists.txt
index 60daeaae6613e9..71ce7593b6f395 100644
--- a/llvm/CMakeLists.txt
+++ b/llvm/CMakeLists.txt
@@ -144,6 +144,12 @@ if ("flang" IN_LIST LLVM_ENABLE_PROJECTS)
endif()
endif()
+if ("flang-rt" IN_LIST LLVM_ENABLE_RUNTIMES)
+ if (NOT "flang" IN_LIST LLVM_ENABLE_PROJECTS)
+ message(FATAL_ERROR "Flang is not enabled, but is required for the Flang-RT runtime")
+ endif ()
+endif ()
+
# Select the runtimes to build
#
# As we migrate runtimes to using the bootstrapping build, the set of default runtimes
>From 2f36f41cd1de57c1ba30ef33b866963e3853c286 Mon Sep 17 00:00:00 2001
From: Michael Kruse <llvm-project at meinersbur.de>
Date: Mon, 21 Oct 2024 18:02:37 +0200
Subject: [PATCH 24/32] Fix GTest include search path with other runtimes
---
flang-rt/CMakeLists.txt | 2 +-
flang-rt/cmake/modules/AddFlangRT.cmake | 4 ++--
flang-rt/unittests/CMakeLists.txt | 7 +++++--
3 files changed, 8 insertions(+), 5 deletions(-)
diff --git a/flang-rt/CMakeLists.txt b/flang-rt/CMakeLists.txt
index bd83a51482f4af..2114792d7cc998 100644
--- a/flang-rt/CMakeLists.txt
+++ b/flang-rt/CMakeLists.txt
@@ -43,7 +43,7 @@ if (LLVM_TREE_AVAILABLE)
# flang-new uses the same resource dir as clang.
include(GetClangResourceDir)
get_clang_resource_dir(FLANGRT_BUILD_LIB_DIR PREFIX "${LLVM_LIBRARY_OUTPUT_INTDIR}/.." SUBDIR "lib${LLVM_LIBDIR_SUFFIX}")
- get_clang_resource_dir(FLANGRT_INSTALL_LIB_DIR SUBDIR "lib${LLVM_LIBDIR_SUFFIX}") # No prefix, CMake's install command find the install prefix itself
+ get_clang_resource_dir(FLANGRT_INSTALL_LIB_DIR SUBDIR "lib${LLVM_LIBDIR_SUFFIX}") # No prefix, CMake's install command finds the install prefix itself
else ()
set(FLANGRT_BUILD_LIB_DIR "${LLVM_LIBRARY_OUTPUT_INTDIR}")
set(FLANGRT_INSTALL_LIB_DIR "lib${LLVM_LIBDIR_SUFFIX}")
diff --git a/flang-rt/cmake/modules/AddFlangRT.cmake b/flang-rt/cmake/modules/AddFlangRT.cmake
index 797eeddae32142..244aada5092887 100644
--- a/flang-rt/cmake/modules/AddFlangRT.cmake
+++ b/flang-rt/cmake/modules/AddFlangRT.cmake
@@ -102,8 +102,8 @@ function (add_flangrt_library name)
else()
llvm_map_components_to_libnames(llvm_libs Support)
endif()
- target_link_libraries(${name} PUBLIC ${llvm_libs})
- target_include_directories(${name} PRIVATE ${LLVM_INCLUDE_DIRS})
+ target_link_libraries(${name} PUBLIC ${llvm_libs})
+ target_include_directories(${name} PUBLIC ${LLVM_INCLUDE_DIRS})
endif ()
# If this is part of the toolchain, put it into the compiler's resource
diff --git a/flang-rt/unittests/CMakeLists.txt b/flang-rt/unittests/CMakeLists.txt
index d6ed84c9f72bf0..43dc2b5a4ac48b 100644
--- a/flang-rt/unittests/CMakeLists.txt
+++ b/flang-rt/unittests/CMakeLists.txt
@@ -7,9 +7,8 @@
#===------------------------------------------------------------------------===#
# Add GTest if not already present.
-# Using a function so include_directories/LLVM_SUBPROJECT_TITLE does not propagate
+# Using a function so LLVM_SUBPROJECT_TITLE does not propagate.
function (build_gtest)
- include_directories("${LLVM_INCLUDE_DIR}" "${LLVM_MAIN_INCLUDE_DIR}")
set(LLVM_SUBPROJECT_TITLE "Third-Party/Google Test")
add_subdirectory("${LLVM_THIRD_PARTY_DIR}/unittest" "${CMAKE_CURRENT_BINARY_DIR}/third-party/unittest")
endfunction ()
@@ -17,6 +16,10 @@ if (NOT TARGET llvm_gtest)
build_gtest()
endif ()
+# LLVM's modified GTest depends on LLVM, but not all runtime projects using
+# GTest also add the include search path.
+target_include_directories(llvm_gtest PUBLIC "${LLVM_INCLUDE_DIR}" "${LLVM_MAIN_INCLUDE_DIR}")
+
# Required because LLVMSupport is compiled with this option (by default).
set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreadedDLL)
>From 3cf5f3fc31b024370fd8ddbb994362742e35d2a0 Mon Sep 17 00:00:00 2001
From: Michael Kruse <llvm-project at meinersbur.de>
Date: Mon, 21 Oct 2024 20:04:57 +0200
Subject: [PATCH 25/32] Avoid global add_definitions
---
flang-rt/CMakeLists.txt | 4 ----
flang-rt/cmake/modules/AddFlangRT.cmake | 7 +++++++
2 files changed, 7 insertions(+), 4 deletions(-)
diff --git a/flang-rt/CMakeLists.txt b/flang-rt/CMakeLists.txt
index 2114792d7cc998..942bc7274e42ee 100644
--- a/flang-rt/CMakeLists.txt
+++ b/flang-rt/CMakeLists.txt
@@ -143,10 +143,6 @@ endif()
set(CMAKE_CXX_STANDARD 17 CACHE STRING "C++ standard to conform to")
set(CMAKE_CXX_STANDARD_REQUIRED YES)
-# Disable libstdc++/libc++ assertions, even in an LLVM_ENABLE_ASSERTIONS build,
-# to avoid an unwanted dependency on libstdc++/libc++.so.
-add_definitions(-U_GLIBCXX_ASSERTIONS)
-add_definitions(-U_LIBCPP_ENABLE_ASSERTIONS)
configure_file(cmake/config.h.cmake.in config.h)
diff --git a/flang-rt/cmake/modules/AddFlangRT.cmake b/flang-rt/cmake/modules/AddFlangRT.cmake
index 244aada5092887..ae867f3fe4e8eb 100644
--- a/flang-rt/cmake/modules/AddFlangRT.cmake
+++ b/flang-rt/cmake/modules/AddFlangRT.cmake
@@ -86,6 +86,13 @@ function (add_flangrt_library name)
# For flang-rt's configured config.h to be found
target_include_directories(${name} PRIVATE "${FLANGRT_BINARY_DIR}")
+ # Disable libstdc++/libc++ assertions, even in an LLVM_ENABLE_ASSERTIONS
+ # build, to avoid an unwanted dependency on libstdc++/libc++.so.
+ if (CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "GNU")
+ target_compile_options(${name} PUBLIC -U_GLIBCXX_ASSERTIONS)
+ target_compile_options(${name} PUBLIC -U_LIBCPP_ENABLE_ASSERTIONS)
+ endif ()
+
# Flang/Clang (including clang-cl) -compiled programs targeting the MSVC ABI
# should only depend on msv(u)crt. LLVM still emits libgcc/compiler-rt
# functions for 128-bit integer math (__udivti3, __modti3, __fixsfti,
>From 94725384ae691275abbb65e4f667a1f267a09b96 Mon Sep 17 00:00:00 2001
From: Michael Kruse <llvm-project at meinersbur.de>
Date: Tue, 22 Oct 2024 11:34:11 +0200
Subject: [PATCH 26/32] Fix FortranFloat128Math include path
---
flang-rt/README.md | 5 +++++
flang-rt/lib/FortranFloat128Math/CMakeLists.txt | 9 +++++++++
2 files changed, 14 insertions(+)
diff --git a/flang-rt/README.md b/flang-rt/README.md
index 01836f9d8f714d..b398ecdba82818 100644
--- a/flang-rt/README.md
+++ b/flang-rt/README.md
@@ -100,10 +100,15 @@ cmake -S <path-to-llvm-project>/runtimes \
-GNinja \
-DLLVM_BINARY_DIR=<path-to-llvm-builddir> \
-DCMAKE_Fortran_COMPILER=<path-to-llvm-builddir>/bin/flang-new \
+ -DCMAKE_Fortran_COMPILER_WORKS=yes \
-DLLVM_ENABLE_RUNTIMES=flang-rt \
...
```
+The `CMAKE_Fortran_COMPILER_WORKS` parameter must be set because otherwise CMake
+will test whether the Fortran compiler can compile and link programs which will
+obviously fail without a runtime library available yet.
+
Building flang-rt for cross-compilation triple, the target triple can
be selected using `LLVM_DEFAULT_TARGET_TRIPLE` AND `LLVM_RUNTIMES_TARGET`.
Of course, flang-rt can be built multiple times with different build
diff --git a/flang-rt/lib/FortranFloat128Math/CMakeLists.txt b/flang-rt/lib/FortranFloat128Math/CMakeLists.txt
index b12dfee64af8f6..0d8ef07d404029 100644
--- a/flang-rt/lib/FortranFloat128Math/CMakeLists.txt
+++ b/flang-rt/lib/FortranFloat128Math/CMakeLists.txt
@@ -98,6 +98,9 @@ if (FLANG_RUNTIME_F128_MATH_LIB)
add_flangrt_library(FortranFloat128Math STATIC INSTALL_WITH_TOOLCHAIN
${sources})
endif ()
+ target_include_directories(FortranFloat128Math PRIVATE
+ "${FLANGRT_SOURCE_DIR}/lib/flang_rt"
+ )
elseif (HAVE_LDBL_MANT_DIG_113)
# We can use 'long double' versions from libc.
check_library_exists(m sinl "" FOUND_LIBM)
@@ -105,6 +108,9 @@ elseif (HAVE_LDBL_MANT_DIG_113)
target_compile_definitions(FortranFloat128MathILib INTERFACE
HAS_LIBM
)
+ target_include_directories(FortranFloat128MathILib INTERFACE
+ "${FLANGRT_SOURCE_DIR}/lib/flang_rt"
+ )
target_sources(FortranFloat128MathILib INTERFACE ${sources})
else()
message(FATAL_ERROR "flang-rt cannot build without libm")
@@ -116,6 +122,9 @@ else()
target_compile_definitions(FortranFloat128MathILib INTERFACE
HAS_LIBMF128
)
+ target_include_directories(FortranFloat128MathILib INTERFACE
+ "${FLANGRT_SOURCE_DIR}/lib/flang_rt"
+ )
# Enable this, when math-entries.h and complex-math.h is ready.
# target_sources(FortranFloat128MathILib INTERFACE ${sources})
endif()
>From 2c5be300fd692dbbd3dc948949d22322601995ae Mon Sep 17 00:00:00 2001
From: Michael Kruse <llvm-project at meinersbur.de>
Date: Tue, 22 Oct 2024 12:16:35 +0200
Subject: [PATCH 27/32] Fix OpenMP linking
---
flang-rt/cmake/modules/AddFlangRTOffload.cmake | 3 ++-
flang-rt/lib/flang_rt/CMakeLists.txt | 4 ++--
2 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/flang-rt/cmake/modules/AddFlangRTOffload.cmake b/flang-rt/cmake/modules/AddFlangRTOffload.cmake
index a6b94602b0456f..dc1d778156cabe 100644
--- a/flang-rt/cmake/modules/AddFlangRTOffload.cmake
+++ b/flang-rt/cmake/modules/AddFlangRTOffload.cmake
@@ -60,7 +60,7 @@ macro(enable_cuda_compilation name files)
endif()
endmacro()
-macro(enable_omp_offload_compilation files)
+macro(enable_omp_offload_compilation name files)
if (FLANG_RT_EXPERIMENTAL_OFFLOAD_SUPPORT STREQUAL "OpenMP")
# OpenMP offload build only works with Clang compiler currently.
@@ -108,6 +108,7 @@ macro(enable_omp_offload_compilation files)
set_source_files_properties(${files} PROPERTIES COMPILE_OPTIONS
"${OMP_COMPILE_OPTIONS}"
)
+ target_link_options(${name} PUBLIC ${OMP_COMPILE_OPTIONS})
# Enable "declare target" in the source code.
set_source_files_properties(${files}
diff --git a/flang-rt/lib/flang_rt/CMakeLists.txt b/flang-rt/lib/flang_rt/CMakeLists.txt
index 860152c39c7204..059fcb45bd5380 100644
--- a/flang-rt/lib/flang_rt/CMakeLists.txt
+++ b/flang-rt/lib/flang_rt/CMakeLists.txt
@@ -123,7 +123,7 @@ if (NOT WIN32)
)
enable_cuda_compilation(flang_rt "${supported_sources}")
- enable_omp_offload_compilation("${supported_sources}")
+ enable_omp_offload_compilation(flang_rt "${supported_sources}")
# For unittests that depend on flang_rt. Should link to the static version
# of the library.
@@ -148,7 +148,7 @@ else()
)
enable_cuda_compilation(${name} "${supported_sources}")
- enable_omp_offload_compilation("${supported_sources}")
+ enable_omp_offload_compilation(${name} "${supported_sources}")
endfunction ()
add_win_flangrt_library(STATIC static MultiThreaded)
>From c829f91cec578db587b44675554bc01e0aa77b32 Mon Sep 17 00:00:00 2001
From: Michael Kruse <llvm-project at meinersbur.de>
Date: Tue, 22 Oct 2024 12:26:43 +0200
Subject: [PATCH 28/32] Re-apply: use Fortran::common::optional for CUDA build
---
flang/include/flang/Common/fast-int-set.h | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/flang/include/flang/Common/fast-int-set.h b/flang/include/flang/Common/fast-int-set.h
index d1c9c756a44a65..1214bac75a4bf1 100644
--- a/flang/include/flang/Common/fast-int-set.h
+++ b/flang/include/flang/Common/fast-int-set.h
@@ -24,7 +24,7 @@
#ifndef FORTRAN_COMMON_FAST_INT_SET_H_
#define FORTRAN_COMMON_FAST_INT_SET_H_
-#include <optional>
+#include "optional.h"
namespace Fortran::common {
@@ -83,9 +83,9 @@ template <int N> class FastIntSet {
}
}
- std::optional<int> PopValue() {
+ optional<int> PopValue() {
if (IsEmpty()) {
- return std::nullopt;
+ return nullopt;
} else {
return value_[--size_];
}
>From a3f3a7bcec2c893960cda59b0ce398dd3a982a69 Mon Sep 17 00:00:00 2001
From: Michael Kruse <llvm-project at meinersbur.de>
Date: Thu, 31 Oct 2024 10:56:00 +0100
Subject: [PATCH 29/32] Support for CMake 3.20-3.23
---
flang-rt/CMakeLists.txt | 43 +++++++++++++++++++++++++
flang-rt/cmake/modules/AddFlangRT.cmake | 2 +-
2 files changed, 44 insertions(+), 1 deletion(-)
diff --git a/flang-rt/CMakeLists.txt b/flang-rt/CMakeLists.txt
index 942bc7274e42ee..4156f0a11ca522 100644
--- a/flang-rt/CMakeLists.txt
+++ b/flang-rt/CMakeLists.txt
@@ -16,8 +16,42 @@ set(FLANGRT_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
set(FLANGRT_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}")
set(FLANG_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../flang")
+
+# CMake 3.24 is the first version of CMake that directly recognizes Flang.
+# LLVM's requirement is only CMake 3.20, teach CMake 3.20-3.23 how to use Flang.
+if (CMAKE_VERSION VERSION_LESS "3.24")
+ cmake_path(GET CMAKE_Fortran_COMPILER STEM _Fortran_COMPILER_STEM)
+ if (_Fortran_COMPILER_STEM STREQUAL "flang-new" OR _Fortran_COMPILER_STEM STREQUAL "flang")
+ include(CMakeForceCompiler)
+ CMAKE_FORCE_Fortran_COMPILER("${CMAKE_Fortran_COMPILER}" "LLVMFlang")
+
+ set(CMAKE_Fortran_COMPILER_ID "LLVMFlang")
+ set(CMAKE_Fortran_COMPILER_VERSION "20.0")
+
+ set(CMAKE_Fortran_SUBMODULE_SEP "-")
+ set(CMAKE_Fortran_SUBMODULE_EXT ".mod")
+
+ set(CMAKE_Fortran_PREPROCESS_SOURCE
+ "<CMAKE_Fortran_COMPILER> -cpp <DEFINES> <INCLUDES> <FLAGS> -E <SOURCE> > <PREPROCESSED_SOURCE>")
+
+ set(CMAKE_Fortran_FORMAT_FIXED_FLAG "-ffixed-form")
+ set(CMAKE_Fortran_FORMAT_FREE_FLAG "-ffree-form")
+
+ set(CMAKE_Fortran_MODDIR_FLAG "-module-dir")
+
+ set(CMAKE_Fortran_COMPILE_OPTIONS_PREPROCESS_ON "-cpp")
+ set(CMAKE_Fortran_COMPILE_OPTIONS_PREPROCESS_OFF "-nocpp")
+ set(CMAKE_Fortran_POSTPROCESS_FLAG "-ffixed-line-length-72")
+
+ set(CMAKE_Fortran_COMPILE_OPTIONS_TARGET "--target=")
+
+ set(CMAKE_Fortran_LINKER_WRAPPER_FLAG "-Wl,")
+ set(CMAKE_Fortran_LINKER_WRAPPER_FLAG_SEP ",")
+ endif ()
+endif ()
enable_language(Fortran)
+
list(APPEND CMAKE_MODULE_PATH
"${FLANGRT_SOURCE_DIR}/cmake/modules"
"${FLANG_SOURCE_DIR}/cmake/modules"
@@ -67,6 +101,7 @@ endif ()
option(FLANG_RT_INCLUDE_TESTS "Generate build targets for the flang-rt unit and regression-tests." "${LLVM_INCLUDE_TESTS}")
+
set(FLANG_RT_EXPERIMENTAL_OFFLOAD_SUPPORT "" CACHE STRING "Compile flang-rt with GPU support (CUDA or OpenMP)")
set_property(CACHE FLANG_RT_EXPERIMENTAL_OFFLOAD_SUPPORT PROPERTY STRINGS
""
@@ -84,6 +119,7 @@ else ()
message(FATAL_ERROR "Invalid value '${FLANG_RT_EXPERIMENTAL_OFFLOAD_SUPPORT}' for FLANG_RT_EXPERIMENTAL_OFFLOAD_SUPPORT; must be empty, 'CUDA', or 'OpenMP'")
endif ()
+
option(FLANG_RT_ENABLE_CUF "Compile CUDA Fortran runtime sources" OFF)
if (FLANG_RT_ENABLE_CUF)
find_package(CUDAToolkit REQUIRED)
@@ -124,6 +160,13 @@ if (WIN32)
endif ()
+# Check whether the compiler can undefine a macro using the "-U" flag.
+# Aternatively, we could use
+# CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "GNU"
+# but some older versions of CMake don't define it for GCC itself.
+check_cxx_compiler_flag("-UTESTFLAG" FLANG_RT_SUPPORTS_UNDEFINE_FLAG)
+
+
#####################
# Build Preparation #
#####################
diff --git a/flang-rt/cmake/modules/AddFlangRT.cmake b/flang-rt/cmake/modules/AddFlangRT.cmake
index ae867f3fe4e8eb..360a9cf22bbc4c 100644
--- a/flang-rt/cmake/modules/AddFlangRT.cmake
+++ b/flang-rt/cmake/modules/AddFlangRT.cmake
@@ -88,7 +88,7 @@ function (add_flangrt_library name)
# Disable libstdc++/libc++ assertions, even in an LLVM_ENABLE_ASSERTIONS
# build, to avoid an unwanted dependency on libstdc++/libc++.so.
- if (CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "GNU")
+ if (FLANG_RT_SUPPORTS_UNDEFINE_FLAG)
target_compile_options(${name} PUBLIC -U_GLIBCXX_ASSERTIONS)
target_compile_options(${name} PUBLIC -U_LIBCPP_ENABLE_ASSERTIONS)
endif ()
>From 16e33efe5ee44c078a127971426072e9cd9ba713 Mon Sep 17 00:00:00 2001
From: Michael Kruse <llvm-project at meinersbur.de>
Date: Thu, 31 Oct 2024 14:11:33 +0100
Subject: [PATCH 30/32] Windows shared library currently not supported
---
flang-rt/CMakeLists.txt | 6 +++++
flang-rt/cmake/modules/AddFlangRT.cmake | 8 +++++-
flang-rt/lib/flang_rt/CMakeLists.txt | 34 +++++++++++++++----------
flang-rt/test/CMakeLists.txt | 10 +++++---
4 files changed, 39 insertions(+), 19 deletions(-)
diff --git a/flang-rt/CMakeLists.txt b/flang-rt/CMakeLists.txt
index 4156f0a11ca522..fa99fa0121de4c 100644
--- a/flang-rt/CMakeLists.txt
+++ b/flang-rt/CMakeLists.txt
@@ -190,6 +190,12 @@ set(CMAKE_CXX_STANDARD_REQUIRED YES)
configure_file(cmake/config.h.cmake.in config.h)
+# The bootstrap build will create a phony target with the same as the top-level
+# directory ("flang-rt") and delegate it to the runtimes build dir.
+# AddFlangRT will add all non-EXCLUDE_FROM_ALL targets to it.
+add_custom_target(flang-rt)
+
+
###################
# Build Artifacts #
###################
diff --git a/flang-rt/cmake/modules/AddFlangRT.cmake b/flang-rt/cmake/modules/AddFlangRT.cmake
index 360a9cf22bbc4c..79a0cf39796d83 100644
--- a/flang-rt/cmake/modules/AddFlangRT.cmake
+++ b/flang-rt/cmake/modules/AddFlangRT.cmake
@@ -51,7 +51,7 @@ function (add_flangrt_library name)
if (ARG_OBJECT)
list(APPEND extra_args OBJECT)
endif ()
- if (EXCLUDE_FROM_ALL)
+ if (ARG_EXCLUDE_FROM_ALL)
list(APPEND extra_args EXCLUDE_FROM_ALL)
endif ()
@@ -130,4 +130,10 @@ function (add_flangrt_library name)
RUNTIME DESTINATION "${FLANGRT_INSTALL_LIB_DIR}"
)
endif ()
+
+ # flang-rt should build all the flang-rt targets that are built in an
+ # 'all' build.
+ if (NOT ARG_EXCLUDE_FROM_ALL)
+ add_dependencies(flang-rt ${name})
+ endif ()
endfunction (add_flangrt_library)
diff --git a/flang-rt/lib/flang_rt/CMakeLists.txt b/flang-rt/lib/flang_rt/CMakeLists.txt
index 059fcb45bd5380..e8bdb1cccdaf63 100644
--- a/flang-rt/lib/flang_rt/CMakeLists.txt
+++ b/flang-rt/lib/flang_rt/CMakeLists.txt
@@ -130,6 +130,10 @@ if (NOT WIN32)
add_library(flang_rt.static ALIAS flang_rt)
add_library(flang_rt.unittest ALIAS flang_rt)
else()
+ # Target for building all versions of the runtime
+ add_custom_target(flang_rt)
+ set_target_properties(flang_rt PROPERTIES FOLDER "Fortran Runtime/Meta")
+
function (add_win_flangrt_library libtype suffix msvc_lib)
set(name "flang_rt.${suffix}")
add_flangrt_library(${name} ${libtype}
@@ -149,6 +153,7 @@ else()
enable_cuda_compilation(${name} "${supported_sources}")
enable_omp_offload_compilation(${name} "${supported_sources}")
+ add_dependencies(flang_rt ${name})
endfunction ()
add_win_flangrt_library(STATIC static MultiThreaded)
@@ -157,18 +162,19 @@ else()
# unittests link against LLVMSupport which is compiled with /MD
add_win_flangrt_library(STATIC unittest MultiThreadedDLL EXCLUDE_FROM_ALL)
- # FIXME: Before DLL versions of the runtime can be used, exported definitions
- # must be annotated with __declspec(dllexport).
- add_win_flangrt_library(SHARED dynamic MultiThreadedDLL)
- add_win_flangrt_library(SHARED dynamic_dbg MultiThreadedDebugDLL)
-
- # Target for building all versions of the runtime
- add_custom_target(flang_rt)
- set_target_properties(flang_rt PROPERTIES FOLDER "Fortran Runtime/Meta")
- add_dependencies(flang_rt
- flang_rt.static
- flang_rt.static_dbg
- flang_rt.dynamic
- flang_rt.dynamic_dbg
- )
+ # FIXME: Generating runtime DLLs is currently not possible. There are two
+ # roadblocks:
+ #
+ # * Flang emits /DEFAULTLIB:flang_rt.dynamic.lib into
+ # iso_fortran_env_impl.f90.obj. Since that file is itself part of
+ # flang_rt.dynamic, this results in a recursive dependency when invoking
+ # the linker.
+ #
+ # * The externally-visible functions must either by annotated with
+ # __declspec(dllexport), or listed in a exports file. A possible workaround
+ # is CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS which would also export the internal
+ # C++ symbols.
+ #
+ #add_win_flangrt_library(SHARED dynamic MultiThreadedDLL)
+ #add_win_flangrt_library(SHARED dynamic_dbg MultiThreadedDebugDLL)
endif()
diff --git a/flang-rt/test/CMakeLists.txt b/flang-rt/test/CMakeLists.txt
index be42717b2834f3..6c542d522f4762 100644
--- a/flang-rt/test/CMakeLists.txt
+++ b/flang-rt/test/CMakeLists.txt
@@ -44,6 +44,7 @@ endif ()
set(FLANGRT_TEST_DEPENDS
FlangRTUnitTests
flang_rt.unittest
+ flang_rt.static
)
add_custom_target(flang-rt-test-depends)
@@ -51,11 +52,12 @@ set_target_properties(flang-rt-test-depends PROPERTIES FOLDER "Fortran Runtime/M
add_dependencies(flang-rt-test-depends ${FLANGRT_TEST_DEPENDS})
add_lit_testsuite(check-flang-rt "Running the flang-rt regression tests"
- ${CMAKE_CURRENT_BINARY_DIR}
- DEPENDS ${FLANGRT_TEST_DEPENDS}
-)
+ ${CMAKE_CURRENT_BINARY_DIR}
+ DEPENDS flang-rt-test-depends
+ )
set_target_properties(check-flang-rt PROPERTIES FOLDER "Fortran Runtime/Meta")
add_lit_testsuites(flang-rt ${CMAKE_CURRENT_SOURCE_DIR}
- DEPENDS ${FLANGRT_TEST_DEPENDS})
+ DEPENDS flang-rt-test-depends
+ )
>From 472893a5a897219252b9d47e749465b119741e96 Mon Sep 17 00:00:00 2001
From: Michael Kruse <llvm-project at meinersbur.de>
Date: Thu, 31 Oct 2024 15:14:29 +0100
Subject: [PATCH 31/32] LLVM also requires C++17
---
flang-rt/README.md | 2 --
1 file changed, 2 deletions(-)
diff --git a/flang-rt/README.md b/flang-rt/README.md
index b398ecdba82818..54e23f7e07926b 100644
--- a/flang-rt/README.md
+++ b/flang-rt/README.md
@@ -29,8 +29,6 @@ source directory. LLVM does not support in-source builds.
Requirements:
* [Same as LLVM](https://llvm.org/docs/GettingStarted.html#requirements).
- * While for LLVM C++14 suffices, Flang and flang-rt require a
- C++17-capable C++ compiler.
### Bootstrap/In-Tree Build
>From 39d6d9694b65012cda0b88dbf1865f29ddbe83f6 Mon Sep 17 00:00:00 2001
From: Michael Kruse <llvm-project at meinersbur.de>
Date: Mon, 11 Nov 2024 15:38:50 +0100
Subject: [PATCH 32/32] FLANGRT -> FLANG_RT
---
flang-rt/CMakeLists.txt | 26 +++++++++----------
flang-rt/cmake/modules/AddFlangRT.cmake | 20 +++++++-------
.../cmake/modules/AddFlangRTOffload.cmake | 2 +-
flang-rt/include/flang-rt/CUDA/allocator.h | 6 ++---
.../include/flang-rt/allocator-registry.h | 6 ++---
flang-rt/include/flang-rt/array-constructor.h | 6 ++---
flang-rt/include/flang-rt/descriptor.h | 6 ++---
flang-rt/include/flang-rt/io-api-funcs.h | 6 ++---
flang-rt/include/flang-rt/iostat-funcs.h | 6 ++---
flang-rt/include/flang-rt/memory.h | 6 ++---
flang-rt/include/flang-rt/type-code.h | 6 ++---
.../lib/FortranFloat128Math/CMakeLists.txt | 6 ++---
flang-rt/lib/flang_rt/CMakeLists.txt | 8 +++---
flang-rt/lib/flang_rt/ISO_Fortran_util.h | 6 ++---
flang-rt/lib/flang_rt/allocator-registry.cpp | 4 +--
flang-rt/lib/flang_rt/buffer.h | 6 ++---
flang-rt/lib/flang_rt/copy.h | 6 ++---
flang-rt/lib/flang_rt/descriptor-io.h | 6 ++---
flang-rt/lib/flang_rt/environment.cpp | 4 +--
flang-rt/lib/flang_rt/file.h | 6 ++---
flang-rt/lib/flang_rt/internal-unit.h | 6 ++---
flang-rt/lib/flang_rt/io-api-common.h | 6 ++---
flang-rt/lib/flang_rt/io-error.h | 6 ++---
flang-rt/lib/flang_rt/io-stmt.h | 6 ++---
flang-rt/lib/flang_rt/random-templates.h | 6 ++---
flang-rt/lib/flang_rt/reduction-templates.h | 6 ++---
flang-rt/lib/flang_rt/stack.h | 6 ++---
flang-rt/lib/flang_rt/tools.h | 6 ++---
flang-rt/lib/flang_rt/type-info.h | 6 ++---
flang-rt/lib/flang_rt/unit-map.h | 6 ++---
flang-rt/lib/flang_rt/unit.cpp | 4 +--
flang-rt/lib/flang_rt/unit.h | 6 ++---
flang-rt/lib/flang_rt/utf.cpp | 4 +--
flang-rt/test/CMakeLists.txt | 4 +--
flang-rt/test/NonGtestUnit/lit.site.cfg.py.in | 4 +--
flang-rt/test/Unit/lit.site.cfg.py.in | 4 +--
flang-rt/test/lit.site.cfg.py.in | 4 +--
flang-rt/unittests/CMakeLists.txt | 4 +--
flang-rt/unittests/Runtime/tools.h | 6 ++---
39 files changed, 124 insertions(+), 124 deletions(-)
diff --git a/flang-rt/CMakeLists.txt b/flang-rt/CMakeLists.txt
index fa99fa0121de4c..696ebf73c08090 100644
--- a/flang-rt/CMakeLists.txt
+++ b/flang-rt/CMakeLists.txt
@@ -12,8 +12,8 @@
#===------------------------------------------------------------------------===#
set(LLVM_SUBPROJECT_TITLE "Fortran Runtime")
-set(FLANGRT_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
-set(FLANGRT_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}")
+set(FLANG_RT_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
+set(FLANG_RT_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}")
set(FLANG_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../flang")
@@ -53,7 +53,7 @@ enable_language(Fortran)
list(APPEND CMAKE_MODULE_PATH
- "${FLANGRT_SOURCE_DIR}/cmake/modules"
+ "${FLANG_RT_SOURCE_DIR}/cmake/modules"
"${FLANG_SOURCE_DIR}/cmake/modules"
)
include(AddFlangRT)
@@ -76,19 +76,19 @@ if (LLVM_TREE_AVAILABLE)
# Despite Clang in the name, get_clang_resource_dir does not depend on Clang being added to the build
# flang-new uses the same resource dir as clang.
include(GetClangResourceDir)
- get_clang_resource_dir(FLANGRT_BUILD_LIB_DIR PREFIX "${LLVM_LIBRARY_OUTPUT_INTDIR}/.." SUBDIR "lib${LLVM_LIBDIR_SUFFIX}")
- get_clang_resource_dir(FLANGRT_INSTALL_LIB_DIR SUBDIR "lib${LLVM_LIBDIR_SUFFIX}") # No prefix, CMake's install command finds the install prefix itself
+ get_clang_resource_dir(FLANG_RT_BUILD_LIB_DIR PREFIX "${LLVM_LIBRARY_OUTPUT_INTDIR}/.." SUBDIR "lib${LLVM_LIBDIR_SUFFIX}")
+ get_clang_resource_dir(FLANG_RT_INSTALL_LIB_DIR SUBDIR "lib${LLVM_LIBDIR_SUFFIX}") # No prefix, CMake's install command finds the install prefix itself
else ()
- set(FLANGRT_BUILD_LIB_DIR "${LLVM_LIBRARY_OUTPUT_INTDIR}")
- set(FLANGRT_INSTALL_LIB_DIR "lib${LLVM_LIBDIR_SUFFIX}")
+ set(FLANG_RT_BUILD_LIB_DIR "${LLVM_LIBRARY_OUTPUT_INTDIR}")
+ set(FLANG_RT_INSTALL_LIB_DIR "lib${LLVM_LIBDIR_SUFFIX}")
endif ()
if (DEFINED WIN32)
- set(FLANGRT_BUILD_LIB_DIR "${FLANGRT_BUILD_LIB_DIR}/windows")
- set(FLANGRT_INSTALL_LIB_DIR "${FLANGRT_INSTALL_LIB_DIR}/windows")
+ set(FLANG_RT_BUILD_LIB_DIR "${FLANG_RT_BUILD_LIB_DIR}/windows")
+ set(FLANG_RT_INSTALL_LIB_DIR "${FLANG_RT_INSTALL_LIB_DIR}/windows")
elseif (LLVM_ENABLE_PER_TARGET_RUNTIME_DIR)
- set(FLANGRT_BUILD_LIB_DIR "${FLANGRT_BUILD_LIB_DIR}/${LLVM_TARGET_TRIPLE}")
- set(FLANGRT_INSTALL_LIB_DIR "${FLANGRT_INSTALL_LIB_DIR}/${LLVM_TARGET_TRIPLE}")
+ set(FLANG_RT_BUILD_LIB_DIR "${FLANG_RT_BUILD_LIB_DIR}/${LLVM_TARGET_TRIPLE}")
+ set(FLANG_RT_INSTALL_LIB_DIR "${FLANG_RT_INSTALL_LIB_DIR}/${LLVM_TARGET_TRIPLE}")
endif ()
@@ -153,9 +153,9 @@ if (WIN32)
ERROR_QUIET
)
if (NOT CXX_COMPILER_PRINT_LIBGCC_PATH_FAILURE AND CXX_COMPILER_PRINT_LIBGCC_PATH_RESULT)
- string(STRIP "${CXX_COMPILER_PRINT_LIBGCC_PATH_RESULT}" FLANGRT_LIBCALL)
+ string(STRIP "${CXX_COMPILER_PRINT_LIBGCC_PATH_RESULT}" FLANG_RT_LIBCALL)
else ()
- set(FLANGRT_LIBCALL "")
+ set(FLANG_RT_LIBCALL "")
endif ()
endif ()
diff --git a/flang-rt/cmake/modules/AddFlangRT.cmake b/flang-rt/cmake/modules/AddFlangRT.cmake
index 79a0cf39796d83..33c980273152af 100644
--- a/flang-rt/cmake/modules/AddFlangRT.cmake
+++ b/flang-rt/cmake/modules/AddFlangRT.cmake
@@ -77,14 +77,14 @@ function (add_flangrt_library name)
endif ()
# Flang-rt's public headers
- target_include_directories(${name} PRIVATE "${FLANGRT_SOURCE_DIR}/include")
+ target_include_directories(${name} PRIVATE "${FLANG_RT_SOURCE_DIR}/include")
# For ISO_Fortran_binding.h to be found by the runtime itself (Accessed as #include "flang/ISO_Fortran_binding.h")
# User applications can use #include <ISO_Fortran_binding.h>
target_include_directories(${name} PRIVATE "${FLANG_SOURCE_DIR}/include")
# For flang-rt's configured config.h to be found
- target_include_directories(${name} PRIVATE "${FLANGRT_BINARY_DIR}")
+ target_include_directories(${name} PRIVATE "${FLANG_RT_BINARY_DIR}")
# Disable libstdc++/libc++ assertions, even in an LLVM_ENABLE_ASSERTIONS
# build, to avoid an unwanted dependency on libstdc++/libc++.so.
@@ -98,8 +98,8 @@ function (add_flangrt_library name)
# functions for 128-bit integer math (__udivti3, __modti3, __fixsfti,
# __floattidf, ...) that msvc does not support. We are injecting a dependency
# to Compiler-RT where these are implemented.
- if (MSVC AND (CMAKE_CXX_COMPILER_ID MATCHES ".*Clang") AND FLANGRT_LIBCALL)
- target_compile_options(${name} PRIVATE "$<$<COMPILE_LANGUAGE:CXX,C>:-Xclang>$<$<COMPILE_LANGUAGE:Fortran>:-Xflang>" "--dependent-lib=${FLANGRT_LIBCALL}")
+ if (MSVC AND (CMAKE_CXX_COMPILER_ID MATCHES ".*Clang") AND FLANG_RT_LIBCALL)
+ target_compile_options(${name} PRIVATE "$<$<COMPILE_LANGUAGE:CXX,C>:-Xclang>$<$<COMPILE_LANGUAGE:Fortran>:-Xflang>" "--dependent-lib=${FLANG_RT_LIBCALL}")
endif ()
# Non-GTest unittests depend on LLVMSupport
@@ -119,15 +119,15 @@ function (add_flangrt_library name)
if (ARG_INSTALL_WITH_TOOLCHAIN)
set_target_properties(${name}
PROPERTIES
- LIBRARY_OUTPUT_DIRECTORY "${FLANGRT_BUILD_LIB_DIR}"
- ARCHIVE_OUTPUT_DIRECTORY "${FLANGRT_BUILD_LIB_DIR}"
- RUNTIME_OUTPUT_DIRECTORY "${FLANGRT_BUILD_LIB_DIR}"
+ LIBRARY_OUTPUT_DIRECTORY "${FLANG_RT_BUILD_LIB_DIR}"
+ ARCHIVE_OUTPUT_DIRECTORY "${FLANG_RT_BUILD_LIB_DIR}"
+ RUNTIME_OUTPUT_DIRECTORY "${FLANG_RT_BUILD_LIB_DIR}"
)
install(TARGETS ${name}
- LIBRARY DESTINATION "${FLANGRT_INSTALL_LIB_DIR}"
- ARCHIVE DESTINATION "${FLANGRT_INSTALL_LIB_DIR}"
- RUNTIME DESTINATION "${FLANGRT_INSTALL_LIB_DIR}"
+ LIBRARY DESTINATION "${FLANG_RT_INSTALL_LIB_DIR}"
+ ARCHIVE DESTINATION "${FLANG_RT_INSTALL_LIB_DIR}"
+ RUNTIME DESTINATION "${FLANG_RT_INSTALL_LIB_DIR}"
)
endif ()
diff --git a/flang-rt/cmake/modules/AddFlangRTOffload.cmake b/flang-rt/cmake/modules/AddFlangRTOffload.cmake
index dc1d778156cabe..2a02b52e143f4c 100644
--- a/flang-rt/cmake/modules/AddFlangRTOffload.cmake
+++ b/flang-rt/cmake/modules/AddFlangRTOffload.cmake
@@ -54,7 +54,7 @@ macro(enable_cuda_compilation name files)
set_property(TARGET ${name}PTX PROPERTY CUDA_PTX_COMPILATION ON)
if (FLANG_RT_CUDA_RUNTIME_PTX_WITHOUT_GLOBAL_VARS)
target_compile_definitions(${name}PTX
- PRIVATE FLANGRT_NO_GLOBAL_VAR_DEFS
+ PRIVATE FLANG_RT_NO_GLOBAL_VAR_DEFS
)
endif()
endif()
diff --git a/flang-rt/include/flang-rt/CUDA/allocator.h b/flang-rt/include/flang-rt/CUDA/allocator.h
index 2899931a9cb545..31ca99c646ca77 100644
--- a/flang-rt/include/flang-rt/CUDA/allocator.h
+++ b/flang-rt/include/flang-rt/CUDA/allocator.h
@@ -6,8 +6,8 @@
//
//===----------------------------------------------------------------------===//
-#ifndef FLANGRT_CUDA_ALLOCATOR_H_
-#define FLANGRT_CUDA_ALLOCATOR_H_
+#ifndef FLANG_RT_CUDA_ALLOCATOR_H_
+#define FLANG_RT_CUDA_ALLOCATOR_H_
#include "flang/Runtime/descriptor-consts.h"
#include "flang/Runtime/entry-names.h"
@@ -43,4 +43,4 @@ void *CUFAllocUnified(std::size_t);
void CUFFreeUnified(void *);
} // namespace Fortran::runtime::cuda
-#endif /* FLANGRT_CUDA_ALLOCATOR_H_ */
+#endif /* FLANG_RT_CUDA_ALLOCATOR_H_ */
diff --git a/flang-rt/include/flang-rt/allocator-registry.h b/flang-rt/include/flang-rt/allocator-registry.h
index 33e30523acaa48..1f004462ca6241 100644
--- a/flang-rt/include/flang-rt/allocator-registry.h
+++ b/flang-rt/include/flang-rt/allocator-registry.h
@@ -6,8 +6,8 @@
//
//===----------------------------------------------------------------------===//
-#ifndef FLANGRT_ALLOCATOR_REGISTRY_H_
-#define FLANGRT_ALLOCATOR_REGISTRY_H_
+#ifndef FLANG_RT_ALLOCATOR_REGISTRY_H_
+#define FLANG_RT_ALLOCATOR_REGISTRY_H_
#include "flang/Common/api-attrs.h"
#include "flang/Runtime/allocator-registry-consts.h"
@@ -55,4 +55,4 @@ RT_OFFLOAD_VAR_GROUP_END
} // namespace Fortran::runtime
-#endif /* FLANGRT_ALLOCATOR_REGISTRY_H_ */
+#endif /* FLANG_RT_ALLOCATOR_REGISTRY_H_ */
diff --git a/flang-rt/include/flang-rt/array-constructor.h b/flang-rt/include/flang-rt/array-constructor.h
index e39c6fe9d050c7..a0aee59beac744 100644
--- a/flang-rt/include/flang-rt/array-constructor.h
+++ b/flang-rt/include/flang-rt/array-constructor.h
@@ -9,8 +9,8 @@
// External APIs to create temporary storage for array constructors when their
// final extents or length parameters cannot be pre-computed.
-#ifndef FLANGRT_ARRAY_CONSTRUCTOR_H_
-#define FLANGRT_ARRAY_CONSTRUCTOR_H_
+#ifndef FLANG_RT_ARRAY_CONSTRUCTOR_H_
+#define FLANG_RT_ARRAY_CONSTRUCTOR_H_
#include "flang-rt/descriptor.h"
#include "flang/Runtime/array-constructor-consts.h"
@@ -45,4 +45,4 @@ struct ArrayConstructorVector {
};
} // namespace Fortran::runtime
-#endif /* FLANGRT_ARRAY_CONSTRUCTOR_H_ */
+#endif /* FLANG_RT_ARRAY_CONSTRUCTOR_H_ */
diff --git a/flang-rt/include/flang-rt/descriptor.h b/flang-rt/include/flang-rt/descriptor.h
index adb69440be987c..4e129468e4fe6e 100644
--- a/flang-rt/include/flang-rt/descriptor.h
+++ b/flang-rt/include/flang-rt/descriptor.h
@@ -6,8 +6,8 @@
//
//===----------------------------------------------------------------------===//
-#ifndef FLANGRT_DESCRIPTOR_H_
-#define FLANGRT_DESCRIPTOR_H_
+#ifndef FLANG_RT_DESCRIPTOR_H_
+#define FLANG_RT_DESCRIPTOR_H_
// Defines data structures used during execution of a Fortran program
// to implement nontrivial dummy arguments, pointers, allocatables,
@@ -482,4 +482,4 @@ class alignas(Descriptor) StaticDescriptor {
};
} // namespace Fortran::runtime
-#endif /* FLANGRT_DESCRIPTOR_H_ */
+#endif /* FLANG_RT_DESCRIPTOR_H_ */
diff --git a/flang-rt/include/flang-rt/io-api-funcs.h b/flang-rt/include/flang-rt/io-api-funcs.h
index 356f2d684d2f2d..dda2f5dc96184b 100644
--- a/flang-rt/include/flang-rt/io-api-funcs.h
+++ b/flang-rt/include/flang-rt/io-api-funcs.h
@@ -8,8 +8,8 @@
// Defines API between compiled code and I/O runtime library.
-#ifndef FLANGRT_IO_API_FUNCS_H_
-#define FLANGRT_IO_API_FUNCS_H_
+#ifndef FLANG_RT_IO_API_FUNCS_H_
+#define FLANG_RT_IO_API_FUNCS_H_
#include "flang/Common/uint128.h"
#include "flang/Runtime/entry-names.h"
@@ -36,4 +36,4 @@ RT_API_ATTRS const char *InquiryKeywordHashDecode(
char *buffer, std::size_t, InquiryKeywordHash);
} // namespace Fortran::runtime::io
-#endif /* FLANGRT_IO_API_FUNCS_H_ */
+#endif /* FLANG_RT_IO_API_FUNCS_H_ */
diff --git a/flang-rt/include/flang-rt/iostat-funcs.h b/flang-rt/include/flang-rt/iostat-funcs.h
index 101256103cbf29..0edb8f402c4fe8 100644
--- a/flang-rt/include/flang-rt/iostat-funcs.h
+++ b/flang-rt/include/flang-rt/iostat-funcs.h
@@ -9,8 +9,8 @@
// Defines the values returned by the runtime for IOSTAT= specifiers
// on I/O statements.
-#ifndef FLANGRT_IOSTAT_FUNCS_H_
-#define FLANGRT_IOSTAT_FUNCS_H_
+#ifndef FLANG_RT_IOSTAT_FUNCS_H_
+#define FLANG_RT_IOSTAT_FUNCS_H_
#include "flang/Common/api-attrs.h"
#include "flang/Runtime/iostat.h"
@@ -20,4 +20,4 @@ namespace Fortran::runtime::io {
RT_API_ATTRS const char *IostatErrorString(int);
} // namespace Fortran::runtime::io
-#endif /* FLANGRT_IOSTAT_FUNCS_H_ */
+#endif /* FLANG_RT_IOSTAT_FUNCS_H_ */
diff --git a/flang-rt/include/flang-rt/memory.h b/flang-rt/include/flang-rt/memory.h
index 84cc6c5266a8ea..afbb1b34c1d2c0 100644
--- a/flang-rt/include/flang-rt/memory.h
+++ b/flang-rt/include/flang-rt/memory.h
@@ -9,8 +9,8 @@
// Thin wrapper around malloc()/free() to isolate the dependency,
// ease porting, and provide an owning pointer.
-#ifndef FLANGRT_MEMORY_H_
-#define FLANGRT_MEMORY_H_
+#ifndef FLANG_RT_MEMORY_H_
+#define FLANG_RT_MEMORY_H_
#include "flang/Common/api-attrs.h"
#include <cassert>
@@ -170,4 +170,4 @@ template <typename A> struct Allocator {
};
} // namespace Fortran::runtime
-#endif /* FLANGRT_MEMORY_H_ */
+#endif /* FLANG_RT_MEMORY_H_ */
diff --git a/flang-rt/include/flang-rt/type-code.h b/flang-rt/include/flang-rt/type-code.h
index 409d47b82c17d8..1d057481261a1d 100644
--- a/flang-rt/include/flang-rt/type-code.h
+++ b/flang-rt/include/flang-rt/type-code.h
@@ -6,8 +6,8 @@
//
//===----------------------------------------------------------------------===//
-#ifndef FLANGRT_TYPE_CODE_H_
-#define FLANGRT_TYPE_CODE_H_
+#ifndef FLANG_RT_TYPE_CODE_H_
+#define FLANG_RT_TYPE_CODE_H_
#include "flang/Common/Fortran-consts.h"
#include "flang/Common/ISO_Fortran_binding_wrapper.h"
@@ -75,4 +75,4 @@ class TypeCode {
ISO::CFI_type_t raw_{CFI_type_other};
};
} // namespace Fortran::runtime
-#endif /* FLANGRT_TYPE_CODE_H_ */
+#endif /* FLANG_RT_TYPE_CODE_H_ */
diff --git a/flang-rt/lib/FortranFloat128Math/CMakeLists.txt b/flang-rt/lib/FortranFloat128Math/CMakeLists.txt
index 0d8ef07d404029..9f9f94127dda6f 100644
--- a/flang-rt/lib/FortranFloat128Math/CMakeLists.txt
+++ b/flang-rt/lib/FortranFloat128Math/CMakeLists.txt
@@ -99,7 +99,7 @@ if (FLANG_RUNTIME_F128_MATH_LIB)
${sources})
endif ()
target_include_directories(FortranFloat128Math PRIVATE
- "${FLANGRT_SOURCE_DIR}/lib/flang_rt"
+ "${FLANG_RT_SOURCE_DIR}/lib/flang_rt"
)
elseif (HAVE_LDBL_MANT_DIG_113)
# We can use 'long double' versions from libc.
@@ -109,7 +109,7 @@ elseif (HAVE_LDBL_MANT_DIG_113)
HAS_LIBM
)
target_include_directories(FortranFloat128MathILib INTERFACE
- "${FLANGRT_SOURCE_DIR}/lib/flang_rt"
+ "${FLANG_RT_SOURCE_DIR}/lib/flang_rt"
)
target_sources(FortranFloat128MathILib INTERFACE ${sources})
else()
@@ -123,7 +123,7 @@ else()
HAS_LIBMF128
)
target_include_directories(FortranFloat128MathILib INTERFACE
- "${FLANGRT_SOURCE_DIR}/lib/flang_rt"
+ "${FLANG_RT_SOURCE_DIR}/lib/flang_rt"
)
# Enable this, when math-entries.h and complex-math.h is ready.
# target_sources(FortranFloat128MathILib INTERFACE ${sources})
diff --git a/flang-rt/lib/flang_rt/CMakeLists.txt b/flang-rt/lib/flang_rt/CMakeLists.txt
index e8bdb1cccdaf63..6068b75c17ae90 100644
--- a/flang-rt/lib/flang_rt/CMakeLists.txt
+++ b/flang-rt/lib/flang_rt/CMakeLists.txt
@@ -84,13 +84,13 @@ set(host_sources
)
file(GLOB_RECURSE public_headers
- "${FLANGRT_SOURCE_DIR}/include/flang/Runtime/*.h"
- "${FLANGRT_SOURCE_DIR}/include/flang/Common/*.h"
+ "${FLANG_RT_SOURCE_DIR}/include/flang/Runtime/*.h"
+ "${FLANG_RT_SOURCE_DIR}/include/flang/Common/*.h"
)
file(GLOB_RECURSE private_headers
- "${FLANGRT_SOURCE_DIR}/lib/Runtime/*.h"
- "${FLANGRT_SOURCE_DIR}/lib/Common/*.h"
+ "${FLANG_RT_SOURCE_DIR}/lib/Runtime/*.h"
+ "${FLANG_RT_SOURCE_DIR}/lib/Common/*.h"
)
diff --git a/flang-rt/lib/flang_rt/ISO_Fortran_util.h b/flang-rt/lib/flang_rt/ISO_Fortran_util.h
index 3c1163851bee6b..dcbd76cc6bce24 100644
--- a/flang-rt/lib/flang_rt/ISO_Fortran_util.h
+++ b/flang-rt/lib/flang_rt/ISO_Fortran_util.h
@@ -6,8 +6,8 @@
//
//===----------------------------------------------------------------------===//
-#ifndef FLANGRT_ISO_FORTRAN_UTIL_H_
-#define FLANGRT_ISO_FORTRAN_UTIL_H_
+#ifndef FLANG_RT_ISO_FORTRAN_UTIL_H_
+#define FLANG_RT_ISO_FORTRAN_UTIL_H_
// Internal utils for establishing CFI_cdesc_t descriptors.
@@ -99,4 +99,4 @@ static inline RT_API_ATTRS void EstablishDescriptor(CFI_cdesc_t *descriptor,
}
}
} // namespace Fortran::ISO
-#endif /* FLANGRT_ISO_FORTRAN_UTIL_H_ */
+#endif /* FLANG_RT_ISO_FORTRAN_UTIL_H_ */
diff --git a/flang-rt/lib/flang_rt/allocator-registry.cpp b/flang-rt/lib/flang_rt/allocator-registry.cpp
index 0f2fae7950b1b3..c6e799d7cba0dc 100644
--- a/flang-rt/lib/flang_rt/allocator-registry.cpp
+++ b/flang-rt/lib/flang_rt/allocator-registry.cpp
@@ -11,11 +11,11 @@
namespace Fortran::runtime {
-#ifndef FLANGRT_NO_GLOBAL_VAR_DEFS
+#ifndef FLANG_RT_NO_GLOBAL_VAR_DEFS
RT_OFFLOAD_VAR_GROUP_BEGIN
RT_VAR_ATTRS AllocatorRegistry allocatorRegistry;
RT_OFFLOAD_VAR_GROUP_END
-#endif // FLANGRT_NO_GLOBAL_VAR_DEFS
+#endif // FLANG_RT_NO_GLOBAL_VAR_DEFS
RT_OFFLOAD_API_GROUP_BEGIN
RT_API_ATTRS void AllocatorRegistry::Register(int pos, Allocator_t allocator) {
diff --git a/flang-rt/lib/flang_rt/buffer.h b/flang-rt/lib/flang_rt/buffer.h
index 01a6aa28c4ac94..84fe4c34cea0e3 100644
--- a/flang-rt/lib/flang_rt/buffer.h
+++ b/flang-rt/lib/flang_rt/buffer.h
@@ -8,8 +8,8 @@
// External file buffering
-#ifndef FLANGRT_BUFFER_H_
-#define FLANGRT_BUFFER_H_
+#ifndef FLANG_RT_BUFFER_H_
+#define FLANG_RT_BUFFER_H_
#include "flang-rt/memory.h"
#include "io-error.h"
@@ -221,4 +221,4 @@ template <typename STORE, std::size_t minBuffer = 65536> class FileFrame {
bool dirty_{false};
};
} // namespace Fortran::runtime::io
-#endif /* FLANGRT_BUFFER_H_ */
+#endif /* FLANG_RT_BUFFER_H_ */
diff --git a/flang-rt/lib/flang_rt/copy.h b/flang-rt/lib/flang_rt/copy.h
index f0520c23e4a471..468c2439baf618 100644
--- a/flang-rt/lib/flang_rt/copy.h
+++ b/flang-rt/lib/flang_rt/copy.h
@@ -9,8 +9,8 @@
// Utilities that copy data in a type-aware fashion, allocating & duplicating
// allocatable/automatic components of derived types along the way.
-#ifndef FLANGRT_COPY_H_
-#define FLANGRT_COPY_H_
+#ifndef FLANG_RT_COPY_H_
+#define FLANG_RT_COPY_H_
#include "flang-rt/descriptor.h"
@@ -22,4 +22,4 @@ RT_API_ATTRS void CopyElement(const Descriptor &to, const SubscriptValue toAt[],
const Descriptor &from, const SubscriptValue fromAt[], Terminator &);
} // namespace Fortran::runtime
-#endif /* FLANGRT_COPY_H_ */
+#endif /* FLANG_RT_COPY_H_ */
diff --git a/flang-rt/lib/flang_rt/descriptor-io.h b/flang-rt/lib/flang_rt/descriptor-io.h
index 3c5abd6f97993a..2276dfe13230ed 100644
--- a/flang-rt/lib/flang_rt/descriptor-io.h
+++ b/flang-rt/lib/flang_rt/descriptor-io.h
@@ -6,8 +6,8 @@
//
//===----------------------------------------------------------------------===//
-#ifndef FLANGRT_DESCRIPTOR_IO_H_
-#define FLANGRT_DESCRIPTOR_IO_H_
+#ifndef FLANG_RT_DESCRIPTOR_IO_H_
+#define FLANG_RT_DESCRIPTOR_IO_H_
// Implementation of I/O data list item transfers based on descriptors.
// (All I/O items come through here so that the code is exercised for test;
@@ -608,4 +608,4 @@ static RT_API_ATTRS bool DescriptorIO(IoStatementState &io,
return false;
}
} // namespace Fortran::runtime::io::descr
-#endif /* FLANGRT_DESCRIPTOR_IO_H_ */
+#endif /* FLANG_RT_DESCRIPTOR_IO_H_ */
diff --git a/flang-rt/lib/flang_rt/environment.cpp b/flang-rt/lib/flang_rt/environment.cpp
index a9447815efeeaf..3360b5d92f2aeb 100644
--- a/flang-rt/lib/flang_rt/environment.cpp
+++ b/flang-rt/lib/flang_rt/environment.cpp
@@ -23,11 +23,11 @@ extern char **environ;
namespace Fortran::runtime {
-#ifndef FLANGRT_NO_GLOBAL_VAR_DEFS
+#ifndef FLANG_RT_NO_GLOBAL_VAR_DEFS
RT_OFFLOAD_VAR_GROUP_BEGIN
RT_VAR_ATTRS ExecutionEnvironment executionEnvironment;
RT_OFFLOAD_VAR_GROUP_END
-#endif // FLANGRT_NO_GLOBAL_VAR_DEFS
+#endif // FLANG_RT_NO_GLOBAL_VAR_DEFS
static void SetEnvironmentDefaults(const EnvironmentDefaultList *envDefaults) {
if (!envDefaults) {
diff --git a/flang-rt/lib/flang_rt/file.h b/flang-rt/lib/flang_rt/file.h
index 6975bccb987583..13a7133677c6ce 100644
--- a/flang-rt/lib/flang_rt/file.h
+++ b/flang-rt/lib/flang_rt/file.h
@@ -8,8 +8,8 @@
// Raw system I/O wrappers
-#ifndef FLANGRT_FILE_H_
-#define FLANGRT_FILE_H_
+#ifndef FLANG_RT_FILE_H_
+#define FLANG_RT_FILE_H_
#include "flang-rt/memory.h"
#include "io-error.h"
@@ -113,4 +113,4 @@ RT_API_ATTRS bool MayWrite(const char *path);
RT_API_ATTRS bool MayReadAndWrite(const char *path);
RT_API_ATTRS std::int64_t SizeInBytes(const char *path);
} // namespace Fortran::runtime::io
-#endif /* FLANGRT_FILE_H_ */
+#endif /* FLANG_RT_FILE_H_ */
diff --git a/flang-rt/lib/flang_rt/internal-unit.h b/flang-rt/lib/flang_rt/internal-unit.h
index a825e09cdd203e..cae95855a895df 100644
--- a/flang-rt/lib/flang_rt/internal-unit.h
+++ b/flang-rt/lib/flang_rt/internal-unit.h
@@ -8,8 +8,8 @@
// Fortran internal I/O "units"
-#ifndef FLANGRT_INTERNAL_UNIT_H_
-#define FLANGRT_INTERNAL_UNIT_H_
+#ifndef FLANG_RT_INTERNAL_UNIT_H_
+#define FLANG_RT_INTERNAL_UNIT_H_
#include "connection.h"
#include "flang-rt/descriptor.h"
@@ -56,4 +56,4 @@ template <Direction DIR> class InternalDescriptorUnit : public ConnectionState {
extern template class InternalDescriptorUnit<Direction::Output>;
extern template class InternalDescriptorUnit<Direction::Input>;
} // namespace Fortran::runtime::io
-#endif /* FLANGRT_INTERNAL_UNIT_H_ */
+#endif /* FLANG_RT_INTERNAL_UNIT_H_ */
diff --git a/flang-rt/lib/flang_rt/io-api-common.h b/flang-rt/lib/flang_rt/io-api-common.h
index 39c87ba326bea4..22de04b3d5b077 100644
--- a/flang-rt/lib/flang_rt/io-api-common.h
+++ b/flang-rt/lib/flang_rt/io-api-common.h
@@ -6,8 +6,8 @@
//
//===----------------------------------------------------------------------===//
-#ifndef FLANGRT_IO_API_COMMON_H_
-#define FLANGRT_IO_API_COMMON_H_
+#ifndef FLANG_RT_IO_API_COMMON_H_
+#define FLANG_RT_IO_API_COMMON_H_
#include "flang-rt/io-api-funcs.h"
#include "io-stmt.h"
@@ -94,4 +94,4 @@ RT_API_ATTRS Cookie BeginExternalListIO(
}
} // namespace Fortran::runtime::io
-#endif /* FLANGRT_IO_API_COMMON_H_ */
+#endif /* FLANG_RT_IO_API_COMMON_H_ */
diff --git a/flang-rt/lib/flang_rt/io-error.h b/flang-rt/lib/flang_rt/io-error.h
index 775c5d66d83530..958ce2e3fc42b8 100644
--- a/flang-rt/lib/flang_rt/io-error.h
+++ b/flang-rt/lib/flang_rt/io-error.h
@@ -12,8 +12,8 @@
// IOSTAT error codes are raw errno values augmented with values for
// Fortran-specific errors.
-#ifndef FLANGRT_IO_ERROR_H_
-#define FLANGRT_IO_ERROR_H_
+#ifndef FLANG_RT_IO_ERROR_H_
+#define FLANG_RT_IO_ERROR_H_
#include "flang-rt/iostat-funcs.h"
#include "flang-rt/memory.h"
@@ -78,4 +78,4 @@ class IoErrorHandler : public Terminator {
};
} // namespace Fortran::runtime::io
-#endif /* FLANGRT_IO_ERROR_H_ */
+#endif /* FLANG_RT_IO_ERROR_H_ */
diff --git a/flang-rt/lib/flang_rt/io-stmt.h b/flang-rt/lib/flang_rt/io-stmt.h
index c7bde114457f0e..b4089ea67e1f7c 100644
--- a/flang-rt/lib/flang_rt/io-stmt.h
+++ b/flang-rt/lib/flang_rt/io-stmt.h
@@ -8,8 +8,8 @@
// Representations of the state of an I/O statement in progress
-#ifndef FLANGRT_IO_STMT_H_
-#define FLANGRT_IO_STMT_H_
+#ifndef FLANG_RT_IO_STMT_H_
+#define FLANG_RT_IO_STMT_H_
#include "connection.h"
#include "file.h"
@@ -789,4 +789,4 @@ class ErroneousIoStatementState : public IoStatementBase {
};
} // namespace Fortran::runtime::io
-#endif /* FLANGRT_IO_STMT_H_ */
+#endif /* FLANG_RT_IO_STMT_H_ */
diff --git a/flang-rt/lib/flang_rt/random-templates.h b/flang-rt/lib/flang_rt/random-templates.h
index 8ed5757ec76a76..36701501b94ef5 100644
--- a/flang-rt/lib/flang_rt/random-templates.h
+++ b/flang-rt/lib/flang_rt/random-templates.h
@@ -6,8 +6,8 @@
//
//===----------------------------------------------------------------------===//
-#ifndef FLANGRT_RANDOM_TEMPLATES_H_
-#define FLANGRT_RANDOM_TEMPLATES_H_
+#ifndef FLANG_RT_RANDOM_TEMPLATES_H_
+#define FLANG_RT_RANDOM_TEMPLATES_H_
#include "flang-rt/descriptor.h"
#include "lock.h"
@@ -85,4 +85,4 @@ inline void Generate(const Descriptor &harvest) {
} // namespace Fortran::runtime::random
-#endif /* FLANGRT_RANDOM_TEMPLATES_H_ */
+#endif /* FLANG_RT_RANDOM_TEMPLATES_H_ */
diff --git a/flang-rt/lib/flang_rt/reduction-templates.h b/flang-rt/lib/flang_rt/reduction-templates.h
index 6764706c3fa951..496372de1752a4 100644
--- a/flang-rt/lib/flang_rt/reduction-templates.h
+++ b/flang-rt/lib/flang_rt/reduction-templates.h
@@ -18,8 +18,8 @@
// * Character-valued reductions (MAXVAL & MINVAL) return arbitrary
// length results, dynamically allocated in a caller-supplied descriptor
-#ifndef FLANGRT_REDUCTION_TEMPLATES_H_
-#define FLANGRT_REDUCTION_TEMPLATES_H_
+#ifndef FLANG_RT_REDUCTION_TEMPLATES_H_
+#define FLANG_RT_REDUCTION_TEMPLATES_H_
#include "flang-rt/descriptor.h"
#include "numeric-templates.h"
@@ -412,4 +412,4 @@ template <int KIND> struct Norm2Helper {
};
} // namespace Fortran::runtime
-#endif /* FLANGRT_REDUCTION_TEMPLATES_H_ */
+#endif /* FLANG_RT_REDUCTION_TEMPLATES_H_ */
diff --git a/flang-rt/lib/flang_rt/stack.h b/flang-rt/lib/flang_rt/stack.h
index 4b0de1e59e4596..07b34f3eef2c3d 100644
--- a/flang-rt/lib/flang_rt/stack.h
+++ b/flang-rt/lib/flang_rt/stack.h
@@ -10,8 +10,8 @@
// It is a list based stack with dynamic allocation/deallocation
// of the list nodes.
-#ifndef FLANGRT_STACK_H_
-#define FLANGRT_STACK_H_
+#ifndef FLANG_RT_STACK_H_
+#define FLANG_RT_STACK_H_
#include "flang-rt/memory.h"
#include "terminator.h"
@@ -133,4 +133,4 @@ template <typename T, unsigned N = 0> class Stack : public StackStorage<T, N> {
Terminator &terminator_;
};
} // namespace Fortran::runtime
-#endif /* FLANGRT_STACK_H_ */
+#endif /* FLANG_RT_STACK_H_ */
diff --git a/flang-rt/lib/flang_rt/tools.h b/flang-rt/lib/flang_rt/tools.h
index bc2f4ff034cb13..9892ef0fc28393 100644
--- a/flang-rt/lib/flang_rt/tools.h
+++ b/flang-rt/lib/flang_rt/tools.h
@@ -6,8 +6,8 @@
//
//===----------------------------------------------------------------------===//
-#ifndef FLANGRT_TOOLS_H_
-#define FLANGRT_TOOLS_H_
+#ifndef FLANG_RT_TOOLS_H_
+#define FLANG_RT_TOOLS_H_
#include "flang-rt/descriptor.h"
#include "flang-rt/memory.h"
@@ -535,4 +535,4 @@ RT_API_ATTRS void CreatePartialReductionResult(Descriptor &result,
const char *intrinsic, TypeCode);
} // namespace Fortran::runtime
-#endif /* FLANGRT_TOOLS_H_ */
+#endif /* FLANG_RT_TOOLS_H_ */
diff --git a/flang-rt/lib/flang_rt/type-info.h b/flang-rt/lib/flang_rt/type-info.h
index 891a6a0d032127..69ad4e4a341a3d 100644
--- a/flang-rt/lib/flang_rt/type-info.h
+++ b/flang-rt/lib/flang_rt/type-info.h
@@ -6,8 +6,8 @@
//
//===----------------------------------------------------------------------===//
-#ifndef FLANGRT_TYPE_INFO_H_
-#define FLANGRT_TYPE_INFO_H_
+#ifndef FLANG_RT_TYPE_INFO_H_
+#define FLANG_RT_TYPE_INFO_H_
// A C++ perspective of the derived type description schemata in
// flang/module/__fortran_type_info.f90.
@@ -321,4 +321,4 @@ class DerivedType {
};
} // namespace Fortran::runtime::typeInfo
-#endif /* FLANGRT_TYPE_INFO_H_ */
+#endif /* FLANG_RT_TYPE_INFO_H_ */
diff --git a/flang-rt/lib/flang_rt/unit-map.h b/flang-rt/lib/flang_rt/unit-map.h
index 50aa74aeed05bf..e37438c58a2968 100644
--- a/flang-rt/lib/flang_rt/unit-map.h
+++ b/flang-rt/lib/flang_rt/unit-map.h
@@ -9,8 +9,8 @@
// Maps Fortran unit numbers to their ExternalFileUnit instances.
// A simple hash table with forward-linked chains per bucket.
-#ifndef FLANGRT_UNIT_MAP_H_
-#define FLANGRT_UNIT_MAP_H_
+#ifndef FLANG_RT_UNIT_MAP_H_
+#define FLANG_RT_UNIT_MAP_H_
#include "flang-rt/memory.h"
#include "lock.h"
@@ -100,4 +100,4 @@ class UnitMap {
int emergencyNewUnit_{maxNewUnits_}; // not recycled
};
} // namespace Fortran::runtime::io
-#endif /* FLANGRT_UNIT_MAP_H_ */
+#endif /* FLANG_RT_UNIT_MAP_H_ */
diff --git a/flang-rt/lib/flang_rt/unit.cpp b/flang-rt/lib/flang_rt/unit.cpp
index b5a4282faf22e5..06faf60d6d6222 100644
--- a/flang-rt/lib/flang_rt/unit.cpp
+++ b/flang-rt/lib/flang_rt/unit.cpp
@@ -19,13 +19,13 @@
namespace Fortran::runtime::io {
-#ifndef FLANGRT_NO_GLOBAL_VAR_DEFS
+#ifndef FLANG_RT_NO_GLOBAL_VAR_DEFS
RT_OFFLOAD_VAR_GROUP_BEGIN
RT_VAR_ATTRS ExternalFileUnit *defaultInput{nullptr}; // unit 5
RT_VAR_ATTRS ExternalFileUnit *defaultOutput{nullptr}; // unit 6
RT_VAR_ATTRS ExternalFileUnit *errorOutput{nullptr}; // unit 0 extension
RT_OFFLOAD_VAR_GROUP_END
-#endif // FLANGRT_NO_GLOBAL_VAR_DEFS
+#endif // FLANG_RT_NO_GLOBAL_VAR_DEFS
RT_OFFLOAD_API_GROUP_BEGIN
diff --git a/flang-rt/lib/flang_rt/unit.h b/flang-rt/lib/flang_rt/unit.h
index 5049f3c5db80f7..0a31de632136d2 100644
--- a/flang-rt/lib/flang_rt/unit.h
+++ b/flang-rt/lib/flang_rt/unit.h
@@ -8,8 +8,8 @@
// Fortran external I/O units
-#ifndef FLANGRT_UNIT_H_
-#define FLANGRT_UNIT_H_
+#ifndef FLANG_RT_UNIT_H_
+#define FLANG_RT_UNIT_H_
#include "buffer.h"
#include "connection.h"
@@ -291,4 +291,4 @@ class ChildIo {
};
} // namespace Fortran::runtime::io
-#endif /* FLANGRT_UNIT_H_ */
+#endif /* FLANG_RT_UNIT_H_ */
diff --git a/flang-rt/lib/flang_rt/utf.cpp b/flang-rt/lib/flang_rt/utf.cpp
index 860db5f2367d38..e4e4926ea3124d 100644
--- a/flang-rt/lib/flang_rt/utf.cpp
+++ b/flang-rt/lib/flang_rt/utf.cpp
@@ -10,7 +10,7 @@
namespace Fortran::runtime {
-#ifndef FLANGRT_NO_GLOBAL_VAR_DEFS
+#ifndef FLANG_RT_NO_GLOBAL_VAR_DEFS
// clang-format off
RT_OFFLOAD_VAR_GROUP_BEGIN
const RT_CONST_VAR_ATTRS std::uint8_t UTF8FirstByteTable[256]{
@@ -41,7 +41,7 @@ const RT_CONST_VAR_ATTRS std::uint8_t UTF8FirstByteTable[256]{
};
RT_OFFLOAD_VAR_GROUP_END
// clang-format on
-#endif // FLANGRT_NO_GLOBAL_VAR_DEFS
+#endif // FLANG_RT_NO_GLOBAL_VAR_DEFS
RT_OFFLOAD_API_GROUP_BEGIN
diff --git a/flang-rt/test/CMakeLists.txt b/flang-rt/test/CMakeLists.txt
index 6c542d522f4762..5dfd6ac35248c3 100644
--- a/flang-rt/test/CMakeLists.txt
+++ b/flang-rt/test/CMakeLists.txt
@@ -41,7 +41,7 @@ if (TARGET FlangRTUnitTests)
)
endif ()
-set(FLANGRT_TEST_DEPENDS
+set(FLANG_RT_TEST_DEPENDS
FlangRTUnitTests
flang_rt.unittest
flang_rt.static
@@ -49,7 +49,7 @@ set(FLANGRT_TEST_DEPENDS
add_custom_target(flang-rt-test-depends)
set_target_properties(flang-rt-test-depends PROPERTIES FOLDER "Fortran Runtime/Meta")
-add_dependencies(flang-rt-test-depends ${FLANGRT_TEST_DEPENDS})
+add_dependencies(flang-rt-test-depends ${FLANG_RT_TEST_DEPENDS})
add_lit_testsuite(check-flang-rt "Running the flang-rt regression tests"
${CMAKE_CURRENT_BINARY_DIR}
diff --git a/flang-rt/test/NonGtestUnit/lit.site.cfg.py.in b/flang-rt/test/NonGtestUnit/lit.site.cfg.py.in
index 9dc4d2d5a1513f..f68c87afdef812 100644
--- a/flang-rt/test/NonGtestUnit/lit.site.cfg.py.in
+++ b/flang-rt/test/NonGtestUnit/lit.site.cfg.py.in
@@ -3,8 +3,8 @@
import os
config.llvm_tools_dir = "@LLVM_TOOLS_DIR@"
-config.flangrt_source_dir = "@FLANGRT_SOURCE_DIR@"
-config.flangrt_binary_dir = "@FLANGRT_BINARY_DIR@"
+config.flangrt_source_dir = "@FLANG_RT_SOURCE_DIR@"
+config.flangrt_binary_dir = "@FLANG_RT_BINARY_DIR@"
config.flangrt_binary_test_dir = os.path.dirname(__file__)
import lit.llvm
diff --git a/flang-rt/test/Unit/lit.site.cfg.py.in b/flang-rt/test/Unit/lit.site.cfg.py.in
index f6ed1e758d9374..1441aac0d0e45b 100644
--- a/flang-rt/test/Unit/lit.site.cfg.py.in
+++ b/flang-rt/test/Unit/lit.site.cfg.py.in
@@ -4,8 +4,8 @@ import os
config.llvm_tools_dir = "@LLVM_TOOLS_DIR@"
config.llvm_build_mode = "@LLVM_BUILD_MODE@"
-config.flangrt_source_dir = "@FLANGRT_SOURCE_DIR@"
-config.flangrt_binary_dir = "@FLANGRT_BINARY_DIR@"
+config.flangrt_source_dir = "@FLANG_RT_SOURCE_DIR@"
+config.flangrt_binary_dir = "@FLANG_RT_BINARY_DIR@"
config.flangrt_binary_test_dir = os.path.dirname(__file__)
import lit.llvm
diff --git a/flang-rt/test/lit.site.cfg.py.in b/flang-rt/test/lit.site.cfg.py.in
index 630f7dfcd508c7..664a75bdc7b9e6 100644
--- a/flang-rt/test/lit.site.cfg.py.in
+++ b/flang-rt/test/lit.site.cfg.py.in
@@ -4,9 +4,9 @@ import sys
config.llvm_tools_dir = "@LLVM_TOOLS_DIR@"
config.flang_source_dir = "@FLANG_SOURCE_DIR@"
-config.flangrt_source_dir = "@FLANGRT_SOURCE_DIR@"
+config.flangrt_source_dir = "@FLANG_RT_SOURCE_DIR@"
config.flangrt_binary_test_dir = os.path.dirname(__file__)
-config.flangrt_build_lib_dir = "@FLANGRT_BUILD_LIB_DIR@"
+config.flangrt_build_lib_dir = "@FLANG_RT_BUILD_LIB_DIR@"
config.cc = "@CMAKE_C_COMPILER@"
config.osx_sysroot = path(r"@CMAKE_OSX_SYSROOT@")
diff --git a/flang-rt/unittests/CMakeLists.txt b/flang-rt/unittests/CMakeLists.txt
index 43dc2b5a4ac48b..a15675e80473fa 100644
--- a/flang-rt/unittests/CMakeLists.txt
+++ b/flang-rt/unittests/CMakeLists.txt
@@ -64,7 +64,7 @@ function(add_flangrt_unittest test_dirname)
add_unittest(FlangRTUnitTests ${test_dirname} ${ARG_UNPARSED_ARGUMENTS})
- target_include_directories(${test_dirname} PRIVATE "${FLANGRT_SOURCE_DIR}/include")
+ target_include_directories(${test_dirname} PRIVATE "${FLANG_RT_SOURCE_DIR}/include")
target_include_directories(${test_dirname} PRIVATE "${FLANG_SOURCE_DIR}/include")
target_link_libraries(${test_dirname} PRIVATE ${ARG_LINK_LIBS})
add_flangrt_unittest_offload_properties(${test_dirname})
@@ -86,7 +86,7 @@ function(add_flangrt_nongtest_unittest test_name)
add_executable(${test_name}${suffix} ${ARG_UNPARSED_ARGUMENTS})
set_target_properties(${test_name}${suffix} PROPERTIES FOLDER "Fortran Runtime/Tests/Unit")
- target_include_directories(${test_name}${suffix} PRIVATE "${FLANGRT_SOURCE_DIR}/include")
+ target_include_directories(${test_name}${suffix} PRIVATE "${FLANG_RT_SOURCE_DIR}/include")
target_include_directories(${test_name}${suffix} PRIVATE "${FLANG_SOURCE_DIR}/include")
target_link_libraries(${test_name}${suffix} PRIVATE NonGTestTesting ${ARG_LINK_LIBS})
diff --git a/flang-rt/unittests/Runtime/tools.h b/flang-rt/unittests/Runtime/tools.h
index 414175bde07d04..0db44c7ad0189c 100644
--- a/flang-rt/unittests/Runtime/tools.h
+++ b/flang-rt/unittests/Runtime/tools.h
@@ -6,8 +6,8 @@
//
//===----------------------------------------------------------------------===//
-#ifndef FLANGRT_UNITTESTS_RUNTIME_TOOLS_H_
-#define FLANGRT_UNITTESTS_RUNTIME_TOOLS_H_
+#ifndef FLANG_RT_UNITTESTS_RUNTIME_TOOLS_H_
+#define FLANG_RT_UNITTESTS_RUNTIME_TOOLS_H_
#include "flang-rt/descriptor.h"
#include "flang-rt/type-code.h"
@@ -54,4 +54,4 @@ static OwningPtr<Descriptor> MakeArray(const std::vector<int> &shape,
}
} // namespace Fortran::runtime
-#endif /* FLANGRT_UNITTESTS_RUNTIME_TOOLS_H_ */
+#endif /* FLANG_RT_UNITTESTS_RUNTIME_TOOLS_H_ */
More information about the llvm-branch-commits
mailing list