From 627a8ac7903f26117faa782a27d2e87e9d0915c2 Mon Sep 17 00:00:00 2001 From: Peter Klausler Date: Tue, 7 Dec 2021 14:38:17 -0800 Subject: [PATCH] [flang] Add CALL FLUSH(n) legacy extension Prior to the introduction of the FLUSH statement in Fortran 2003, implementations provided a FLUSH subroutine. We can't yet put Fortran code into the runtime, so this subroutine is in C++ with a Fortran-mangled entry point name. Differential Revision: https://reviews.llvm.org/D115289 --- flang/include/flang/Runtime/extensions.h | 23 +++++++++++++++++++++++ flang/runtime/CMakeLists.txt | 1 + flang/runtime/extensions.cpp | 26 ++++++++++++++++++++++++++ 3 files changed, 50 insertions(+) create mode 100644 flang/include/flang/Runtime/extensions.h create mode 100644 flang/runtime/extensions.cpp diff --git a/flang/include/flang/Runtime/extensions.h b/flang/include/flang/Runtime/extensions.h new file mode 100644 index 0000000..c0edfd9 --- /dev/null +++ b/flang/include/flang/Runtime/extensions.h @@ -0,0 +1,23 @@ +//===-- include/flang/Runtime/extensions.h ----------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +// These C-coded entry points with Fortran-mangled names implement legacy +// extensions that will eventually be implemented in Fortran. + +#ifndef FORTRAN_RUNTIME_EXTENSIONS_H_ +#define FORTRAN_RUNTIME_EXTENSIONS_H_ + +#define FORTRAN_SUBROUTINE_NAME(name) name##_ + +extern "C" { + +// CALL FLUSH(n) antedates the Fortran 2003 FLUSH statement. +void FORTRAN_SUBROUTINE_NAME(flush)(const int &unit); + +} // extern "C" +#endif // FORTRAN_RUNTIME_EXTENSIONS_H_ diff --git a/flang/runtime/CMakeLists.txt b/flang/runtime/CMakeLists.txt index 2c0a1b4..e3e9ee9 100644 --- a/flang/runtime/CMakeLists.txt +++ b/flang/runtime/CMakeLists.txt @@ -48,6 +48,7 @@ add_flang_library(FortranRuntime edit-input.cpp edit-output.cpp environment.cpp + extensions.cpp extrema.cpp file.cpp findloc.cpp diff --git a/flang/runtime/extensions.cpp b/flang/runtime/extensions.cpp new file mode 100644 index 0000000..2769c7c --- /dev/null +++ b/flang/runtime/extensions.cpp @@ -0,0 +1,26 @@ +//===-- runtime/extensions.cpp --------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +// These C-coded entry points with Fortran-mangled names implement legacy +// extensions that will eventually be implemented in Fortran. + +#include "flang/Runtime/extensions.h" +#include "flang/Runtime/io-api.h" + +extern "C" { + +// SUBROUTINE FLUSH(N) +// FLUSH N +// END +namespace Fortran::runtime::io { +void FORTRAN_SUBROUTINE_NAME(flush)(const int &unit) { + Cookie cookie{IONAME(BeginFlush)(unit, __FILE__, __LINE__)}; + IONAME(EndIoStatement)(cookie); +} +} // namespace Fortran::runtime::io +} // extern "C" -- 2.7.4