[flang-commits] [flang] ffc67bb - Revert "[Flang] [FlangRT] Introduce FlangRT project as solution to Flang's runtime LLVM integration"
David Spickett via flang-commits
flang-commits at lists.llvm.org
Mon Oct 2 02:04:30 PDT 2023
Author: David Spickett
Date: 2023-10-02T09:02:05Z
New Revision: ffc67bb3602a6a9a4f886af362e1f2d7c9821570
URL: https://github.com/llvm/llvm-project/commit/ffc67bb3602a6a9a4f886af362e1f2d7c9821570
DIFF: https://github.com/llvm/llvm-project/commit/ffc67bb3602a6a9a4f886af362e1f2d7c9821570.diff
LOG: Revert "[Flang] [FlangRT] Introduce FlangRT project as solution to Flang's runtime LLVM integration"
This reverts commit 6403287eff71a3d6f6c862346d6ed3f0f000eb70.
This is failing on all but 1 of Linaro's flang builders.
CMake Error at /home/tcwg-buildbot/worker/clang-aarch64-full-2stage/llvm/flang-rt/unittests/CMakeLists.txt:37 (message):
Target llvm_gtest not found.
Added:
flang/unittests/Evaluate/ISO-Fortran-binding.cpp
flang/unittests/Evaluate/reshape.cpp
flang/unittests/Runtime/Allocatable.cpp
flang/unittests/Runtime/ArrayConstructor.cpp
flang/unittests/Runtime/BufferTest.cpp
flang/unittests/Runtime/CMakeLists.txt
flang/unittests/Runtime/CharacterTest.cpp
flang/unittests/Runtime/CommandTest.cpp
flang/unittests/Runtime/Complex.cpp
flang/unittests/Runtime/CrashHandlerFixture.cpp
flang/unittests/Runtime/CrashHandlerFixture.h
flang/unittests/Runtime/Derived.cpp
flang/unittests/Runtime/ExternalIOTest.cpp
flang/unittests/Runtime/Format.cpp
flang/unittests/Runtime/Inquiry.cpp
flang/unittests/Runtime/ListInputTest.cpp
flang/unittests/Runtime/LogicalFormatTest.cpp
flang/unittests/Runtime/Matmul.cpp
flang/unittests/Runtime/MatmulTranspose.cpp
flang/unittests/Runtime/MiscIntrinsic.cpp
flang/unittests/Runtime/Namelist.cpp
flang/unittests/Runtime/Numeric.cpp
flang/unittests/Runtime/NumericalFormatTest.cpp
flang/unittests/Runtime/Pointer.cpp
flang/unittests/Runtime/Ragged.cpp
flang/unittests/Runtime/Random.cpp
flang/unittests/Runtime/Reduction.cpp
flang/unittests/Runtime/RuntimeCrashTest.cpp
flang/unittests/Runtime/Stop.cpp
flang/unittests/Runtime/TemporaryStack.cpp
flang/unittests/Runtime/Time.cpp
flang/unittests/Runtime/Transformational.cpp
flang/unittests/Runtime/tools.h
Modified:
clang/lib/Driver/ToolChains/CommonArgs.cpp
flang/CMakeLists.txt
flang/cmake/modules/AddFlang.cmake
flang/cmake/modules/FlangConfig.cmake.in
flang/lib/Decimal/CMakeLists.txt
flang/runtime/CMakeLists.txt
flang/runtime/sum.cpp
flang/test/CMakeLists.txt
flang/test/Driver/linker-flags.f90
flang/test/lit.cfg.py
flang/tools/flang-driver/CMakeLists.txt
flang/unittests/CMakeLists.txt
flang/unittests/Evaluate/CMakeLists.txt
flang/unittests/Optimizer/CMakeLists.txt
lld/COFF/MinGW.cpp
llvm/CMakeLists.txt
llvm/projects/CMakeLists.txt
llvm/runtimes/CMakeLists.txt
runtimes/CMakeLists.txt
Removed:
flang-rt/CMakeLists.txt
flang-rt/docs/GettingStarted.md
flang-rt/test/CMakeLists.txt
flang-rt/test/FortranRuntime/no-cpp-dep.c
flang-rt/test/NonGtestUnit/lit.cfg.py
flang-rt/test/NonGtestUnit/lit.site.cfg.py.in
flang-rt/test/Unit/lit.cfg.py
flang-rt/test/Unit/lit.site.cfg.py.in
flang-rt/test/lit.cfg.py
flang-rt/test/lit.site.cfg.py.in
flang-rt/unittests/CMakeLists.txt
flang-rt/unittests/FortranEvaluate/CMakeLists.txt
flang-rt/unittests/FortranEvaluate/ISO-Fortran-binding.cpp
flang-rt/unittests/FortranEvaluate/reshape.cpp
flang-rt/unittests/FortranEvaluate/testing.cpp
flang-rt/unittests/FortranEvaluate/testing.h
flang-rt/unittests/FortranRuntime/Allocatable.cpp
flang-rt/unittests/FortranRuntime/ArrayConstructor.cpp
flang-rt/unittests/FortranRuntime/BufferTest.cpp
flang-rt/unittests/FortranRuntime/CMakeLists.txt
flang-rt/unittests/FortranRuntime/CharacterTest.cpp
flang-rt/unittests/FortranRuntime/CommandTest.cpp
flang-rt/unittests/FortranRuntime/Complex.cpp
flang-rt/unittests/FortranRuntime/CrashHandlerFixture.cpp
flang-rt/unittests/FortranRuntime/CrashHandlerFixture.h
flang-rt/unittests/FortranRuntime/Derived.cpp
flang-rt/unittests/FortranRuntime/ExternalIOTest.cpp
flang-rt/unittests/FortranRuntime/Format.cpp
flang-rt/unittests/FortranRuntime/Inquiry.cpp
flang-rt/unittests/FortranRuntime/ListInputTest.cpp
flang-rt/unittests/FortranRuntime/LogicalFormatTest.cpp
flang-rt/unittests/FortranRuntime/Matmul.cpp
flang-rt/unittests/FortranRuntime/MatmulTranspose.cpp
flang-rt/unittests/FortranRuntime/MiscIntrinsic.cpp
flang-rt/unittests/FortranRuntime/Namelist.cpp
flang-rt/unittests/FortranRuntime/Numeric.cpp
flang-rt/unittests/FortranRuntime/NumericalFormatTest.cpp
flang-rt/unittests/FortranRuntime/Pointer.cpp
flang-rt/unittests/FortranRuntime/Ragged.cpp
flang-rt/unittests/FortranRuntime/Random.cpp
flang-rt/unittests/FortranRuntime/Reduction.cpp
flang-rt/unittests/FortranRuntime/RuntimeCrashTest.cpp
flang-rt/unittests/FortranRuntime/Stop.cpp
flang-rt/unittests/FortranRuntime/TemporaryStack.cpp
flang-rt/unittests/FortranRuntime/Time.cpp
flang-rt/unittests/FortranRuntime/Transformational.cpp
flang-rt/unittests/FortranRuntime/tools.h
################################################################################
diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp b/clang/lib/Driver/ToolChains/CommonArgs.cpp
index 1ba031d42741cc4..48170fa908fd62f 100644
--- a/clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -969,41 +969,29 @@ void tools::addFortranRuntimeLibs(const ToolChain &TC,
llvm::opt::ArgStringList &CmdArgs) {
if (TC.getTriple().isKnownWindowsMSVCEnvironment()) {
CmdArgs.push_back("Fortran_main.lib");
- CmdArgs.push_back("flang-rt.lib");
+ CmdArgs.push_back("FortranRuntime.lib");
+ CmdArgs.push_back("FortranDecimal.lib");
} else {
CmdArgs.push_back("-lFortran_main");
- CmdArgs.push_back("-lflang-rt");
+ CmdArgs.push_back("-lFortranRuntime");
+ CmdArgs.push_back("-lFortranDecimal");
}
}
void tools::addFortranRuntimeLibraryPath(const ToolChain &TC,
const llvm::opt::ArgList &Args,
ArgStringList &CmdArgs) {
- // Default to the <driver-path>/../lib, <driver-path>/../flang-rt/lib, and
- // <driver-path>/../runtimes/runtimes-bins/flang-rt/lib directories. This
- // works fine on the platforms that we have tested so far. We will probably
- // have to re-fine this in the future. In particular, on some platforms, we
- // may need to use lib64 instead of lib.
- SmallString<256> BuildLibPath =
- llvm::sys::path::parent_path(TC.getDriver().Dir);
- SmallString<256> FlangRTLibPath =
- llvm::sys::path::parent_path(TC.getDriver().Dir);
- SmallString<256> RuntimesLibPath =
+ // Default to the <driver-path>/../lib directory. This works fine on the
+ // platforms that we have tested so far. We will probably have to re-fine
+ // this in the future. In particular, on some platforms, we may need to use
+ // lib64 instead of lib.
+ SmallString<256> DefaultLibPath =
llvm::sys::path::parent_path(TC.getDriver().Dir);
- // Search path for Fortran_main and Flang-rt libraries.
- llvm::sys::path::append(BuildLibPath, "lib");
- llvm::sys::path::append(FlangRTLibPath, "flang-rt/lib");
- llvm::sys::path::append(RuntimesLibPath,
- "runtimes/runtimes-bins/flang-rt/lib");
- if (TC.getTriple().isKnownWindowsMSVCEnvironment()) {
- CmdArgs.push_back(Args.MakeArgString("-libpath:" + BuildLibPath));
- CmdArgs.push_back(Args.MakeArgString("-libpath:" + FlangRTLibPath));
- CmdArgs.push_back(Args.MakeArgString("-libpath:" + RuntimesLibPath));
- } else {
- CmdArgs.push_back(Args.MakeArgString("-L" + BuildLibPath));
- CmdArgs.push_back(Args.MakeArgString("-L" + FlangRTLibPath));
- CmdArgs.push_back(Args.MakeArgString("-L" + RuntimesLibPath));
- }
+ llvm::sys::path::append(DefaultLibPath, "lib");
+ if (TC.getTriple().isKnownWindowsMSVCEnvironment())
+ CmdArgs.push_back(Args.MakeArgString("-libpath:" + DefaultLibPath));
+ else
+ CmdArgs.push_back(Args.MakeArgString("-L" + DefaultLibPath));
}
static void addSanitizerRuntime(const ToolChain &TC, const ArgList &Args,
diff --git a/flang-rt/CMakeLists.txt b/flang-rt/CMakeLists.txt
deleted file mode 100644
index 053869b8769e216..000000000000000
--- a/flang-rt/CMakeLists.txt
+++ /dev/null
@@ -1,148 +0,0 @@
-# CMake build for the Flang runtime libraries
-# The source for the flang runtime libraries (FortranDecimalRT, FortranRuntime)
-# exist in the flang top-level directory.
-# Flang-rt is only scaffolding and does not provide any additional source files.
-
-cmake_minimum_required(VERSION 3.20.0)
-
-#===============================================================================
-# Configure CMake
-#===============================================================================
-set(LLVM_COMMON_CMAKE_UTILS "${CMAKE_CURRENT_SOURCE_DIR}/../cmake")
-include(${LLVM_COMMON_CMAKE_UTILS}/Modules/CMakePolicy.cmake
- NO_POLICY_SCOPE)
-
-set(CMAKE_BUILD_WITH_INSTALL_NAME_DIR ON)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/flang-rt/bin)
-set(CMAKE_LIBRARY_OUTPUT_DIRECTORY
- ${CMAKE_BINARY_DIR}/flang-rt/lib)
-set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY
- ${CMAKE_BINARY_DIR}/flang-rt/lib)
-set(CMAKE_CURRENT_BINARY_DIR ${CMAKE_BINARY_DIR}/flang-rt)
-
-set(FLANG_RT_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
-set(FLANG_RT_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}")
-
-#===============================================================================
-# Setup Options and Defaults
-#===============================================================================
-option(FLANG_RT_ENABLE_SHARED "Build flang-rt as a shared library." OFF)
-option(FLANG_RT_ENABLE_STATIC "Build flang-rt as a static library." OFF)
-
-option(FLANG_RT_INCLUDE_TESTS
- "Generate build targets for the Flang-rt unit tests." ${LLVM_INCLUDE_TESTS})
-
-# MLIR_DIR must be passed on invocation of flang-rt because it is needed for the Flang package.
-if(NOT DEFINED MLIR_DIR OR MLIR_DIR STREQUAL "")
- message(FATAL_ERROR "MLIR_DIR must be set to the directory of the MLIRConfig cmake file in order to find the MLIR package.")
-endif()
-# Flang-rt requires a pre-built/installed version of flang that requires MLIR.
-find_package(MLIR REQUIRED HINTS "${MLIR_DIR}")
-
-# FLANG_DIR must be passed on invocation of flang-rt.
-if(NOT DEFINED FLANG_DIR OR FLANG_DIR STREQUAL "")
- message(FATAL_ERROR "FLANG_DIR must be set to the directory of the FlangConfig cmake file in order to find the Flang package.")
-endif()
-# Flang-rt requires a pre-built/installed version of flang.
-# Flang-rt uses flang/Common headers.
-# Finding this package exposes FLANG_SOURCE_DIR, FLANG_BINARY_DIR, and FLANG_INCLUDE_DIRS to Flang-rt
-find_package(Flang REQUIRED HINTS "${FLANG_DIR}")
-# If the user specifies a relative path to LLVM_DIR, the calls to include
-# LLVM modules fail. Append the absolute path to LLVM_DIR instead.
-get_filename_component(FLANG_DIR_ABSOLUTE ${FLANG_DIR} REALPATH)
-list(APPEND CMAKE_MODULE_PATH ${FLANG_DIR_ABSOLUTE})
-
-set(LLVM_COMMON_CMAKE_UTILS "${FLANG_RT_SOURCE_DIR}/../cmake")
-set(LLVM_CMAKE_UTILS "${LLVM_BUILD_MAIN_SOURCE_DIR}/cmake")
-set(CLANG_CMAKE_UTILS "${FLANG_RT_SOURCE_DIR}/../clang/cmake")
-
-if (FLANG_RT_INCLUDE_TESTS)
- # LLVM_DIR must be passed on invocation of flang-rt when tests are enabled.
- if(NOT DEFINED LLVM_DIR OR LLVM_DIR STREQUAL "")
- message(FATAL_ERROR "LLVM_DIR must be set to the directory of the LLVMConfig cmake file in order to find the LLVM package.")
- endif()
- # We need a pre-built/installed version of LLVM for gtest.
- find_package(LLVM REQUIRED HINTS "${LLVM_DIR}")
- # If the user specifies a relative path to LLVM_DIR, the calls to include
- # LLVM modules fail. Append the absolute path to LLVM_DIR instead.
- get_filename_component(LLVM_DIR_ABSOLUTE ${LLVM_DIR} REALPATH)
- list(APPEND CMAKE_MODULE_PATH ${LLVM_DIR_ABSOLUTE})
-
- add_compile_definitions(FLANG_RT_INCLUDE_TESTS=1)
-
- if (DEFINED FLANG_BINARY_DIR)
- set(FLANG_BINARY_DIR ${FLANG_BINARY_DIR} CACHE PATH "Path to the Flang build directory" FORCE)
- else()
- message(FATAL_ERROR "FLANG_BINARY_DIR must be defined or passed by the user when building tests.")
- endif()
- set(FLANG_RT_TEST_COMPILER ${FLANG_BINARY_DIR}/bin/flang-new
- CACHE PATH "Compiler to use for testing")
- set(FLANG_RT_GTEST_AVAIL 1)
-endif()
-
-# Add path for custom modules
-list(INSERT CMAKE_MODULE_PATH 0
- "${FLANG_SOURCE_DIR}/cmake"
- "${FLANG_SOURCE_DIR}/cmake/modules"
- "${CLANG_CMAKE_UTILS}/modules"
- "${LLVM_CMAKE_UTILS}/modules"
-)
-
-include(AddClang)
-include(AddFlang)
-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 ()
-
-# Flang's include directories are needed for flang/Common.
-include_directories(SYSTEM ${FLANG_INCLUDE_DIRS})
-
-# LLVM's include directories are needed for gtest.
-include_directories(SYSTEM ${LLVM_INCLUDE_DIRS})
-
-#===============================================================================
-# Add Subdirectories
-#===============================================================================
-set(FORTRAN_DECIMAL_SRC "${FLANG_SOURCE_DIR}/lib/Decimal")
-set(FORTRAN_RUNTIME_SRC "${FLANG_SOURCE_DIR}/runtime")
-set(FORTRAN_MAIN_SRC "${FLANG_SOURCE_DIR}/runtime/FortranMain")
-
-add_subdirectory(${FORTRAN_DECIMAL_SRC} FortranDecimalRT)
-add_subdirectory(${FORTRAN_RUNTIME_SRC} FortranRuntime)
-add_subdirectory(${FORTRAN_MAIN_SRC} FortranMain)
-
-if (FLANG_RT_INCLUDE_TESTS)
- add_subdirectory(test)
- if (FLANG_RT_GTEST_AVAIL)
- add_subdirectory(unittests)
- endif()
-endif()
-
-#===============================================================================
-# Create Flang-rt wrapper library
-#===============================================================================
-# Build as shared by default if no linkage type option set.
-if (NOT FLANG_RT_ENABLE_SHARED AND NOT FLANG_RT_ENABLE_STATIC)
- add_library(flang-rt SHARED $<TARGET_OBJECTS:obj.FortranDecimalRT>
- $<TARGET_OBJECTS:obj.FortranRuntime>)
-endif()
-if (FLANG_RT_ENABLE_SHARED)
- add_library(flang-rt SHARED $<TARGET_OBJECTS:obj.FortranDecimalRT>
- $<TARGET_OBJECTS:obj.FortranRuntime>)
-endif()
-if (FLANG_RT_ENABLE_STATIC AND NOT FLANG_RT_ENABLE_SHARED)
- add_library(flang-rt STATIC $<TARGET_OBJECTS:obj.FortranDecimalRT>
- $<TARGET_OBJECTS:obj.FortranRuntime>)
-endif()
-# When building both static and shared, we need to append _static to the name
-# to avoid naming conflicts.
-if (FLANG_RT_ENABLE_STATIC AND FLANG_RT_ENABLE_SHARED)
- add_library(flang-rt_static STATIC $<TARGET_OBJECTS:obj.FortranDecimalRT>
- $<TARGET_OBJECTS:obj.FortranRuntime>)
-endif()
diff --git a/flang-rt/docs/GettingStarted.md b/flang-rt/docs/GettingStarted.md
deleted file mode 100644
index ffc721aa9b4a4c3..000000000000000
--- a/flang-rt/docs/GettingStarted.md
+++ /dev/null
@@ -1,156 +0,0 @@
-<!--===- docs/GettingStarted.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
-
--->
-
-# Flang-rt Runtime Library
-
-```eval_rst
-.. contents::
- :local:
-```
-## What is Flang-rt
-Flang-rt is the runtime library project for Flang. The Flang driver requires
-the Fortran_main and Flang-rt libraries at runtime in order to generate
-user executables. Building this Flang-rt project will build both Fortran_main
-and the Flang-rt library, which is comprised of the FortranRuntime and
-FortranDecimalRT libraries.
-
-### Fortran_main
-Fortran_main is left out of the Flang-rt library because it is required to
-always be static unlike the link type of the Flang-rt library which can be
-configured. Fortran_main implements the main entry point into Fortran's
-`PROGRAM` in Flang by being the bridge between object files generated by Flang
-and the C runtime that takes care of program set-up at system-level. For
-every Fortran `PROGRAM`, Flang generates the `_QQmain` function.
-Fortran_main implements the C `main` function that simply calls
-`_QQmain`.
-
-### FortranDecimalRT
-In order to decouple the common dependency between compiler and runtime,
-[FortranDecimal's sources](../../flang/lib/Decimal/CMakeLists.txt) are built
-separately for the compiler and the runtime. When the library is built for
-Flang-rt, the name FortranDecimalRT is used to avoid naming conflicts and
-confusion.
-
-### FortranRuntime
-This is the core runtime library in Flang-rt. The sources for this library
-currently still exist in the
-[Flang source directory](../../flang/runtime/CMakeLists.txt). We hope to
-migrate the sources to the Flang-rt directory in the future in order to further
-decouple the runtime from the Flang compiler.
-
-## Building Flang-rt
-Like other LLVM runtimes, Flang-rt can be built by targetting the
-[runtimes LLVM target](../../runtimes/CMakelists.txt). It can also be built
-when targetting the [llvm target](../../llvm/CMakeLists.txt) as an enabled
-runtime. Flang-rt will implicitly be added as an enabled runtime when Flang
-is an enabled project built by llvm. Flang-rt does not support standalone
-builds.
-
-In the future, we may be interested in supporting in optionally building
-Flang-rt when doing a Flang standalone build.
-
-### Building with the llvm target
-Assuming you are building Flang-rt to use with Flang, see
-[Flang's Getting Started guide](../../flang/docs/GettingStarted.md) for more
-information. To build Flang-rt when building the Flang compiler, once you have
-the llvm-project source ready, make a clean build directory. Let root be the
-root directory that you cloned llvm-project into.
-```bash
-cd root
-rm -rf build
-mkdir build
-cd build
-```
-Now invoke the cmake configuration command for llvm that would build Flang with
-Flang-rt.
-```bash
-cmake \
- -G Ninja \
- -DLLVM_ENABLE_RUNTIMES="compiler-rt;flang-rt" \
- -DCMAKE_CXX_STANDARD=17 \
- -DLLVM_INSTALL_UTILS=On \
- # New Flang-rt flags for enabled link types
- -DFLANG_RT_ENABLE_STATIC=On \
- -DFLANG_RT_ENABLE_SHARED=On \
- # We need to enable GTest if we want to run Flang-rt's testsuites
- -DLLVM_INSTALL_GTEST=On \
- -DFLANG_ENABLE_WERROR=On \
- -DLLVM_LIT_ARGS=-v \
- -DCMAKE_BUILD_TYPE=Release \
- -DLLVM_ENABLE_PROJECTS="clang;flang;lld;mlir;openmp" \
- ../llvm-project/llvm
-```
-Flang requires other llvm projects (see LLVM_ENABLE_PROJECTS and the [Flang
-Getting Started Guide](../../flang/docs/GettingStarted.md) for more specifics
-on building Flang.
-
-By targetting the LLVM project, we are letting LLVM infrastructure handle
-invoking the runtimes target that will build Flang-rt. This includes finding
-the cmake packages for Clang, LLVM, Flang and MLIR that Flang-rt depends on.
-
-### Building with the runtimes target
-If you already have a pre-built/installed version of LLVM, Flang, Clang and
-MLIR, and would like to build Flang-rt without rebuilding the sources for these
-other projects. You can simply target the runtimes project directly and passing
-the paths to the directories of these files. If you built LLVM as we did above
-with default build directories, your runtimes invocation should look something
-like:
-```bash
-cd build
-BUILDDIR=`pwd`
-
-cmake \
- -G Ninja \
- -DCMAKE_CXX_STANDARD=17 \
- # New Flang-rt flags for enabled link types
- -DFLANG_RT_ENABLE_SHARED=On \
- -DFLANG_RT_ENABLE_STATIC=On \
- -DLLVM_LIT_ARGS=-v \
- -DCMAKE_BUILD_TYPE=Release \
- -DCMAKE_CXX_LINK_FLAGS="-Wl,-rpath,$LD_LIBRARY_PATH" \
- -DLLVM_TARGETS_TO_BUILD=host \
- -DLLVM_EXTERNAL_LIT=$BUILD_DIR/bin/llvm-lit \
- # We need to specify the paths to the cmake packages of the dependencies
- -DLLVM_DIR=$BUILD_DIR/lib/cmake/llvm \
- -DMLIR_DIR=$BUILD_DIR/lib/cmake/mlir \
- -DFLANG_DIR=$BUILD_DIR/lib/cmake/flang \
- -DLLVM_ENABLE_RUNTIMES="flang-rt" \
- ../llvm-project/runtimes/
-```
-
-## Library locations
-When building the llvm target with flang as an enabled project, the Flang-rt
-library will be built to `$BUILDDIR/runtimes/runtimes-bins/flang-rt/lib`. When
-building the runtimes target with flang-rt as an enabled runtime, the libraries
-will be built to `$BUILDDIR/flang-rt/lib` by default. In either configuration,
-the Fortran_main library will be built to `$BUILDDIR/lib` by default.
-
-## Using Flang-rt
-The two build paths mentioned above get implicitly added as library paths at the
-invocation of the driver. If Flang-rt is a shared library, you must make the
-dynamic linker aware of where to look. One method to do so is to set the
-environment variable `LD_LIBRARY_PATH` include the path to Flang-rt's directory.
-
-## Options
-Flang-rt introduces 2 CMake options used to configure the library's link type:
-```
-option(FLANG_RT_ENABLE_SHARED "Build flang-rt as a shared library." OFF)
-option(FLANG_RT_ENABLE_STATIC "Build flang-rt as a static library." OFF)
-```
-Both can be specified if you want to build both shared and static versions of
-the Flang-rt runtime. If both are specified, the static library will be named
-Flang-rt_static.a to avoid naming conflicts, as per the LLVM standard.
-
-## Usage Examples
-```bash
-# Example of using Flang with the shared Flang-rt runtime
-# First we need to explicitly tell the dynamic linker where to find Flang-rt
-# since it was built as shared.
-$ $ export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$BUILDDIR/runtimes/runtimes-bins/flang-rt/lib"
-$ flang-new -ffree-form hello.f95 -o hello
-```
diff --git a/flang-rt/test/CMakeLists.txt b/flang-rt/test/CMakeLists.txt
deleted file mode 100644
index 51cd6ddf864bc8a..000000000000000
--- a/flang-rt/test/CMakeLists.txt
+++ /dev/null
@@ -1,73 +0,0 @@
-# Test runner infrastructure for Flang-rt. This configures the Flang-rt 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
- PATHS
- ${PATHS_FOR_PLUGINS}
-)
-
-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
-)
-
-set(FLANG_RT_TEST_PARAMS
- flang_rt_site_config=${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg.py)
-
-set(FLANG_RT_TEST_DEPENDS
- LLVMSupport
- flang-rt
- Fortran_main
-)
-if (LLVM_ENABLE_PLUGINS AND NOT WIN32)
- list(APPEND FLANG_RT_TEST_DEPENDS Bye)
-endif()
-
-if (FLANG_RT_INCLUDE_TESTS)
- if (FLANG_RT_GTEST_AVAIL)
- list(APPEND FLANG_RT_TEST_DEPENDS FlangRTUnitTests)
- endif()
-endif()
-
-add_custom_target(flang-rt-test-depends DEPENDS ${FLANG_RT_TEST_DEPENDS})
-
-add_lit_testsuite(check-flang-rt "Running the Flang-rt regression tests"
- ${CMAKE_CURRENT_BINARY_DIR}
- PARAMS ${FLANG_RT_TEST_PARAMS}
- DEPENDS ${FLANG_RT_TEST_DEPENDS}
-)
-set_target_properties(check-flang-rt PROPERTIES FOLDER "Tests")
-
-add_lit_testsuites(FLANG_RT ${CMAKE_CURRENT_SOURCE_DIR}
- PARAMS ${FLANG_RT_TEST_PARAMS}
- DEPENDS ${FLANG_RT_TEST_DEPENDS})
-
-# To modify the default target triple for flang-rt tests.
-if (DEFINED FLANG_RT_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_RT_TEST_TARGET_TRIPLE.")
- endif()
-endif()
diff --git a/flang-rt/test/FortranRuntime/no-cpp-dep.c b/flang-rt/test/FortranRuntime/no-cpp-dep.c
deleted file mode 100644
index 19c0260020b528b..000000000000000
--- a/flang-rt/test/FortranRuntime/no-cpp-dep.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
-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
-
-RUN: %cc -std=c99 %s -I%include %libruntime -lm -o /dev/null
-*/
-
-#include "flang/Runtime/entry-names.h"
-#include <stdint.h>
-
-/*
-Manually add declarations for the runtime functions that we want to make sure
-we're testing. We can't include any headers directly since they likely contain
-C++ code that would explode here.
-*/
-struct EnvironmentDefaultList;
-struct Descriptor;
-
-double RTNAME(CpuTime)();
-
-void RTNAME(ProgramStart)(
- int, const char *[], const char *[], const struct EnvironmentDefaultList *);
-int32_t RTNAME(ArgumentCount)();
-int32_t RTNAME(GetCommandArgument)(int32_t, const struct Descriptor *,
- const struct Descriptor *, const struct Descriptor *);
-int32_t RTNAME(GetEnvVariable)();
-
-int main() {
- double x = RTNAME(CpuTime)();
- 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);
- return x + c + v + e;
-}
diff --git a/flang-rt/test/NonGtestUnit/lit.cfg.py b/flang-rt/test/NonGtestUnit/lit.cfg.py
deleted file mode 100644
index 32be1d27c8f28c3..000000000000000
--- a/flang-rt/test/NonGtestUnit/lit.cfg.py
+++ /dev/null
@@ -1,22 +0,0 @@
-import os
-
-import lit.Test
-
-config.name = "flang-rt-OldUnit"
-
-config.suffixes = [".test"]
-
-config.test_source_root = os.path.join(config.flang_rt_obj_root, "unittests")
-config.test_exec_root = config.test_source_root
-
-config.test_format = lit.formats.ExecutableTest()
-
-path = os.path.pathsep.join(
- (
- config.flang_rt_lib_dir,
- config.flang_bin_dir,
- config.flang_libs_dir,
- config.environment.get("LD_LIBRARY_PATH", ""),
- )
-)
-config.environment["LD_LIBRARY_PATH"] = path
diff --git a/flang-rt/test/NonGtestUnit/lit.site.cfg.py.in b/flang-rt/test/NonGtestUnit/lit.site.cfg.py.in
deleted file mode 100644
index 83d8e0e04adf91b..000000000000000
--- a/flang-rt/test/NonGtestUnit/lit.site.cfg.py.in
+++ /dev/null
@@ -1,23 +0,0 @@
- at LIT_SITE_CFG_IN_HEADER@
-
-config.llvm_src_root = "@LLVM_SOURCE_DIR@"
-config.llvm_obj_root = "@LLVM_BINARY_DIR@"
-config.llvm_tools_dir = lit_config.substitute("@LLVM_TOOLS_DIR@")
-config.llvm_libs_dir = lit_config.substitute("@LLVM_LIBS_DIR@")
-config.llvm_build_mode = lit_config.substitute("@LLVM_BUILD_MODE@")
-config.lit_tools_dir = "@LLVM_LIT_TOOLS_DIR@"
-config.flang_src_dir = "@FLANG_SOURCE_DIR@"
-config.flang_bin_dir = "@FLANG_BINARY_DIR@/bin"
-config.flang_libs_dir = "@FLANG_BINARY_DIR@/lib"
-config.flang_rt_obj_root = "@FLANG_RT_BINARY_DIR@"
-config.flang_tools_dir = lit_config.substitute("@FLANG_TOOLS_DIR@")
-config.flang_llvm_tools_dir = "@CMAKE_BINARY_DIR@/bin"
-config.flang_rt_src_dir = "@FLANG_RT_SOURCE_DIR@"
-config.flang_rt_lib_dir = "@FLANG_RT_BINARY_DIR@/lib"
-config.flang_rt_test_compiler = "@FLANG_RT_TEST_COMPILER@"
-config.flang_rt_test_triple = "@FLANG_RT_TEST_TARGET_TRIPLE@"
-config.target_triple = "@LLVM_TARGET_TRIPLE@"
-config.python_executable = "@Python3_EXECUTABLE@"
-
-# Let the main config do the real work.
-lit_config.load_config(config, "@FLANG_RT_SOURCE_DIR@/test/NonGtestUnit/lit.cfg.py")
diff --git a/flang-rt/test/Unit/lit.cfg.py b/flang-rt/test/Unit/lit.cfg.py
deleted file mode 100644
index 079516fc86d7aee..000000000000000
--- a/flang-rt/test/Unit/lit.cfg.py
+++ /dev/null
@@ -1,58 +0,0 @@
-# -*- Python -*-
-
-# Configuration file for the 'lit' test runner.
-
-import os
-import platform
-import re
-import subprocess
-import sys
-
-import lit.formats
-import lit.util
-
-from lit.llvm import llvm_config
-from lit.llvm.subst import ToolSubst
-from lit.llvm.subst import FindTool
-
-# name: The name of this test suite.
-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.
-# test_exec_root: The root path where tests should be run.
-config.test_source_root = os.path.join(config.flang_rt_obj_root, "unittests")
-config.test_exec_root = config.test_source_root
-
-# testFormat: The test format to use to interpret tests.
-config.test_format = lit.formats.GoogleTest(config.llvm_build_mode, "Tests")
-
-# Tweak the PATH to include the flang bin and libs dirs.
-path = os.path.pathsep.join(
- (
- config.flang_bin_dir,
- config.llvm_tools_dir,
- config.environment["PATH"]
- )
-)
-config.environment["PATH"] = path
-
-path = os.path.pathsep.join(
- (
- config.flang_rt_lib_dir,
- config.flang_libs_dir,
- config.flang_bin_dir,
- config.environment.get("LD_LIBRARY_PATH", ""),
- )
-)
-config.environment["LD_LIBRARY_PATH"] = path
-
-# Propagate PYTHON_EXECUTABLE into the environment
-# config.environment['PYTHON_EXECUTABLE'] = sys.executable
-
-# To modify the default target triple for flang-rt tests.
-if config.flang_rt_test_triple:
- config.target_triple = config.flang_rt_test_triple
- config.environment[config.llvm_target_triple_env] = config.flang_rt_test_triple
diff --git a/flang-rt/test/Unit/lit.site.cfg.py.in b/flang-rt/test/Unit/lit.site.cfg.py.in
deleted file mode 100644
index 4bd4bc40473d87d..000000000000000
--- a/flang-rt/test/Unit/lit.site.cfg.py.in
+++ /dev/null
@@ -1,22 +0,0 @@
- at LIT_SITE_CFG_IN_HEADER@
-
-config.llvm_src_root = "@LLVM_SOURCE_DIR@"
-config.llvm_obj_root = "@LLVM_BINARY_DIR@"
-config.llvm_target_triple_env = "@LLVM_TARGET_TRIPLE_ENV@"
-config.llvm_tools_dir = lit_config.substitute("@LLVM_TOOLS_DIR@")
-config.llvm_build_mode = lit_config.substitute("@LLVM_BUILD_MODE@")
-config.lit_tools_dir = "@LLVM_LIT_TOOLS_DIR@"
-config.flang_bin_dir = "@FLANG_BINARY_DIR@/bin"
-config.flang_src_dir = "@FLANG_SOURCE_DIR@"
-config.flang_libs_dir = "@FLANG_BINARY_DIR@/lib"
-config.flang_rt_obj_root = "@FLANG_RT_BINARY_DIR@"
-config.flang_rt_src_dir = "@FLANG_RT_SOURCE_DIR@"
-config.flang_rt_lib_dir = "@FLANG_RT_BINARY_DIR@/lib"
-config.flang_rt_test_compiler = "@FLANG_RT_TEST_COMPILER@"
-config.flang_rt_test_triple = "@FLANG_RT_TEST_TARGET_TRIPLE@"
-config.flang_tools_dir = lit_config.substitute("@FLANG_TOOLS_DIR@")
-config.target_triple = "@LLVM_TARGET_TRIPLE@"
-config.python_executable = "@Python3_EXECUTABLE@"
-
-# Let the main config do the real work.
-lit_config.load_config(config, "@FLANG_RT_SOURCE_DIR@/test/Unit/lit.cfg.py")
diff --git a/flang-rt/test/lit.cfg.py b/flang-rt/test/lit.cfg.py
deleted file mode 100644
index 97edd482c57c142..000000000000000
--- a/flang-rt/test/lit.cfg.py
+++ /dev/null
@@ -1,173 +0,0 @@
-# -*- Python -*-
-
-import os
-import platform
-import re
-import subprocess
-import sys
-
-import lit.formats
-import lit.util
-
-from lit.llvm import llvm_config
-from lit.llvm.subst import ToolSubst
-from lit.llvm.subst import FindTool
-
-# Configuration file for the 'lit' test runner.
-
-# name: The name of this test suite.
-config.name = "flang-rt"
-
-# 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",
-]
-
-config.substitutions.append(("%PATH%", config.environment["PATH"]))
-config.substitutions.append(("%pluginext", config.llvm_plugin_ext))
-
-llvm_config.use_default_substitutions()
-
-# ask llvm-config about asserts
-llvm_config.feature_config([("--assertion-mode", {"ON": "asserts"})])
-
-# Targets
-config.targets = frozenset(config.targets_to_build.split())
-for arch in config.targets_to_build.split():
- config.available_features.add(arch.lower() + "-registered-target")
-
-# To modify the default target triple for flang-rt tests.
-if config.flang_rt_test_triple:
- config.target_triple = config.flang_rt_test_triple
- config.environment[config.llvm_target_triple_env] = config.flang_rt_test_triple
-
-# excludes: A list of directories to exclude from the testsuite. The 'Inputs'
-# subdirectories contain auxiliary inputs for various tests in their parent
-# directories.
-config.excludes = ["Inputs", "CMakeLists.txt", "README.txt", "LICENSE.txt"]
-
-# Plugins (loadable modules)
-if config.has_plugins:
- config.available_features.add("plugins")
-
-if config.linked_bye_extension:
- config.substitutions.append(("%loadbye", ""))
-else:
- config.substitutions.append(
- (
- "%loadbye",
- "-fpass-plugin={}/Bye{}".format(
- config.llvm_shlib_dir, config.llvm_plugin_ext
- ),
- )
- )
-
-# 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.
-config.test_exec_root = os.path.join(config.flang_rt_obj_root, "test")
-
-llvm_config.with_environment("PATH", config.flang_bin_dir, append_path=True)
-llvm_config.with_environment("PATH", config.flang_rt_obj_root, append_path=True)
-llvm_config.with_environment("PATH", config.flang_libs_dir, append_path=True)
-llvm_config.with_environment("PATH", config.flang_rt_lib_dir, append_path=True)
-
-# For each occurrence of a flang tool name, replace it with the full path to
-# the build directory holding that tool.
-tools = [
- ToolSubst("%flang", command=FindTool("flang-new"), unresolved="fatal"),
- ToolSubst(
- "%flang_fc1",
- command=FindTool("flang-new"),
- extra_args=["-fc1"],
- unresolved="fatal",
- ),
-]
-
-# Flang has several unimplemented features. TODO messages are used to mark
-# and fail if these features are exercised. Some TODOs exit with a non-zero
-# exit code, but others abort the execution in assert builds.
-# To catch aborts, the `--crash` option for the `not` command has to be used.
-tools.append(ToolSubst("%not_todo_cmd", command=FindTool("not"), unresolved="fatal"))
-if "asserts" in config.available_features:
- tools.append(
- ToolSubst(
- "%not_todo_abort_cmd",
- command=FindTool("not"),
- extra_args=["--crash"],
- unresolved="fatal",
- )
- )
-else:
- tools.append(
- 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_static = os.path.join(config.flang_rt_lib_dir, "libflang-rt.a")
- libruntime_shared = os.path.join(config.flang_rt_lib_dir, "libflang-rt.so")
- include = os.path.join(config.flang_src_dir, "include")
-
- if (
- os.path.isfile(libruntime_static)
- and os.path.isdir(include)
- ):
- config.available_features.add("c-compiler")
- tools.append(ToolSubst("%cc", command=config.cc, unresolved="fatal"))
- tools.append(ToolSubst("%libruntime", command=libruntime_static, unresolved="fatal"))
- tools.append(ToolSubst("%include", command=include, unresolved="fatal"))
-
- elif (
- os.path.isfile(libruntime_shared)
- and os.path.isdir(include)
- ):
- config.available_features.add("c-compiler")
- tools.append(ToolSubst("%cc", command=config.cc, unresolved="fatal"))
- tools.append(ToolSubst("%libruntime", command=libruntime_shared, 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.
-llvm_config.add_tool_substitutions(tools, config.llvm_tools_dir)
-
-# Enable libpgmath testing
-result = lit_config.params.get("LIBPGMATH")
-if result:
- config.environment["LIBPGMATH"] = True
diff --git a/flang-rt/test/lit.site.cfg.py.in b/flang-rt/test/lit.site.cfg.py.in
deleted file mode 100644
index 8a9873b1eabaf37..000000000000000
--- a/flang-rt/test/lit.site.cfg.py.in
+++ /dev/null
@@ -1,31 +0,0 @@
- at LIT_SITE_CFG_IN_HEADER@
-
-import sys
-
-config.llvm_tools_dir = lit_config.substitute("@LLVM_TOOLS_DIR@")
-config.llvm_shlib_dir = lit_config.substitute(path(r"@SHLIBDIR@"))
-config.llvm_plugin_ext = "@LLVM_PLUGIN_EXT@"
-config.target_triple = "@LLVM_TARGET_TRIPLE@"
-config.llvm_target_triple_env = "@LLVM_TARGET_TRIPLE_ENV@"
-config.lit_tools_dir = "@LLVM_LIT_TOOLS_DIR@"
-config.errc_messages = "@LLVM_LIT_ERRC_MESSAGES@"
-config.flang_src_dir = "@FLANG_SOURCE_DIR@"
-config.flang_bin_dir = "@FLANG_BINARY_DIR@/bin"
-config.flang_libs_dir = "@FLANG_BINARY_DIR@/lib"
-config.flang_tools_dir = lit_config.substitute("@FLANG_TOOLS_DIR@")
-config.flang_llvm_tools_dir = "@CMAKE_BINARY_DIR@/bin"
-config.flang_rt_obj_root = "@FLANG_RT_BINARY_DIR@"
-config.flang_rt_src_dir = "@FLANG_RT_SOURCE_DIR@"
-config.flang_rt_lib_dir = "@FLANG_RT_BINARY_DIR@/lib"
-config.flang_rt_test_triple = "@FLANG_RT_TEST_TARGET_TRIPLE@"
-config.python_executable = "@PYTHON_EXECUTABLE@"
-config.has_plugins = @LLVM_ENABLE_PLUGINS@
-config.linked_bye_extension = @LLVM_BYE_LINK_INTO_TOOLS@
-config.cc = "@CMAKE_C_COMPILER@"
-config.targets_to_build = "@TARGETS_TO_BUILD@"
-
-import lit.llvm
-lit.llvm.initialize(lit_config, config)
-
-# Let the main config do the real work.
-lit_config.load_config(config, "@FLANG_RT_SOURCE_DIR@/test/lit.cfg.py")
diff --git a/flang-rt/unittests/CMakeLists.txt b/flang-rt/unittests/CMakeLists.txt
deleted file mode 100644
index 2b813c6e16dfaa1..000000000000000
--- a/flang-rt/unittests/CMakeLists.txt
+++ /dev/null
@@ -1,81 +0,0 @@
-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(FlangRTUnitTests)
-set_target_properties(FlangRTUnitTests PROPERTIES FOLDER "Flang-rt Unit Tests")
-
-function(add_flang_rt_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.
- # TODO: Revisit this because of Flang-rt. runtime is no longer an added subdirectory of flang.
- if (NOT FLANG_EXPERIMENTAL_OMP_OFFLOAD_BUILD STREQUAL "off")
- set_target_properties(${target}
- PROPERTIES LINK_OPTIONS
- "-fopenmp;--offload-arch=native"
- )
- endif()
-endfunction()
-
-if(NOT TARGET llvm_gtest)
- message(FATAL_ERROR "Target llvm_gtest not found.")
-endif()
-
-function(add_flang_rt_unittest test_dirname)
- add_unittest(FlangRTUnitTests ${test_dirname} ${ARGN})
- add_flang_rt_unittest_offload_properties(${test_dirname})
-endfunction()
-
-if (CXX_SUPPORTS_SUGGEST_OVERRIDE_FLAG)
- add_compile_options("-Wno-suggest-override")
-endif()
-
-function(add_flang_rt_nongtest_unittest test_name)
- cmake_parse_arguments(ARG
- "SLOW_TEST"
- ""
- ""
- ${ARGN})
-
- list(APPEND LLVM_COMPILE_FLAGS "-L${LLVM_BINARY_DIR}/lib")
- if(ARG_SLOW_TEST)
- set(suffix .slow)
- else()
- set(suffix .test)
- endif()
-
- add_executable(${test_name}${suffix} ${test_name}.cpp)
-
- if (LLVM_LINK_LLVM_DYLIB AND NOT ARG_DISABLE_LLVM_LINK_LLVM_DYLIB)
- set(llvm_libs LLVM)
- else()
- llvm_map_components_to_libnames(llvm_libs Support)
- endif()
- target_link_libraries(${test_name}${suffix} ${llvm_libs} ${ARG_UNPARSED_ARGUMENTS})
-
- if(NOT ARG_SLOW_TEST)
- add_dependencies(FlangRTUnitTests ${test_name}${suffix})
- endif()
-
- add_flang_rt_unittest_offload_properties(${test_name}${suffix})
-endfunction()
-
-add_subdirectory(FortranRuntime)
-# TODO: We may want to find a better location for these tests that use the runtime
-add_subdirectory(FortranEvaluate)
diff --git a/flang-rt/unittests/FortranEvaluate/CMakeLists.txt b/flang-rt/unittests/FortranEvaluate/CMakeLists.txt
deleted file mode 100644
index 211018f5559da9b..000000000000000
--- a/flang-rt/unittests/FortranEvaluate/CMakeLists.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
-add_library(FlangRTFortranEvaluateTesting
- testing.cpp
-)
-if (LLVM_LINK_LLVM_DYLIB)
- set(llvm_libs LLVM)
-else()
- llvm_map_components_to_libnames(llvm_libs Support)
-endif()
-target_link_libraries(FlangRTFortranEvaluateTesting
- ${llvm_libs})
-
-add_flang_rt_nongtest_unittest(reshape
- FlangRTFortranEvaluateTesting
- flang-rt
-)
-
-add_flang_rt_nongtest_unittest(ISO-Fortran-binding
- FlangRTFortranEvaluateTesting
- flang-rt
-)
diff --git a/flang-rt/unittests/FortranEvaluate/testing.cpp b/flang-rt/unittests/FortranEvaluate/testing.cpp
deleted file mode 100644
index cf0422f621c2fe5..000000000000000
--- a/flang-rt/unittests/FortranEvaluate/testing.cpp
+++ /dev/null
@@ -1,128 +0,0 @@
-#include "testing.h"
-#include <cstdarg>
-#include <cstdio>
-#include <cstdlib>
-
-namespace testing {
-
-namespace {
-int passes{0};
-int failures{0};
-} // namespace
-
-static void BitBucket(const char *, ...) {}
-
-static void PrintFailureDetails(const char *format, ...) {
- va_list ap;
- va_start(ap, format);
- fputs("\t", stderr);
- vfprintf(stderr, format, ap);
- va_end(ap);
- fputc('\n', stderr);
-}
-
-FailureDetailPrinter Test(const char *file, int line, const char *predicate,
- bool pass) {
- if (pass) {
- ++passes;
- return BitBucket;
- } else {
- ++failures;
- fprintf(stderr, "%s:%d: FAIL: %s\n", file, line, predicate);
- return PrintFailureDetails;
- }
-}
-
-FailureDetailPrinter Match(const char *file, int line, std::uint64_t want,
- const char *gots, std::uint64_t got) {
- if (want == got) {
- ++passes;
- return BitBucket;
- } else {
- ++failures;
- fprintf(stderr, "%s:%d: FAIL: %s == 0x%jx, not 0x%jx\n", file, line, gots,
- static_cast<std::uintmax_t>(got),
- static_cast<std::uintmax_t>(want));
- return PrintFailureDetails;
- }
-}
-
-FailureDetailPrinter Match(const char *file, int line, const char *want,
- const char *gots, const std::string &got) {
- if (want == got) {
- ++passes;
- return BitBucket;
- } else {
- ++failures;
- fprintf(stderr, "%s:%d: FAIL: %s == \"%s\", not \"%s\"\n", file, line, gots,
- got.data(), want);
- return PrintFailureDetails;
- }
-}
-
-FailureDetailPrinter Match(const char *file, int line, const std::string &want,
- const char *gots, const std::string &got) {
- return Match(file, line, want.data(), gots, got);
-}
-
-FailureDetailPrinter Compare(const char *file, int line, const char *xs,
- const char *rel, const char *ys, std::uint64_t x,
- std::uint64_t y) {
- while (*rel == ' ') {
- ++rel;
- }
- bool pass{false};
- if (*rel == '<') {
- if (rel[1] == '=') {
- pass = x <= y;
- } else {
- pass = x < y;
- }
- } else if (*rel == '>') {
- if (rel[1] == '=') {
- pass = x >= y;
- } else {
- pass = x > y;
- }
- } else if (*rel == '=') {
- pass = x == y;
- } else if (*rel == '!') {
- pass = x != y;
- }
- if (pass) {
- ++passes;
- return BitBucket;
- } else {
- ++failures;
- fprintf(stderr, "%s:%d: FAIL: %s[0x%jx] %s %s[0x%jx]\n", file, line, xs,
- static_cast<std::uintmax_t>(x), rel, ys,
- static_cast<std::uintmax_t>(y));
- return PrintFailureDetails;
- }
-}
-
-int Complete() {
- if (failures == 0) {
- if (passes == 1) {
- fprintf(stdout, "single test PASSES\n");
- } else {
- fprintf(stdout, "all %d tests PASS\n", passes);
- }
- passes = 0;
- return EXIT_SUCCESS;
- } else {
- if (passes == 1) {
- fprintf(stderr, "1 test passes, ");
- } else {
- fprintf(stderr, "%d tests pass, ", passes);
- }
- if (failures == 1) {
- fprintf(stderr, "1 test FAILS\n");
- } else {
- fprintf(stderr, "%d tests FAIL\n", failures);
- }
- passes = failures = 0;
- return EXIT_FAILURE;
- }
-}
-} // namespace testing
diff --git a/flang-rt/unittests/FortranEvaluate/testing.h b/flang-rt/unittests/FortranEvaluate/testing.h
deleted file mode 100644
index e4c8dc93f9be0c8..000000000000000
--- a/flang-rt/unittests/FortranEvaluate/testing.h
+++ /dev/null
@@ -1,37 +0,0 @@
-#ifndef FORTRAN_EVALUATE_TESTING_H_
-#define FORTRAN_EVALUATE_TESTING_H_
-
-#include <cinttypes>
-#include <string>
-
-namespace testing {
-
-// Returns EXIT_SUCCESS or EXIT_FAILURE, so a test's main() should end
-// with "return testing::Complete()".
-int Complete();
-
-// Pass/fail testing. These macros return a pointer to a printf-like
-// function that can be optionally called to print more detail, e.g.
-// COMPARE(x, ==, y)("z is 0x%llx", z);
-// will also print z after the usual failure message if x != y.
-#define TEST(predicate) \
- testing::Test(__FILE__, __LINE__, #predicate, (predicate))
-#define MATCH(want, got) testing::Match(__FILE__, __LINE__, (want), #got, (got))
-#define COMPARE(x, rel, y) \
- testing::Compare(__FILE__, __LINE__, #x, #rel, #y, (x), (y))
-
-// Functions called by these macros; do not call directly.
-using FailureDetailPrinter = void (*)(const char *, ...);
-FailureDetailPrinter Test(const char *file, int line, const char *predicate,
- bool pass);
-FailureDetailPrinter Match(const char *file, int line, std::uint64_t want,
- const char *gots, std::uint64_t got);
-FailureDetailPrinter Match(const char *file, int line, const char *want,
- const char *gots, const std::string &got);
-FailureDetailPrinter Match(const char *file, int line, const std::string &want,
- const char *gots, const std::string &got);
-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_
diff --git a/flang/CMakeLists.txt b/flang/CMakeLists.txt
index 893d5a4750813dc..ac30da89995ed31 100644
--- a/flang/CMakeLists.txt
+++ b/flang/CMakeLists.txt
@@ -188,7 +188,7 @@ if (FLANG_STANDALONE_BUILD)
if (FLANG_GTEST_AVAIL)
add_custom_target(check-all DEPENDS check-flang FlangUnitTests)
else()
- add_custom_target(check-all DEPENDS check-flang)
+ add_custom_target(check-all DEPENDS check-flang )
endif()
if (LLVM_BUILD_DOCS)
add_custom_target(doxygen ALL)
@@ -421,11 +421,6 @@ if (FLANG_INCLUDE_TESTS)
add_compile_definitions(FLANG_INCLUDE_TESTS=1)
endif()
-# Add Flang subdirectories.
-# NOTE: The runtime subdirectory is no longer added here.
-# Sources for the runtime are added in Flang-rt.
-# TODO: Move the runtime sources to the flang-rt top level directory.
-
add_subdirectory(include)
add_subdirectory(lib)
add_subdirectory(cmake/modules)
@@ -435,6 +430,7 @@ option(FLANG_BUILD_TOOLS
if (FLANG_BUILD_TOOLS)
add_subdirectory(tools)
endif()
+add_subdirectory(runtime)
if (LLVM_INCLUDE_EXAMPLES)
add_subdirectory(examples)
diff --git a/flang/cmake/modules/AddFlang.cmake b/flang/cmake/modules/AddFlang.cmake
index a072f372bcff85f..41ce8738e7bf277 100644
--- a/flang/cmake/modules/AddFlang.cmake
+++ b/flang/cmake/modules/AddFlang.cmake
@@ -17,7 +17,7 @@ macro(add_flang_subdirectory name)
endmacro()
function(add_flang_library name)
- set(options SHARED STATIC INSTALL_WITH_TOOLCHAIN PIC)
+ set(options SHARED STATIC INSTALL_WITH_TOOLCHAIN)
set(multiValueArgs ADDITIONAL_HEADERS CLANG_LIBS)
cmake_parse_arguments(ARG
"${options}"
@@ -65,9 +65,6 @@ function(add_flang_library name)
endif()
llvm_add_library(${name} ${LIBTYPE} ${ARG_UNPARSED_ARGUMENTS} ${srcs})
- if (ARG_PIC)
- set_target_properties(${name} PROPERTIES POSITION_INDEPENDENT_CODE ON)
- endif()
clang_target_link_libraries(${name} PRIVATE ${ARG_CLANG_LIBS})
diff --git a/flang/cmake/modules/FlangConfig.cmake.in b/flang/cmake/modules/FlangConfig.cmake.in
index 359a1dbac617e4e..ac4b77bd8514a7a 100644
--- a/flang/cmake/modules/FlangConfig.cmake.in
+++ b/flang/cmake/modules/FlangConfig.cmake.in
@@ -9,8 +9,6 @@ find_package(LLVM ${LLVM_VERSION} EXACT REQUIRED CONFIG
set(FLANG_EXPORTED_TARGETS "@FLANG_EXPORTS@")
set(FLANG_CMAKE_DIR "@FLANG_CONFIG_CMAKE_DIR@")
set(FLANG_INCLUDE_DIRS "@FLANG_CONFIG_INCLUDE_DIRS@")
-set(FLANG_SOURCE_DIR "@FLANG_SOURCE_DIR@")
-set(FLANG_BINARY_DIR "@FLANG_BINARY_DIR@")
# Provide all our library targets to users.
@FLANG_CONFIG_INCLUDE_EXPORTS@
diff --git a/flang/lib/Decimal/CMakeLists.txt b/flang/lib/Decimal/CMakeLists.txt
index 211c19693de810c..3116ff68ea2627e 100644
--- a/flang/lib/Decimal/CMakeLists.txt
+++ b/flang/lib/Decimal/CMakeLists.txt
@@ -49,19 +49,7 @@ endif()
# avoid an unwanted dependency on libstdc++.so.
add_definitions(-U_GLIBCXX_ASSERTIONS)
-# Build FortranDecimal when the build target is Flang or LLVM.
-if (CMAKE_SOURCE_DIR STREQUAL FLANG_SOURCE_DIR OR CMAKE_SOURCE_DIR STREQUAL LLVM_MAIN_SRC_DIR)
- add_flang_library(FortranDecimal
- binary-to-decimal.cpp
- decimal-to-binary.cpp
- )
-# Build FortranDecimalRT for FlangRT when the build target is Runtimes.
-# Standalone builds of FlangRT is not supported.
-elseif (CMAKE_SOURCE_DIR STREQUAL Runtimes_SOURCE_DIR)
- add_flang_library(FortranDecimalRT STATIC INSTALL_WITH_TOOLCHAIN PIC
- binary-to-decimal.cpp
- decimal-to-binary.cpp
- )
-else()
- message(FATAL_ERROR "CMAKE_SOURCE_DIR of target points to neither Flang or Flang-rt, no library added for FortranDecimal.")
-endif()
+add_flang_library(FortranDecimal INSTALL_WITH_TOOLCHAIN
+ binary-to-decimal.cpp
+ decimal-to-binary.cpp
+)
diff --git a/flang/runtime/CMakeLists.txt b/flang/runtime/CMakeLists.txt
index 51f1e16be778b89..e7d416749219ef6 100644
--- a/flang/runtime/CMakeLists.txt
+++ b/flang/runtime/CMakeLists.txt
@@ -6,14 +6,10 @@
#
#===------------------------------------------------------------------------===#
-# TODO: Maybe this file should still be added by flang/CMakeLists.txt and
-# when FLANG_STANDALONE_BUILD=On and a new variable FLANG_BUILD_RUNTIME=On
-# we should invoke an ExternalProject_Add(flang-rt ...) from here?
-
if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
cmake_minimum_required(VERSION 3.20.0)
- project(FortranRuntime C CXX)
+ project(FlangRuntime C CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
@@ -86,6 +82,8 @@ append(${NO_LTO_FLAGS} CMAKE_CXX_FLAGS)
add_definitions(-U_GLIBCXX_ASSERTIONS)
add_definitions(-U_LIBCPP_ENABLE_ASSERTIONS)
+add_subdirectory(FortranMain)
+
set(sources
ISO_Fortran_binding.cpp
allocatable.cpp
@@ -270,13 +268,10 @@ if (NOT FLANG_EXPERIMENTAL_OMP_OFFLOAD_BUILD STREQUAL "off")
endif()
endif()
-add_compile_options(-fPIC)
-
-add_flang_library(FortranRuntime STATIC
+add_flang_library(FortranRuntime
${sources}
LINK_LIBS
- FortranDecimalRT
+ FortranDecimal
INSTALL_WITH_TOOLCHAIN
- PIC
)
diff --git a/flang/runtime/sum.cpp b/flang/runtime/sum.cpp
index 6ca6620c16cde07..c3c148296384622 100644
--- a/flang/runtime/sum.cpp
+++ b/flang/runtime/sum.cpp
@@ -138,15 +138,10 @@ CppTypeFor<TypeCategory::Real, 10> RTNAME(SumReal10)(const Descriptor &x,
}
#endif
#if LDBL_MANT_DIG == 113 || HAS_FLOAT128
-#if HAS_FLOAT128
-using AccumType = __float128;
-#else // if LDBL_MANT_DIG == 113
-using AccumType = long double;
-#endif
CppTypeFor<TypeCategory::Real, 16> RTNAME(SumReal16)(const Descriptor &x,
const char *source, int line, int dim, const Descriptor *mask) {
return GetTotalReduction<TypeCategory::Real, 16>(
- x, source, line, dim, mask, RealSumAccumulator<AccumType>{x}, "SUM");
+ x, source, line, dim, mask, RealSumAccumulator<long double>{x}, "SUM");
}
#endif
diff --git a/flang/test/CMakeLists.txt b/flang/test/CMakeLists.txt
index e93d594490b649b..7d96a72e5f36d6d 100644
--- a/flang/test/CMakeLists.txt
+++ b/flang/test/CMakeLists.txt
@@ -61,6 +61,9 @@ set(FLANG_TEST_DEPENDS
llvm-objdump
llvm-readobj
split-file
+ FortranRuntime
+ Fortran_main
+ 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 2fbf3c4bf3450a8..09b8a224df13828 100644
--- a/flang/test/Driver/linker-flags.f90
+++ b/flang/test/Driver/linker-flags.f90
@@ -24,18 +24,21 @@
! GNU-LABEL: "{{.*}}ld{{(\.exe)?}}"
! GNU-SAME: "[[object_file]]"
! GNU-SAME: -lFortran_main
-! GNU-SAME: -lflang-rt
+! GNU-SAME: -lFortranRuntime
+! GNU-SAME: -lFortranDecimal
! GNU-SAME: -lm
! DARWIN-LABEL: "{{.*}}ld{{(\.exe)?}}"
! DARWIN-SAME: "[[object_file]]"
! DARWIN-SAME: -lFortran_main
-! DARWIN-SAME: -lflang-rt
+! DARWIN-SAME: -lFortranRuntime
+! DARWIN-SAME: -lFortranDecimal
! MINGW-LABEL: "{{.*}}ld{{(\.exe)?}}"
! MINGW-SAME: "[[object_file]]"
! MINGW-SAME: -lFortran_main
-! MINGW-SAME: -lflang-rt
+! 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
@@ -43,6 +46,7 @@
! when the executable is not found or on non-Windows platforms.
! MSVC-LABEL: link
! MSVC-SAME: Fortran_main.lib
-! MSVC-SAME: flang-rt.lib
+! MSVC-SAME: FortranRuntime.lib
+! MSVC-SAME: FortranDecimal.lib
! MSVC-SAME: /subsystem:console
! MSVC-SAME: "[[object_file]]"
diff --git a/flang/test/lit.cfg.py b/flang/test/lit.cfg.py
index 89a2353047c305a..dda8ed456c986a5 100644
--- a/flang/test/lit.cfg.py
+++ b/flang/test/lit.cfg.py
@@ -153,16 +153,19 @@
# 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, "libflang-rt.a")
+ 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, 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
diff --git a/flang/tools/flang-driver/CMakeLists.txt b/flang/tools/flang-driver/CMakeLists.txt
index 9f33cdfe3fa90f7..3ce8b407450d245 100644
--- a/flang/tools/flang-driver/CMakeLists.txt
+++ b/flang/tools/flang-driver/CMakeLists.txt
@@ -14,6 +14,14 @@ set( LLVM_LINK_COMPONENTS
add_flang_tool(flang-new
driver.cpp
fc1_main.cpp
+
+ DEPENDS
+ # These libraries are used in the linker invocation generated by the driver
+ # (i.e. when constructing the linker job). Without them the driver would be
+ # unable to generate executables.
+ FortranRuntime
+ FortranDecimal
+ Fortran_main
)
target_link_libraries(flang-new
diff --git a/flang/unittests/CMakeLists.txt b/flang/unittests/CMakeLists.txt
index ab12fd8e7f5daad..72d37ebeb853c5b 100644
--- a/flang/unittests/CMakeLists.txt
+++ b/flang/unittests/CMakeLists.txt
@@ -24,15 +24,11 @@ function(add_flang_unittest_offload_properties target)
# 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.
- # TODO: Revisit this because of Flang-rt. runtime is no longer an added subdirectory of flang. So we temporarily duplicated the option definition to here. This is not a permanent solution.
- 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'")
-
if (NOT FLANG_EXPERIMENTAL_OMP_OFFLOAD_BUILD STREQUAL "off")
set_target_properties(${target}
- PROPERTIES LINK_OPTIONS
- "-fopenmp;--offload-arch=native"
- )
+ PROPERTIES LINK_OPTIONS
+ "-fopenmp;--offload-arch=native"
+ )
endif()
endfunction()
@@ -78,4 +74,5 @@ add_subdirectory(Optimizer)
add_subdirectory(Common)
add_subdirectory(Decimal)
add_subdirectory(Evaluate)
+add_subdirectory(Runtime)
add_subdirectory(Frontend)
diff --git a/flang/unittests/Evaluate/CMakeLists.txt b/flang/unittests/Evaluate/CMakeLists.txt
index f9551dac713a348..4658d8d3345b5d6 100644
--- a/flang/unittests/Evaluate/CMakeLists.txt
+++ b/flang/unittests/Evaluate/CMakeLists.txt
@@ -45,6 +45,7 @@ add_flang_nongtest_unittest(intrinsics
FortranDecimal
FortranSemantics
FortranParser
+ FortranRuntime
)
add_flang_nongtest_unittest(logical
@@ -67,6 +68,20 @@ add_flang_nongtest_unittest(real
)
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-rt/unittests/FortranEvaluate/ISO-Fortran-binding.cpp b/flang/unittests/Evaluate/ISO-Fortran-binding.cpp
similarity index 100%
rename from flang-rt/unittests/FortranEvaluate/ISO-Fortran-binding.cpp
rename to flang/unittests/Evaluate/ISO-Fortran-binding.cpp
diff --git a/flang-rt/unittests/FortranEvaluate/reshape.cpp b/flang/unittests/Evaluate/reshape.cpp
similarity index 100%
rename from flang-rt/unittests/FortranEvaluate/reshape.cpp
rename to flang/unittests/Evaluate/reshape.cpp
diff --git a/flang/unittests/Optimizer/CMakeLists.txt b/flang/unittests/Optimizer/CMakeLists.txt
index 34b45d0e77822cd..9c165d998e2e11a 100644
--- a/flang/unittests/Optimizer/CMakeLists.txt
+++ b/flang/unittests/Optimizer/CMakeLists.txt
@@ -19,6 +19,16 @@ add_flang_unittest(FlangOptimizerTests
Builder/DoLoopHelperTest.cpp
Builder/FIRBuilderTest.cpp
Builder/HLFIRToolsTest.cpp
+ Builder/Runtime/AllocatableTest.cpp
+ Builder/Runtime/AssignTest.cpp
+ Builder/Runtime/CommandTest.cpp
+ Builder/Runtime/CharacterTest.cpp
+ Builder/Runtime/DerivedTest.cpp
+ Builder/Runtime/NumericTest.cpp
+ Builder/Runtime/RaggedTest.cpp
+ Builder/Runtime/ReductionTest.cpp
+ Builder/Runtime/StopTest.cpp
+ Builder/Runtime/TransformationalTest.cpp
FIRContextTest.cpp
FIRTypesTest.cpp
FortranVariableTest.cpp
diff --git a/flang-rt/unittests/FortranRuntime/Allocatable.cpp b/flang/unittests/Runtime/Allocatable.cpp
similarity index 100%
rename from flang-rt/unittests/FortranRuntime/Allocatable.cpp
rename to flang/unittests/Runtime/Allocatable.cpp
diff --git a/flang-rt/unittests/FortranRuntime/ArrayConstructor.cpp b/flang/unittests/Runtime/ArrayConstructor.cpp
similarity index 100%
rename from flang-rt/unittests/FortranRuntime/ArrayConstructor.cpp
rename to flang/unittests/Runtime/ArrayConstructor.cpp
diff --git a/flang-rt/unittests/FortranRuntime/BufferTest.cpp b/flang/unittests/Runtime/BufferTest.cpp
similarity index 82%
rename from flang-rt/unittests/FortranRuntime/BufferTest.cpp
rename to flang/unittests/Runtime/BufferTest.cpp
index ce905b254a27e80..0632324b25d22ea 100644
--- a/flang-rt/unittests/FortranRuntime/BufferTest.cpp
+++ b/flang/unittests/Runtime/BufferTest.cpp
@@ -6,7 +6,7 @@
//
//===----------------------------------------------------------------------===//
-#include "flang/../../runtime/buffer.h"
+#include "../../runtime/buffer.h"
#include "CrashHandlerFixture.h"
#include "gtest/gtest.h"
#include <algorithm>
@@ -30,16 +30,15 @@ class Store : public FileFrame<Store, tinyBufferSize> {
void set_expect(FileOffset to) { expect_ = to; }
std::size_t Read(FileOffset at, char *to, std::size_t minBytes,
- std::size_t maxBytes, IoErrorHandler &handler) {
+ std::size_t maxBytes, IoErrorHandler &handler) {
if (enforceSequence_ && at != expect_) {
handler.SignalError("Read(%d,%d,%d) not at expected %d",
- static_cast<int>(at), static_cast<int>(minBytes),
- static_cast<int>(maxBytes),
- static_cast<int>(expect_));
+ static_cast<int>(at), static_cast<int>(minBytes),
+ static_cast<int>(maxBytes), static_cast<int>(expect_));
} else if (at < 0 || at + minBytes > bytes_) {
handler.SignalError("Read(%d,%d,%d) is out of bounds",
- static_cast<int>(at), static_cast<int>(minBytes),
- static_cast<int>(maxBytes));
+ static_cast<int>(at), static_cast<int>(minBytes),
+ static_cast<int>(maxBytes));
}
auto result{std::min<std::size_t>(maxBytes, bytes_ - at)};
std::memcpy(to, &data_[at], result);
@@ -47,14 +46,14 @@ class Store : public FileFrame<Store, tinyBufferSize> {
return result;
}
std::size_t Write(FileOffset at, const char *from, std::size_t bytes,
- IoErrorHandler &handler) {
+ IoErrorHandler &handler) {
if (enforceSequence_ && at != expect_) {
handler.SignalError("Write(%d,%d) not at expected %d",
- static_cast<int>(at), static_cast<int>(bytes),
- static_cast<int>(expect_));
+ static_cast<int>(at), static_cast<int>(bytes),
+ static_cast<int>(expect_));
} else if (at < 0 || at + bytes > bytes_) {
handler.SignalError("Write(%d,%d) is out of bounds", static_cast<int>(at),
- static_cast<int>(bytes));
+ static_cast<int>(bytes));
}
std::memcpy(&data_[at], from, bytes);
expect_ = at + bytes;
@@ -71,8 +70,8 @@ class Store : public FileFrame<Store, tinyBufferSize> {
inline int ChunkSize(int j, int most) {
// 31, 1, 29, 3, 27, ...
j %= tinyBufferSize;
- auto chunk{static_cast<int>(((j % 2) ? j : (tinyBufferSize - 1 - j)) %
- tinyBufferSize)};
+ auto chunk{static_cast<int>(
+ ((j % 2) ? j : (tinyBufferSize - 1 - j)) % tinyBufferSize)};
return std::min(chunk, most);
}
diff --git a/flang-rt/unittests/FortranRuntime/CMakeLists.txt b/flang/unittests/Runtime/CMakeLists.txt
similarity index 84%
rename from flang-rt/unittests/FortranRuntime/CMakeLists.txt
rename to flang/unittests/Runtime/CMakeLists.txt
index 3b03315794fcc27..23f02aa751246b0 100644
--- a/flang-rt/unittests/FortranRuntime/CMakeLists.txt
+++ b/flang/unittests/Runtime/CMakeLists.txt
@@ -1,4 +1,4 @@
-add_flang_rt_unittest(FortranRuntimeTests
+add_flang_unittest(FlangRuntimeTests
Allocatable.cpp
ArrayConstructor.cpp
BufferTest.cpp
@@ -29,7 +29,7 @@ add_flang_rt_unittest(FortranRuntimeTests
Transformational.cpp
)
-target_link_libraries(FortranRuntimeTests
+target_link_libraries(FlangRuntimeTests
PRIVATE
- flang-rt
+ FortranRuntime
)
diff --git a/flang-rt/unittests/FortranRuntime/CharacterTest.cpp b/flang/unittests/Runtime/CharacterTest.cpp
similarity index 100%
rename from flang-rt/unittests/FortranRuntime/CharacterTest.cpp
rename to flang/unittests/Runtime/CharacterTest.cpp
diff --git a/flang-rt/unittests/FortranRuntime/CommandTest.cpp b/flang/unittests/Runtime/CommandTest.cpp
similarity index 100%
rename from flang-rt/unittests/FortranRuntime/CommandTest.cpp
rename to flang/unittests/Runtime/CommandTest.cpp
diff --git a/flang-rt/unittests/FortranRuntime/Complex.cpp b/flang/unittests/Runtime/Complex.cpp
similarity index 100%
rename from flang-rt/unittests/FortranRuntime/Complex.cpp
rename to flang/unittests/Runtime/Complex.cpp
diff --git a/flang-rt/unittests/FortranRuntime/CrashHandlerFixture.cpp b/flang/unittests/Runtime/CrashHandlerFixture.cpp
similarity index 86%
rename from flang-rt/unittests/FortranRuntime/CrashHandlerFixture.cpp
rename to flang/unittests/Runtime/CrashHandlerFixture.cpp
index 1ce8bf826cf27ff..811603337e6608c 100644
--- a/flang-rt/unittests/FortranRuntime/CrashHandlerFixture.cpp
+++ b/flang/unittests/Runtime/CrashHandlerFixture.cpp
@@ -6,13 +6,13 @@
//
//===----------------------------------------------------------------------===//
#include "CrashHandlerFixture.h"
-#include "flang/../../runtime/terminator.h"
+#include "../../runtime/terminator.h"
#include <cstdarg>
#include <cstdlib>
// Replaces Fortran runtime's crash handler so we can verify the crash message
-[[noreturn]] static void CatchCrash(const char *sourceFile, int sourceLine,
- const char *message, va_list &ap) {
+[[noreturn]] static void CatchCrash(
+ const char *sourceFile, int sourceLine, const char *message, va_list &ap) {
char buffer[1000];
std::vsnprintf(buffer, sizeof buffer, message, ap);
va_end(ap);
diff --git a/flang-rt/unittests/FortranRuntime/CrashHandlerFixture.h b/flang/unittests/Runtime/CrashHandlerFixture.h
similarity index 100%
rename from flang-rt/unittests/FortranRuntime/CrashHandlerFixture.h
rename to flang/unittests/Runtime/CrashHandlerFixture.h
diff --git a/flang-rt/unittests/FortranRuntime/Derived.cpp b/flang/unittests/Runtime/Derived.cpp
similarity index 100%
rename from flang-rt/unittests/FortranRuntime/Derived.cpp
rename to flang/unittests/Runtime/Derived.cpp
diff --git a/flang-rt/unittests/FortranRuntime/ExternalIOTest.cpp b/flang/unittests/Runtime/ExternalIOTest.cpp
similarity index 100%
rename from flang-rt/unittests/FortranRuntime/ExternalIOTest.cpp
rename to flang/unittests/Runtime/ExternalIOTest.cpp
diff --git a/flang-rt/unittests/FortranRuntime/Format.cpp b/flang/unittests/Runtime/Format.cpp
similarity index 100%
rename from flang-rt/unittests/FortranRuntime/Format.cpp
rename to flang/unittests/Runtime/Format.cpp
diff --git a/flang-rt/unittests/FortranRuntime/Inquiry.cpp b/flang/unittests/Runtime/Inquiry.cpp
similarity index 100%
rename from flang-rt/unittests/FortranRuntime/Inquiry.cpp
rename to flang/unittests/Runtime/Inquiry.cpp
diff --git a/flang-rt/unittests/FortranRuntime/ListInputTest.cpp b/flang/unittests/Runtime/ListInputTest.cpp
similarity index 83%
rename from flang-rt/unittests/FortranRuntime/ListInputTest.cpp
rename to flang/unittests/Runtime/ListInputTest.cpp
index c855ed93ee4b01b..a4eba5283add68e 100644
--- a/flang-rt/unittests/FortranRuntime/ListInputTest.cpp
+++ b/flang/unittests/Runtime/ListInputTest.cpp
@@ -7,7 +7,7 @@
//===----------------------------------------------------------------------===//
#include "CrashHandlerFixture.h"
-#include "flang/../../runtime/io-error.h"
+#include "../../runtime/io-error.h"
#include "flang/Runtime/descriptor.h"
#include "flang/Runtime/io-api.h"
@@ -36,15 +36,15 @@ TEST(InputTest, TestListInputAlphabet) {
// Use _two_ input buffers and _three_ output buffers. Note the `3*` in the
// _inputBuffers_.
SetCharacter(inputBuffers[j++], maxInputBufferLength,
- "3*'abcdefghijklmnopqrstuvwxyzABC");
- SetCharacter(inputBuffers[j++], maxInputBufferLength,
- "DEFGHIJKLMNOPQRSTUVWXYZ'");
+ "3*'abcdefghijklmnopqrstuvwxyzABC");
+ SetCharacter(
+ inputBuffers[j++], maxInputBufferLength, "DEFGHIJKLMNOPQRSTUVWXYZ'");
StaticDescriptor<1> staticDescriptor;
Descriptor &whole{staticDescriptor.descriptor()};
SubscriptValue extent[]{numInputBuffers};
whole.Establish(TypeCode{CFI_type_char}, maxInputBufferLength, &inputBuffers,
- 1, extent, CFI_attribute_pointer);
+ 1, extent, CFI_attribute_pointer);
whole.Check();
auto *cookie{IONAME(BeginInternalArrayListInput)(whole)};
@@ -79,7 +79,7 @@ TEST(InputTest, TestListInputIntegerList) {
Descriptor &whole{staticDescriptor.descriptor()};
SubscriptValue extent[]{numBuffers};
whole.Establish(TypeCode{CFI_type_char}, maxBufferLength, &buffer, 1, extent,
- CFI_attribute_pointer);
+ CFI_attribute_pointer);
whole.Check();
auto *cookie{IONAME(BeginInternalArrayListInput)(whole)};
@@ -88,10 +88,10 @@ TEST(InputTest, TestListInputIntegerList) {
// Negative numbers will be overwritten by _expectedOutput_, and positive
// numbers will not be as their indices are "Null values" of the Fortran 2018
// standard 13.10.3.2 in the format strings _buffer_
- std::int64_t actualOutput[listInputLength]{-1, -2, -3, -4, 5,
- -6, 7, -8, 9, 10};
- const std::int64_t expectedOutput[listInputLength]{1, 2, 3, 3, 5,
- 6, 7, 8, 9, 10};
+ std::int64_t actualOutput[listInputLength]{
+ -1, -2, -3, -4, 5, -6, 7, -8, 9, 10};
+ const std::int64_t expectedOutput[listInputLength]{
+ 1, 2, 3, 3, 5, 6, 7, 8, 9, 10};
for (j = 0; j < listInputLength; ++j) {
IONAME(InputInteger)(cookie, actualOutput[j]);
}
@@ -116,7 +116,7 @@ TEST(InputTest, TestListInputInvalidFormatWithSingleSuccess) {
Descriptor &whole{staticDescriptor.descriptor()};
SubscriptValue extent[]{numBuffers};
whole.Establish(TypeCode{CFI_type_char}, formatBuffer.size(),
- formatBuffer.data(), 1, extent, CFI_attribute_pointer);
+ formatBuffer.data(), 1, extent, CFI_attribute_pointer);
whole.Check();
auto *cookie{IONAME(BeginInternalArrayListInput)(whole)};
@@ -127,7 +127,7 @@ TEST(InputTest, TestListInputInvalidFormatWithSingleSuccess) {
// Perform failing InputInteger
ASSERT_DEATH(IONAME(InputInteger)(cookie, dummy),
- "Bad character 'g' in INTEGER input field");
+ "Bad character 'g' in INTEGER input field");
}
// Same test as _TestListInputInvalidFormatWithSingleSuccess_, however no
@@ -140,7 +140,7 @@ TEST(InputTest, TestListInputInvalidFormat) {
Descriptor &whole{staticDescriptor.descriptor()};
SubscriptValue extent[]{numBuffers};
whole.Establish(TypeCode{CFI_type_char}, formatBuffer.size(),
- formatBuffer.data(), 1, extent, CFI_attribute_pointer);
+ formatBuffer.data(), 1, extent, CFI_attribute_pointer);
whole.Check();
auto *cookie{IONAME(BeginInternalArrayListInput)(whole)};
@@ -148,7 +148,7 @@ TEST(InputTest, TestListInputInvalidFormat) {
// Perform failing InputInteger
ASSERT_DEATH(IONAME(InputInteger)(cookie, dummy),
- "Bad character 'g' in INTEGER input field");
+ "Bad character 'g' in INTEGER input field");
}
using ParamTy = std::tuple<std::string, std::vector<int>>;
@@ -163,7 +163,7 @@ TEST_P(SimpleListInputTest, TestListInput) {
Descriptor &whole{staticDescriptor.descriptor()};
SubscriptValue extent[]{numBuffers};
whole.Establish(TypeCode{CFI_type_char}, formatBuffer.size(),
- formatBuffer.data(), 1, extent, CFI_attribute_pointer);
+ formatBuffer.data(), 1, extent, CFI_attribute_pointer);
whole.Check();
auto *cookie{IONAME(BeginInternalArrayListInput)(whole)};
@@ -185,10 +185,9 @@ TEST_P(SimpleListInputTest, TestListInput) {
}
}
-INSTANTIATE_TEST_SUITE_P(
- SimpleListInputTestInstantiation, SimpleListInputTest,
+INSTANTIATE_TEST_SUITE_P(SimpleListInputTestInstantiation, SimpleListInputTest,
testing::Values(std::make_tuple("", std::vector<int>{}),
- std::make_tuple("0", std::vector<int>{}),
- std::make_tuple("1", std::vector<int>{1}),
- std::make_tuple("1, 2", std::vector<int>{1, 2}),
- std::make_tuple("3*2", std::vector<int>{2, 2, 2})));
+ std::make_tuple("0", std::vector<int>{}),
+ std::make_tuple("1", std::vector<int>{1}),
+ std::make_tuple("1, 2", std::vector<int>{1, 2}),
+ std::make_tuple("3*2", std::vector<int>{2, 2, 2})));
diff --git a/flang-rt/unittests/FortranRuntime/LogicalFormatTest.cpp b/flang/unittests/Runtime/LogicalFormatTest.cpp
similarity index 100%
rename from flang-rt/unittests/FortranRuntime/LogicalFormatTest.cpp
rename to flang/unittests/Runtime/LogicalFormatTest.cpp
diff --git a/flang-rt/unittests/FortranRuntime/Matmul.cpp b/flang/unittests/Runtime/Matmul.cpp
similarity index 100%
rename from flang-rt/unittests/FortranRuntime/Matmul.cpp
rename to flang/unittests/Runtime/Matmul.cpp
diff --git a/flang-rt/unittests/FortranRuntime/MatmulTranspose.cpp b/flang/unittests/Runtime/MatmulTranspose.cpp
similarity index 100%
rename from flang-rt/unittests/FortranRuntime/MatmulTranspose.cpp
rename to flang/unittests/Runtime/MatmulTranspose.cpp
diff --git a/flang-rt/unittests/FortranRuntime/MiscIntrinsic.cpp b/flang/unittests/Runtime/MiscIntrinsic.cpp
similarity index 100%
rename from flang-rt/unittests/FortranRuntime/MiscIntrinsic.cpp
rename to flang/unittests/Runtime/MiscIntrinsic.cpp
diff --git a/flang-rt/unittests/FortranRuntime/Namelist.cpp b/flang/unittests/Runtime/Namelist.cpp
similarity index 73%
rename from flang-rt/unittests/FortranRuntime/Namelist.cpp
rename to flang/unittests/Runtime/Namelist.cpp
index 2e3c5c2919297f1..5911d67f0d5fc44 100644
--- a/flang-rt/unittests/FortranRuntime/Namelist.cpp
+++ b/flang/unittests/Runtime/Namelist.cpp
@@ -6,11 +6,11 @@
//
//===----------------------------------------------------------------------===//
-#include "flang/../../runtime/namelist.h"
+#include "../../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>
@@ -27,7 +27,7 @@ struct NamelistTests : CrashHandlerFixture {};
static void ClearDescriptorStorage(const Descriptor &descriptor) {
std::memset(descriptor.raw().base_addr, 0,
- descriptor.Elements() * descriptor.ElementBytes());
+ descriptor.Elements() * descriptor.ElementBytes());
}
TEST(NamelistTests, BasicSanity) {
@@ -38,20 +38,17 @@ TEST(NamelistTests, BasicSanity) {
Descriptor &internalDesc{statDescs[0].descriptor()};
SubscriptValue extent[]{numLines};
internalDesc.Establish(TypeCode{CFI_type_char}, /*elementBytes=*/lineLength,
- &buffer, 1, extent, CFI_attribute_pointer);
+ &buffer, 1, extent, CFI_attribute_pointer);
// Set up data arrays
std::vector<int> ints;
for (int j{0}; j < 20; ++j) {
ints.push_back(j % 2 == 0 ? (1 << j) : -(1 << j));
}
- std::vector<double> reals{0.0,
- -0.0,
- std::numeric_limits<double>::infinity(),
- -std::numeric_limits<double>::infinity(),
- std::numeric_limits<double>::quiet_NaN(),
- std::numeric_limits<double>::max(),
- std::numeric_limits<double>::lowest(),
- std::numeric_limits<double>::epsilon()};
+ std::vector<double> reals{0.0, -0.0, std::numeric_limits<double>::infinity(),
+ -std::numeric_limits<double>::infinity(),
+ std::numeric_limits<double>::quiet_NaN(),
+ std::numeric_limits<double>::max(), std::numeric_limits<double>::lowest(),
+ std::numeric_limits<double>::epsilon()};
std::vector<std::uint8_t> logicals;
logicals.push_back(false);
logicals.push_back(true);
@@ -79,14 +76,12 @@ TEST(NamelistTests, BasicSanity) {
// Create a NAMELIST group
static constexpr int items{5};
const NamelistGroup::Item itemArray[items]{{"ints", *intDesc},
- {"reals", *realDesc},
- {"logicals", *logicalDesc},
- {"complexes", *complexDesc},
- {"characters", *characterDesc}};
+ {"reals", *realDesc}, {"logicals", *logicalDesc},
+ {"complexes", *complexDesc}, {"characters", *characterDesc}};
const NamelistGroup group{"group1", items, itemArray};
// Do an internal NAMELIST write and check results
- auto outCookie1{IONAME(BeginInternalArrayListOutput)(internalDesc, nullptr, 0,
- __FILE__, __LINE__)};
+ auto outCookie1{IONAME(BeginInternalArrayListOutput)(
+ internalDesc, nullptr, 0, __FILE__, __LINE__)};
ASSERT_TRUE(IONAME(SetDelim)(outCookie1, "APOSTROPHE", 10));
ASSERT_TRUE(IONAME(OutputNamelist)(outCookie1, group));
auto outStatus1{IONAME(EndIoStatement)(outCookie1)};
@@ -114,14 +109,14 @@ TEST(NamelistTests, BasicSanity) {
ClearDescriptorStorage(*logicalDesc);
ClearDescriptorStorage(*complexDesc);
ClearDescriptorStorage(*characterDesc);
- auto inCookie{IONAME(BeginInternalArrayListInput)(internalDesc, nullptr, 0,
- __FILE__, __LINE__)};
+ auto inCookie{IONAME(BeginInternalArrayListInput)(
+ internalDesc, nullptr, 0, __FILE__, __LINE__)};
ASSERT_TRUE(IONAME(InputNamelist)(inCookie, group));
auto inStatus{IONAME(EndIoStatement)(inCookie)};
ASSERT_EQ(inStatus, 0) << "Failed namelist input sanity, status "
<< static_cast<int>(inStatus);
- auto outCookie2{IONAME(BeginInternalArrayListOutput)(internalDesc, nullptr, 0,
- __FILE__, __LINE__)};
+ auto outCookie2{IONAME(BeginInternalArrayListOutput)(
+ internalDesc, nullptr, 0, __FILE__, __LINE__)};
ASSERT_TRUE(IONAME(SetDelim)(outCookie2, "APOSTROPHE", 10));
ASSERT_TRUE(IONAME(OutputNamelist)(outCookie2, group));
auto outStatus2{IONAME(EndIoStatement)(outCookie2)};
@@ -144,19 +139,18 @@ TEST(NamelistTests, Subscripts) {
StaticDescriptor<1, true> statDesc;
Descriptor &internalDesc{statDesc.descriptor()};
internalDesc.Establish(TypeCode{CFI_type_char},
- /*elementBytes=*/std::strlen(t1), t1, 0, nullptr,
- CFI_attribute_pointer);
- auto inCookie{IONAME(BeginInternalArrayListInput)(internalDesc, nullptr, 0,
- __FILE__, __LINE__)};
+ /*elementBytes=*/std::strlen(t1), t1, 0, nullptr, CFI_attribute_pointer);
+ auto inCookie{IONAME(BeginInternalArrayListInput)(
+ internalDesc, nullptr, 0, __FILE__, __LINE__)};
ASSERT_TRUE(IONAME(InputNamelist)(inCookie, group));
auto inStatus{IONAME(EndIoStatement)(inCookie)};
ASSERT_EQ(inStatus, 0) << "Failed namelist input subscripts, status "
<< static_cast<int>(inStatus);
char out[40];
internalDesc.Establish(TypeCode{CFI_type_char}, /*elementBytes=*/sizeof out,
- out, 0, nullptr, CFI_attribute_pointer);
- auto outCookie{IONAME(BeginInternalArrayListOutput)(internalDesc, nullptr, 0,
- __FILE__, __LINE__)};
+ out, 0, nullptr, CFI_attribute_pointer);
+ auto outCookie{IONAME(BeginInternalArrayListOutput)(
+ internalDesc, nullptr, 0, __FILE__, __LINE__)};
ASSERT_TRUE(IONAME(OutputNamelist)(outCookie, group));
auto outStatus{IONAME(EndIoStatement)(outCookie)};
ASSERT_EQ(outStatus, 0)
@@ -183,8 +177,8 @@ TEST(NamelistTests, ShortArrayInput) {
Descriptor &internalDesc{statDesc.descriptor()};
SubscriptValue shape{2};
internalDesc.Establish(1, 12, t1, 1, &shape, CFI_attribute_pointer);
- auto inCookie{IONAME(BeginInternalArrayListInput)(internalDesc, nullptr, 0,
- __FILE__, __LINE__)};
+ auto inCookie{IONAME(BeginInternalArrayListInput)(
+ internalDesc, nullptr, 0, __FILE__, __LINE__)};
ASSERT_TRUE(IONAME(InputNamelist)(inCookie, group));
auto inStatus{IONAME(EndIoStatement)(inCookie)};
ASSERT_EQ(inStatus, 0) << "Failed namelist input subscripts, status "
@@ -204,18 +198,17 @@ TEST(NamelistTests, ScalarSubstring) {
StaticDescriptor<1, true> statDesc;
Descriptor &internalDesc{statDesc.descriptor()};
internalDesc.Establish(TypeCode{CFI_type_char},
- /*elementBytes=*/std::strlen(t1), t1, 0, nullptr,
- CFI_attribute_pointer);
- auto inCookie{IONAME(BeginInternalArrayListInput)(internalDesc, nullptr, 0,
- __FILE__, __LINE__)};
+ /*elementBytes=*/std::strlen(t1), t1, 0, nullptr, CFI_attribute_pointer);
+ auto inCookie{IONAME(BeginInternalArrayListInput)(
+ internalDesc, nullptr, 0, __FILE__, __LINE__)};
ASSERT_TRUE(IONAME(InputNamelist)(inCookie, group));
ASSERT_EQ(IONAME(EndIoStatement)(inCookie), IostatOk)
<< "namelist scalar substring input";
char out[32];
internalDesc.Establish(TypeCode{CFI_type_char}, /*elementBytes=*/sizeof out,
- out, 0, nullptr, CFI_attribute_pointer);
- auto outCookie{IONAME(BeginInternalArrayListOutput)(internalDesc, nullptr, 0,
- __FILE__, __LINE__)};
+ out, 0, nullptr, CFI_attribute_pointer);
+ auto outCookie{IONAME(BeginInternalArrayListOutput)(
+ internalDesc, nullptr, 0, __FILE__, __LINE__)};
ASSERT_TRUE(IONAME(SetDelim)(outCookie, "apostrophe", 10));
ASSERT_TRUE(IONAME(OutputNamelist)(outCookie, group));
ASSERT_EQ(IONAME(EndIoStatement)(outCookie), IostatOk) << "namelist output";
@@ -225,27 +218,26 @@ TEST(NamelistTests, ScalarSubstring) {
}
TEST(NamelistTests, ArraySubstring) {
- OwningPtr<Descriptor> scDesc{MakeArray<TypeCategory::Character, 1>(
- std::vector<int>{2}, std::vector<std::string>{"abcdefgh", "ijklmnop"},
- 8)};
+ OwningPtr<Descriptor> scDesc{
+ MakeArray<TypeCategory::Character, 1>(std::vector<int>{2},
+ std::vector<std::string>{"abcdefgh", "ijklmnop"}, 8)};
const NamelistGroup::Item items[]{{"a", *scDesc}};
const NamelistGroup group{"justa", 1, items};
static char t1[]{"&justa A(:)(2:+5)='BCDE' 'JKLM'/"};
StaticDescriptor<1, true> statDesc;
Descriptor &internalDesc{statDesc.descriptor()};
internalDesc.Establish(TypeCode{CFI_type_char},
- /*elementBytes=*/std::strlen(t1), t1, 0, nullptr,
- CFI_attribute_pointer);
- auto inCookie{IONAME(BeginInternalArrayListInput)(internalDesc, nullptr, 0,
- __FILE__, __LINE__)};
+ /*elementBytes=*/std::strlen(t1), t1, 0, nullptr, CFI_attribute_pointer);
+ auto inCookie{IONAME(BeginInternalArrayListInput)(
+ internalDesc, nullptr, 0, __FILE__, __LINE__)};
ASSERT_TRUE(IONAME(InputNamelist)(inCookie, group));
ASSERT_EQ(IONAME(EndIoStatement)(inCookie), IostatOk)
<< "namelist scalar substring input";
char out[40];
internalDesc.Establish(TypeCode{CFI_type_char}, /*elementBytes=*/sizeof out,
- out, 0, nullptr, CFI_attribute_pointer);
- auto outCookie{IONAME(BeginInternalArrayListOutput)(internalDesc, nullptr, 0,
- __FILE__, __LINE__)};
+ out, 0, nullptr, CFI_attribute_pointer);
+ auto outCookie{IONAME(BeginInternalArrayListOutput)(
+ internalDesc, nullptr, 0, __FILE__, __LINE__)};
ASSERT_TRUE(IONAME(SetDelim)(outCookie, "apostrophe", 10));
ASSERT_TRUE(IONAME(OutputNamelist)(outCookie, group));
ASSERT_EQ(IONAME(EndIoStatement)(outCookie), IostatOk) << "namelist output";
@@ -264,18 +256,17 @@ TEST(NamelistTests, Skip) {
StaticDescriptor<1, true> statDesc;
Descriptor &internalDesc{statDesc.descriptor()};
internalDesc.Establish(TypeCode{CFI_type_char},
- /*elementBytes=*/std::strlen(t1), t1, 0, nullptr,
- CFI_attribute_pointer);
- auto inCookie{IONAME(BeginInternalArrayListInput)(internalDesc, nullptr, 0,
- __FILE__, __LINE__)};
+ /*elementBytes=*/std::strlen(t1), t1, 0, nullptr, CFI_attribute_pointer);
+ auto inCookie{IONAME(BeginInternalArrayListInput)(
+ internalDesc, nullptr, 0, __FILE__, __LINE__)};
ASSERT_TRUE(IONAME(InputNamelist)(inCookie, group));
ASSERT_EQ(IONAME(EndIoStatement)(inCookie), IostatOk)
<< "namelist input with skipping";
char out[20];
internalDesc.Establish(TypeCode{CFI_type_char}, /*elementBytes=*/sizeof out,
- out, 0, nullptr, CFI_attribute_pointer);
- auto outCookie{IONAME(BeginInternalArrayListOutput)(internalDesc, nullptr, 0,
- __FILE__, __LINE__)};
+ out, 0, nullptr, CFI_attribute_pointer);
+ auto outCookie{IONAME(BeginInternalArrayListOutput)(
+ internalDesc, nullptr, 0, __FILE__, __LINE__)};
ASSERT_TRUE(IONAME(OutputNamelist)(outCookie, group));
ASSERT_EQ(IONAME(EndIoStatement)(outCookie), IostatOk) << "namelist output";
std::string got{out, sizeof out};
@@ -294,19 +285,18 @@ TEST(NamelistTests, Comma) {
StaticDescriptor<1, true> statDesc;
Descriptor &internalDesc{statDesc.descriptor()};
internalDesc.Establish(TypeCode{CFI_type_char},
- /*elementBytes=*/std::strlen(t1), t1, 0, nullptr,
- CFI_attribute_pointer);
- auto inCookie{IONAME(BeginInternalArrayListInput)(internalDesc, nullptr, 0,
- __FILE__, __LINE__)};
+ /*elementBytes=*/std::strlen(t1), t1, 0, nullptr, CFI_attribute_pointer);
+ auto inCookie{IONAME(BeginInternalArrayListInput)(
+ internalDesc, nullptr, 0, __FILE__, __LINE__)};
ASSERT_TRUE(IONAME(SetDecimal)(inCookie, "COMMA", 5));
ASSERT_TRUE(IONAME(InputNamelist)(inCookie, group));
ASSERT_EQ(IONAME(EndIoStatement)(inCookie), IostatOk)
<< "namelist input with skipping";
char out[30];
internalDesc.Establish(TypeCode{CFI_type_char}, /*elementBytes=*/sizeof out,
- out, 0, nullptr, CFI_attribute_pointer);
- auto outCookie{IONAME(BeginInternalArrayListOutput)(internalDesc, nullptr, 0,
- __FILE__, __LINE__)};
+ out, 0, nullptr, CFI_attribute_pointer);
+ auto outCookie{IONAME(BeginInternalArrayListOutput)(
+ internalDesc, nullptr, 0, __FILE__, __LINE__)};
ASSERT_TRUE(IONAME(SetDecimal)(outCookie, "COMMA", 5));
ASSERT_TRUE(IONAME(OutputNamelist)(outCookie, group));
ASSERT_EQ(IONAME(EndIoStatement)(outCookie), IostatOk) << "namelist output";
diff --git a/flang-rt/unittests/FortranRuntime/Numeric.cpp b/flang/unittests/Runtime/Numeric.cpp
similarity index 100%
rename from flang-rt/unittests/FortranRuntime/Numeric.cpp
rename to flang/unittests/Runtime/Numeric.cpp
diff --git a/flang-rt/unittests/FortranRuntime/NumericalFormatTest.cpp b/flang/unittests/Runtime/NumericalFormatTest.cpp
similarity index 100%
rename from flang-rt/unittests/FortranRuntime/NumericalFormatTest.cpp
rename to flang/unittests/Runtime/NumericalFormatTest.cpp
diff --git a/flang-rt/unittests/FortranRuntime/Pointer.cpp b/flang/unittests/Runtime/Pointer.cpp
similarity index 100%
rename from flang-rt/unittests/FortranRuntime/Pointer.cpp
rename to flang/unittests/Runtime/Pointer.cpp
diff --git a/flang-rt/unittests/FortranRuntime/Ragged.cpp b/flang/unittests/Runtime/Ragged.cpp
similarity index 100%
rename from flang-rt/unittests/FortranRuntime/Ragged.cpp
rename to flang/unittests/Runtime/Ragged.cpp
diff --git a/flang-rt/unittests/FortranRuntime/Random.cpp b/flang/unittests/Runtime/Random.cpp
similarity index 100%
rename from flang-rt/unittests/FortranRuntime/Random.cpp
rename to flang/unittests/Runtime/Random.cpp
diff --git a/flang-rt/unittests/FortranRuntime/Reduction.cpp b/flang/unittests/Runtime/Reduction.cpp
similarity index 100%
rename from flang-rt/unittests/FortranRuntime/Reduction.cpp
rename to flang/unittests/Runtime/Reduction.cpp
diff --git a/flang-rt/unittests/FortranRuntime/RuntimeCrashTest.cpp b/flang/unittests/Runtime/RuntimeCrashTest.cpp
similarity index 66%
rename from flang-rt/unittests/FortranRuntime/RuntimeCrashTest.cpp
rename to flang/unittests/Runtime/RuntimeCrashTest.cpp
index 580ffe69f244801..34a8ff6d371131f 100644
--- a/flang-rt/unittests/FortranRuntime/RuntimeCrashTest.cpp
+++ b/flang/unittests/Runtime/RuntimeCrashTest.cpp
@@ -11,10 +11,10 @@
//
//===----------------------------------------------------------------------===//
#include "CrashHandlerFixture.h"
-#include "flang/../../runtime/terminator.h"
+#include "tools.h"
+#include "../../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;
@@ -26,7 +26,7 @@ using Fortran::common::TypeCategory;
//------------------------------------------------------------------------------
struct TestTerminator : CrashHandlerFixture {};
-#define TEST_CRASH_HANDLER_MESSAGE \
+#define TEST_CRASH_HANDLER_MESSAGE \
"Intentionally crashing runtime for unit test"
TEST(TestTerminator, CrashTest) {
@@ -39,13 +39,13 @@ TEST(TestTerminator, CrashTest) {
TEST(TestTerminator, CheckFailedLocationTest) {
static Fortran::runtime::Terminator t;
ASSERT_DEATH(t.CheckFailed("predicate", "someFileName", 789),
- "RUNTIME_CHECK\\(predicate\\) failed at someFileName\\(789\\)");
+ "RUNTIME_CHECK\\(predicate\\) failed at someFileName\\(789\\)");
}
TEST(TestTerminator, CheckFailedTest) {
static Fortran::runtime::Terminator t;
ASSERT_DEATH(t.CheckFailed("predicate"),
- "RUNTIME_CHECK\\(predicate\\) failed at \\(null\\)\\(0\\)");
+ "RUNTIME_CHECK\\(predicate\\) failed at \\(null\\)\\(0\\)");
}
//------------------------------------------------------------------------------
@@ -57,10 +57,9 @@ TEST(TestIOCrash, FormatDescriptorWriteMismatchTest) {
static constexpr int bufferSize{4};
static char buffer[bufferSize];
static const char *format{"(A4)"};
- auto *cookie{IONAME(BeginInternalFormattedOutput)(buffer, bufferSize, format,
- std::strlen(format))};
- ASSERT_DEATH(
- IONAME(OutputLogical)(cookie, true),
+ auto *cookie{IONAME(BeginInternalFormattedOutput)(
+ buffer, bufferSize, format, std::strlen(format))};
+ ASSERT_DEATH(IONAME(OutputLogical)(cookie, true),
"Data edit descriptor 'A' may not be used with a LOGICAL data item");
}
@@ -68,10 +67,10 @@ TEST(TestIOCrash, InvalidFormatCharacterTest) {
static constexpr int bufferSize{1};
static char buffer[bufferSize];
static const char *format{"(C1)"};
- auto *cookie{IONAME(BeginInternalFormattedOutput)(buffer, bufferSize, format,
- std::strlen(format))};
+ auto *cookie{IONAME(BeginInternalFormattedOutput)(
+ buffer, bufferSize, format, std::strlen(format))};
ASSERT_DEATH(IONAME(OutputInteger64)(cookie, 0xfeedface),
- "Unknown 'C' edit descriptor in FORMAT");
+ "Unknown 'C' edit descriptor in FORMAT");
}
//------------------------------------------------------------------------------
@@ -84,80 +83,80 @@ TEST(TestIOCrash, OverwriteBufferAsciiTest) {
static constexpr int bufferSize{4};
static char buffer[bufferSize];
static const char *format{"(A4)"};
- auto *cookie{IONAME(BeginInternalFormattedOutput)(buffer, bufferSize, format,
- std::strlen(format))};
+ auto *cookie{IONAME(BeginInternalFormattedOutput)(
+ buffer, bufferSize, format, std::strlen(format))};
IONAME(OutputAscii)(cookie, "four", bufferSize);
ASSERT_DEATH(IONAME(OutputAscii)(cookie, "Too many characters!", 20),
- "Internal write overran available records");
+ "Internal write overran available records");
}
TEST(TestIOCrash, OverwriteBufferCharacterTest) {
static constexpr int bufferSize{1};
static char buffer[bufferSize];
static const char *format{"(A1)"};
- auto *cookie{IONAME(BeginInternalFormattedOutput)(buffer, bufferSize, format,
- std::strlen(format))};
+ auto *cookie{IONAME(BeginInternalFormattedOutput)(
+ buffer, bufferSize, format, std::strlen(format))};
IONAME(OutputCharacter)(cookie, "a", 1);
ASSERT_DEATH(IONAME(OutputCharacter)(cookie, "a", 1),
- "Internal write overran available records");
+ "Internal write overran available records");
}
TEST(TestIOCrash, OverwriteBufferLogicalTest) {
static constexpr int bufferSize{1};
static char buffer[bufferSize];
static const char *format{"(L1)"};
- auto *cookie{IONAME(BeginInternalFormattedOutput)(buffer, bufferSize, format,
- std::strlen(format))};
+ auto *cookie{IONAME(BeginInternalFormattedOutput)(
+ buffer, bufferSize, format, std::strlen(format))};
IONAME(OutputLogical)(cookie, true);
ASSERT_DEATH(IONAME(OutputLogical)(cookie, true),
- "Internal write overran available records");
+ "Internal write overran available records");
}
TEST(TestIOCrash, OverwriteBufferRealTest) {
static constexpr int bufferSize{1};
static char buffer[bufferSize];
static const char *format{"(F1)"};
- auto *cookie{IONAME(BeginInternalFormattedOutput)(buffer, bufferSize, format,
- std::strlen(format))};
+ auto *cookie{IONAME(BeginInternalFormattedOutput)(
+ buffer, bufferSize, format, std::strlen(format))};
IONAME(OutputReal32)(cookie, 1.);
EXPECT_DEATH(IONAME(OutputReal32)(cookie, 1.),
- "Internal write overran available records");
+ "Internal write overran available records");
std::memset(buffer, '\0', bufferSize);
- cookie = IONAME(BeginInternalFormattedOutput)(buffer, bufferSize, format,
- std::strlen(format));
+ cookie = IONAME(BeginInternalFormattedOutput)(
+ buffer, bufferSize, format, std::strlen(format));
IONAME(OutputReal64)(cookie, 1.);
EXPECT_DEATH(IONAME(OutputReal64)(cookie, 1.),
- "Internal write overran available records");
+ "Internal write overran available records");
}
TEST(TestIOCrash, OverwriteBufferComplexTest) {
static constexpr int bufferSize{8};
static char buffer[bufferSize];
static const char *format{"(Z1,Z1)"};
- auto *cookie{IONAME(BeginInternalFormattedOutput)(buffer, bufferSize, format,
- std::strlen(format))};
+ auto *cookie{IONAME(BeginInternalFormattedOutput)(
+ buffer, bufferSize, format, std::strlen(format))};
IONAME(OutputComplex32)(cookie, 1., 1.);
EXPECT_DEATH(IONAME(OutputComplex32)(cookie, 1., 1.),
- "Internal write overran available records");
+ "Internal write overran available records");
std::memset(buffer, '\0', bufferSize);
- cookie = IONAME(BeginInternalFormattedOutput)(buffer, bufferSize, format,
- std::strlen(format));
+ cookie = IONAME(BeginInternalFormattedOutput)(
+ buffer, bufferSize, format, std::strlen(format));
IONAME(OutputComplex64)(cookie, 1., 1.);
EXPECT_DEATH(IONAME(OutputComplex64)(cookie, 1., 1.),
- "Internal write overran available records");
+ "Internal write overran available records");
}
TEST(TestIOCrash, OverwriteBufferIntegerTest) {
static constexpr int bufferSize{1};
static char buffer[bufferSize];
static const char *format{"(I1)"};
- auto *cookie{IONAME(BeginInternalFormattedOutput)(buffer, bufferSize, format,
- std::strlen(format))};
+ auto *cookie{IONAME(BeginInternalFormattedOutput)(
+ buffer, bufferSize, format, std::strlen(format))};
IONAME(OutputInteger64)(cookie, 0xdeadbeef);
ASSERT_DEATH(IONAME(OutputInteger64)(cookie, 0xdeadbeef),
- "Internal write overran available records");
+ "Internal write overran available records");
}
//------------------------------------------------------------------------------
@@ -169,15 +168,13 @@ TEST(TestIntrinsicCrash, ConformityErrors) {
// ARRAY(2,3) and MASK(2,4) should trigger a runtime error.
auto array{MakeArray<TypeCategory::Integer, 4>(
std::vector<int>{2, 3}, std::vector<std::int32_t>{1, 2, 3, 4, 5, 6})};
- auto mask{MakeArray<TypeCategory::Logical, 1>(
- std::vector<int>{2, 4},
- std::vector<std::uint8_t>{false, true, true, false, false, true, true,
- true})};
+ auto mask{MakeArray<TypeCategory::Logical, 1>(std::vector<int>{2, 4},
+ std::vector<std::uint8_t>{
+ false, true, true, false, false, true, true, true})};
StaticDescriptor<1, true> statDesc;
Descriptor &result{statDesc.descriptor()};
- ASSERT_DEATH(
- RTNAME(Pack)(result, *array, *mask, nullptr, __FILE__, __LINE__),
+ ASSERT_DEATH(RTNAME(Pack)(result, *array, *mask, nullptr, __FILE__, __LINE__),
"Incompatible array arguments to PACK: dimension 2 of ARRAY= has extent "
"3 but MASK= has extent 4");
}
diff --git a/flang-rt/unittests/FortranRuntime/Stop.cpp b/flang/unittests/Runtime/Stop.cpp
similarity index 54%
rename from flang-rt/unittests/FortranRuntime/Stop.cpp
rename to flang/unittests/Runtime/Stop.cpp
index 1c5611dd396833c..b13602eaee5ea6b 100644
--- a/flang-rt/unittests/FortranRuntime/Stop.cpp
+++ b/flang/unittests/Runtime/Stop.cpp
@@ -11,7 +11,7 @@
//===----------------------------------------------------------------------===//
#include "flang/Runtime/stop.h"
#include "CrashHandlerFixture.h"
-#include "flang/../../runtime/environment.h"
+#include "../../runtime/environment.h"
#include <cstdlib>
#include <gtest/gtest.h>
@@ -21,69 +21,67 @@ struct TestProgramEnd : CrashHandlerFixture {};
TEST(TestProgramEnd, StopTest) {
EXPECT_EXIT(RTNAME(StopStatement)(), testing::ExitedWithCode(EXIT_SUCCESS),
- "Fortran STOP");
+ "Fortran STOP");
}
TEST(TestProgramEnd, StopTestNoStopMessage) {
putenv(const_cast<char *>("NO_STOP_MESSAGE=1"));
- Fortran::runtime::executionEnvironment.Configure(0, nullptr, nullptr,
- nullptr);
- EXPECT_EXIT(RTNAME(StopStatement)(), testing::ExitedWithCode(EXIT_SUCCESS),
- "");
+ Fortran::runtime::executionEnvironment.Configure(
+ 0, nullptr, nullptr, nullptr);
+ EXPECT_EXIT(
+ RTNAME(StopStatement)(), testing::ExitedWithCode(EXIT_SUCCESS), "");
}
TEST(TestProgramEnd, StopMessageTest) {
static const char *message{"bye bye"};
EXPECT_EXIT(RTNAME(StopStatementText)(message, std::strlen(message),
- /*isErrorStop=*/false, /*quiet=*/false),
- testing::ExitedWithCode(EXIT_SUCCESS), "Fortran STOP: bye bye");
+ /*isErrorStop=*/false, /*quiet=*/false),
+ testing::ExitedWithCode(EXIT_SUCCESS), "Fortran STOP: bye bye");
EXPECT_EXIT(RTNAME(StopStatementText)(message, std::strlen(message),
- /*isErrorStop=*/false, /*quiet=*/true),
- testing::ExitedWithCode(EXIT_SUCCESS), "");
+ /*isErrorStop=*/false, /*quiet=*/true),
+ testing::ExitedWithCode(EXIT_SUCCESS), "");
EXPECT_EXIT(RTNAME(StopStatementText)(message, std::strlen(message),
- /*isErrorStop=*/true, /*quiet=*/false),
- testing::ExitedWithCode(EXIT_FAILURE),
- "Fortran ERROR STOP: bye bye");
+ /*isErrorStop=*/true, /*quiet=*/false),
+ testing::ExitedWithCode(EXIT_FAILURE), "Fortran ERROR STOP: bye bye");
EXPECT_EXIT(RTNAME(StopStatementText)(message, std::strlen(message),
- /*isErrorStop=*/true, /*quiet=*/true),
- testing::ExitedWithCode(EXIT_FAILURE), "");
+ /*isErrorStop=*/true, /*quiet=*/true),
+ testing::ExitedWithCode(EXIT_FAILURE), "");
}
TEST(TestProgramEnd, NoStopMessageTest) {
putenv(const_cast<char *>("NO_STOP_MESSAGE=1"));
- Fortran::runtime::executionEnvironment.Configure(0, nullptr, nullptr,
- nullptr);
+ Fortran::runtime::executionEnvironment.Configure(
+ 0, nullptr, nullptr, nullptr);
static const char *message{"bye bye"};
EXPECT_EXIT(RTNAME(StopStatementText)(message, std::strlen(message),
- /*isErrorStop=*/false, /*quiet=*/false),
- testing::ExitedWithCode(EXIT_SUCCESS), "bye bye");
+ /*isErrorStop=*/false, /*quiet=*/false),
+ testing::ExitedWithCode(EXIT_SUCCESS), "bye bye");
EXPECT_EXIT(RTNAME(StopStatementText)(message, std::strlen(message),
- /*isErrorStop=*/false, /*quiet=*/true),
- testing::ExitedWithCode(EXIT_SUCCESS), "");
+ /*isErrorStop=*/false, /*quiet=*/true),
+ testing::ExitedWithCode(EXIT_SUCCESS), "");
EXPECT_EXIT(RTNAME(StopStatementText)(message, std::strlen(message),
- /*isErrorStop=*/true, /*quiet=*/false),
- testing::ExitedWithCode(EXIT_FAILURE),
- "Fortran ERROR STOP: bye bye");
+ /*isErrorStop=*/true, /*quiet=*/false),
+ testing::ExitedWithCode(EXIT_FAILURE), "Fortran ERROR STOP: bye bye");
EXPECT_EXIT(RTNAME(StopStatementText)(message, std::strlen(message),
- /*isErrorStop=*/true, /*quiet=*/true),
- testing::ExitedWithCode(EXIT_FAILURE), "");
+ /*isErrorStop=*/true, /*quiet=*/true),
+ testing::ExitedWithCode(EXIT_FAILURE), "");
}
TEST(TestProgramEnd, FailImageTest) {
- EXPECT_EXIT(RTNAME(FailImageStatement)(),
- testing::ExitedWithCode(EXIT_FAILURE), "");
+ EXPECT_EXIT(
+ RTNAME(FailImageStatement)(), testing::ExitedWithCode(EXIT_FAILURE), "");
}
TEST(TestProgramEnd, ExitTest) {
EXPECT_EXIT(RTNAME(Exit)(), testing::ExitedWithCode(EXIT_SUCCESS), "");
- EXPECT_EXIT(RTNAME(Exit)(EXIT_FAILURE), testing::ExitedWithCode(EXIT_FAILURE),
- "");
+ EXPECT_EXIT(
+ RTNAME(Exit)(EXIT_FAILURE), testing::ExitedWithCode(EXIT_FAILURE), "");
}
TEST(TestProgramEnd, AbortTest) { EXPECT_DEATH(RTNAME(Abort)(), ""); }
@@ -93,8 +91,8 @@ TEST(TestProgramEnd, CrashTest) {
static const std::string fileName{"file name"};
static const std::string headMessage{"fatal Fortran runtime error\\("};
static const std::string tailMessage{":343\\): "};
- static const std::string fullMessage{headMessage + fileName + tailMessage +
- crashMessage};
+ static const std::string fullMessage{
+ headMessage + fileName + tailMessage + crashMessage};
EXPECT_DEATH(
RTNAME(ReportFatalUserError)(crashMessage.c_str(), fileName.c_str(), 343),
fullMessage.c_str());
diff --git a/flang-rt/unittests/FortranRuntime/TemporaryStack.cpp b/flang/unittests/Runtime/TemporaryStack.cpp
similarity index 100%
rename from flang-rt/unittests/FortranRuntime/TemporaryStack.cpp
rename to flang/unittests/Runtime/TemporaryStack.cpp
diff --git a/flang-rt/unittests/FortranRuntime/Time.cpp b/flang/unittests/Runtime/Time.cpp
similarity index 100%
rename from flang-rt/unittests/FortranRuntime/Time.cpp
rename to flang/unittests/Runtime/Time.cpp
diff --git a/flang-rt/unittests/FortranRuntime/Transformational.cpp b/flang/unittests/Runtime/Transformational.cpp
similarity index 100%
rename from flang-rt/unittests/FortranRuntime/Transformational.cpp
rename to flang/unittests/Runtime/Transformational.cpp
diff --git a/flang-rt/unittests/FortranRuntime/tools.h b/flang/unittests/Runtime/tools.h
similarity index 100%
rename from flang-rt/unittests/FortranRuntime/tools.h
rename to flang/unittests/Runtime/tools.h
diff --git a/lld/COFF/MinGW.cpp b/lld/COFF/MinGW.cpp
index 2eae92906db95b5..53e146bb8600b8f 100644
--- a/lld/COFF/MinGW.cpp
+++ b/lld/COFF/MinGW.cpp
@@ -50,7 +50,8 @@ AutoExporter::AutoExporter(
"libc++",
"libc++abi",
"libFortran_main",
- "libflang-rt",
+ "libFortranRuntime",
+ "libFortranDecimal",
"libunwind",
"libmsvcrt",
"libucrtbase",
diff --git a/llvm/CMakeLists.txt b/llvm/CMakeLists.txt
index 6b10af40d202f72..103c08ffbe83b38 100644
--- a/llvm/CMakeLists.txt
+++ b/llvm/CMakeLists.txt
@@ -156,10 +156,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")
-if ("flang" IN_LIST LLVM_ENABLE_PROJECTS)
- set(LLVM_DEFAULT_RUNTIMES "libcxx;libcxxabi;libunwind;flang-rt")
-endif()
-set(LLVM_SUPPORTED_RUNTIMES "libc;libunwind;libcxxabi;pstl;libcxx;compiler-rt;openmp;llvm-libgcc;flang-rt")
+set(LLVM_SUPPORTED_RUNTIMES "libc;libunwind;libcxxabi;pstl;libcxx;compiler-rt;openmp;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}.")
if(LLVM_ENABLE_RUNTIMES STREQUAL "all")
@@ -181,11 +178,6 @@ if ("libc" IN_LIST LLVM_ENABLE_RUNTIMES)
endif()
endif()
-if ("flang" IN_LIST LLVM_ENABLE_PROJECTS AND NOT "flang-rt" IN_LIST LLVM_ENABLE_RUNTIMES)
- message(STATUS "Enabling Flang-rt to be built with the Flang project.")
- list(APPEND LLVM_ENABLE_RUNTIMES "flang-rt")
-endif()
-
# LLVM_ENABLE_PROJECTS_USED is `ON` if the user has ever used the
# `LLVM_ENABLE_PROJECTS` CMake cache variable. This exists for
# several reasons:
diff --git a/llvm/projects/CMakeLists.txt b/llvm/projects/CMakeLists.txt
index 2f66cd1a4c44b48..08f2fa522420b0e 100644
--- a/llvm/projects/CMakeLists.txt
+++ b/llvm/projects/CMakeLists.txt
@@ -6,7 +6,6 @@ foreach(entry ${entries})
if(IS_DIRECTORY ${entry} AND EXISTS ${entry}/CMakeLists.txt)
if((NOT ${entry} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}/compiler-rt) AND
(NOT ${entry} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}/dragonegg) AND
- (NOT ${entry} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}/flang-rt) AND
(NOT ${entry} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}/libcxx) AND
(NOT ${entry} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}/libcxxabi) AND
(NOT ${entry} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}/libunwind) AND
@@ -38,8 +37,6 @@ if(${LLVM_BUILD_RUNTIME})
if(NOT LLVM_BUILD_EXTERNAL_COMPILER_RT)
add_llvm_external_project(compiler-rt)
endif()
-
- 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 dc568373e48f0ed..7ec6480773c8f05 100644
--- a/llvm/runtimes/CMakeLists.txt
+++ b/llvm/runtimes/CMakeLists.txt
@@ -401,24 +401,17 @@ if(runtimes)
endforeach()
endif()
endif()
- set(EXTRA_CMAKE_ARGS "")
- if("flang-rt" IN_LIST LLVM_ENABLE_RUNTIMES)
- list(APPEND EXTRA_CMAKE_ARGS "-DLLVM_DIR=${LLVM_BINARY_DIR}/lib/cmake/llvm")
- list(APPEND EXTRA_CMAKE_ARGS "-DFLANG_DIR=${LLVM_BINARY_DIR}/lib/cmake/flang")
- list(APPEND EXTRA_CMAKE_ARGS "-DCLANG_DIR=${LLVM_BINARY_DIR}/lib/cmake/clang")
- list(APPEND EXTRA_CMAKE_ARGS "-DMLIR_DIR=${LLVM_BINARY_DIR}/lib/cmake/mlir")
- endif()
if(NOT LLVM_RUNTIME_TARGETS)
runtime_default_target(
DEPENDS ${builtins_dep} ${extra_deps}
- CMAKE_ARGS ${libc_cmake_args} ${EXTRA_CMAKE_ARGS}
+ CMAKE_ARGS ${libc_cmake_args}
PREFIXES ${prefixes})
set(test_targets check-runtimes)
else()
if("default" IN_LIST LLVM_RUNTIME_TARGETS)
runtime_default_target(
DEPENDS ${builtins_dep} ${extra_deps}
- CMAKE_ARGS ${libc_cmake_args} ${EXTRA_CMAKE_ARGS}
+ CMAKE_ARGS ${libc_cmake_args}
PREFIXES ${prefixes})
list(REMOVE_ITEM LLVM_RUNTIME_TARGETS "default")
else()
@@ -458,7 +451,7 @@ if(runtimes)
runtime_register_target(${name}
DEPENDS ${builtins_dep_name} ${libc_tools}
- CMAKE_ARGS -DLLVM_DEFAULT_TARGET_TRIPLE=${name} ${libc_cmake_args} ${EXTRA_CMAKE_ARGS}
+ CMAKE_ARGS -DLLVM_DEFAULT_TARGET_TRIPLE=${name} ${libc_cmake_args}
EXTRA_ARGS TARGET_TRIPLE ${name})
add_dependencies(runtimes runtimes-${name})
@@ -488,7 +481,6 @@ if(runtimes)
CMAKE_ARGS -DLLVM_DEFAULT_TARGET_TRIPLE=${name}
-DLLVM_RUNTIMES_PREFIX=${name}/
-DLLVM_RUNTIMES_LIBDIR_SUBDIR=${multilib}
- ${EXTRA_CMAKE_ARGS}
BASE_NAME ${name}
EXTRA_ARGS TARGET_TRIPLE ${name})
diff --git a/runtimes/CMakeLists.txt b/runtimes/CMakeLists.txt
index c26a5f725d59f50..010ec879e44a322 100644
--- a/runtimes/CMakeLists.txt
+++ b/runtimes/CMakeLists.txt
@@ -19,7 +19,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;flang-rt")
+set(LLVM_DEFAULT_RUNTIMES "libc;libunwind;libcxxabi;pstl;libcxx;compiler-rt;openmp")
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}.")
More information about the flang-commits
mailing list