diff --git a/flang/include/flang/Runtime/extensions.h b/flang/include/flang/Runtime/extensions.h new file mode 100644 --- /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 --- a/flang/runtime/CMakeLists.txt +++ b/flang/runtime/CMakeLists.txt @@ -48,6 +48,7 @@ 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 --- /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"