[Patch] Fortran/OpenMP: Add memory routines existing for C/C++

Jakub Jelinek jakub@redhat.com
Wed Aug 18 09:09:49 GMT 2021


On Wed, Aug 18, 2021 at 11:00:47AM +0200, Tobias Burnus wrote:
> ---------------- Note 2 -----------------------
> 'omp_lib.h' is included in as declaration-construct in the
> specification-part of a file (i.e. possibly after an implicit statement);
> hence, it cannot contain a use-stmt.  Additionally, it needs to support
> both free- and fixed-form source files.
> While thought to be compatible with Fortran 77, nothing actually requires
> that only Fortran 77 code is used and gfortran only supports -std=f95 or
> higher.
> 
> Hence, (rightly!) assuming that only gfortran compiles that file,
> Fortran 90 + 95 features can be used; the code already uses TYPE.
> 
> However, the the attached patch also BIND(C) + IMPORT, which are
> Fortran 2003 features, effectively preventing the compilation with
> -std=f95.
> 
> My impression is that old code (Fortran IV, 66, 77, older 90/95) code
> tends to use vendor extension (preventing the compilation with -std=f*)
> and users do not care about setting -std=f* flags.
> Or the code is old but still maintained. But in that case, new features
> of Fortran 2003 (and later) intentionally and/or accidentally get used,
> already preventing the compilation with -std=f95.
> 
> Thus, I think it is okay to use a Fortran 2003 feature.

Perhaps we could add some new !GCC$ extension that would temporarily
turn off errors about new language features (or temporarily switch language
version), slightly similar to
#pragma GCC push_options
#pragma GCC ...
...
#pragma GCC pop_options
except that in C/C++ one can't change the language version (but on the other
side we have __extension__ and system headers surpressing some diagnostics).

> libgomp/ChangeLog:
> 
> 	* omp_lib.f90.in (omp_alloc, omp_free, omp_target_alloc,
> 	omp_target_free. omp_target_is_present, omp_target_memcpy,
> 	omp_target_memcpy_rect, omp_target_associate_ptr,
> 	omp_target_disassociate_ptr): Add interface.
> 	* omp_lib.h.in (omp_alloc, omp_free, omp_target_alloc,
> 	omp_target_free. omp_target_is_present, omp_target_memcpy,
> 	omp_target_memcpy_rect, omp_target_associate_ptr,
> 	omp_target_disassociate_ptr): Add interface.
> 	* testsuite/libgomp.fortran/alloc-1.F90: Remove local
> 	interface block for omp_alloc + omp_free.
> 	* testsuite/libgomp.fortran/alloc-4.f90: Likewise.
> 	* testsuite/libgomp.fortran/refcount-1.f90: New test.
> 	* testsuite/libgomp.fortran/target-12.f90: New test.
> 
>  libgomp/omp_lib.f90.in                           |  94 +++++++++++++++
>  libgomp/omp_lib.h.in                             |  97 +++++++++++++++
>  libgomp/testsuite/libgomp.fortran/alloc-1.F90    |  16 ---
>  libgomp/testsuite/libgomp.fortran/alloc-4.f90    |  16 ---
>  libgomp/testsuite/libgomp.fortran/refcount-1.f90 |  61 ++++++++++
>  libgomp/testsuite/libgomp.fortran/target-12.f90  | 147 +++++++++++++++++++++++
>  6 files changed, 399 insertions(+), 32 deletions(-)

Ok.

	Jakub



More information about the Gcc-patches mailing list