[gcc r11-1511] OpenMP/Fortran: Reject allocatable components in map clause

Tobias Burnus burnus@gcc.gnu.org
Thu Jun 18 13:28:16 GMT 2020


https://gcc.gnu.org/g:ac70b20b1007da0d3d02a9cec3c0715145c4b593

commit r11-1511-gac70b20b1007da0d3d02a9cec3c0715145c4b593
Author: Tobias Burnus <tobias@codesourcery.com>
Date:   Thu Jun 18 15:27:30 2020 +0200

    OpenMP/Fortran: Reject allocatable components in map clause
    
    gcc/fortran/ChangeLog:
    
            * openmp.c (resolve_omp_clauses): Reject vars with
            allocatable components in OpenMP map clauses.
    
    gcc/testsuite/ChangeLog:
    
            * gfortran.dg/gomp/map-alloc-comp-1.f90: New test.

Diff:
---
 gcc/fortran/openmp.c                                |  7 +++++++
 gcc/testsuite/gfortran.dg/gomp/map-alloc-comp-1.f90 | 14 ++++++++++++++
 2 files changed, 21 insertions(+)

diff --git a/gcc/fortran/openmp.c b/gcc/fortran/openmp.c
index 94522d16e6d..e681903c7c2 100644
--- a/gcc/fortran/openmp.c
+++ b/gcc/fortran/openmp.c
@@ -4636,6 +4636,13 @@ resolve_omp_clauses (gfc_code *code, gfc_omp_clauses *omp_clauses,
 			 && n->sym->as->type == AS_ASSUMED_SIZE)
 		  gfc_error ("Assumed size array %qs in %s clause at %L",
 			     n->sym->name, name, &n->where);
+		if (!openacc
+		    && list == OMP_LIST_MAP
+		    && n->sym->ts.type == BT_DERIVED
+		    && n->sym->ts.u.derived->attr.alloc_comp)
+		  gfc_error ("List item %qs with allocatable components is not "
+			     "permitted in map clause at %L", n->sym->name,
+			     &n->where);
 		if (list == OMP_LIST_MAP && !openacc)
 		  switch (code->op)
 		    {
diff --git a/gcc/testsuite/gfortran.dg/gomp/map-alloc-comp-1.f90 b/gcc/testsuite/gfortran.dg/gomp/map-alloc-comp-1.f90
new file mode 100644
index 00000000000..0c4429677bd
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/gomp/map-alloc-comp-1.f90
@@ -0,0 +1,14 @@
+!
+! ALLOCATABLE COMPONENTS:
+! - OpenMP 5: Permitted (and automatically recursively mapped)
+!   -> Not yet supported.
+! - OpenMP 4.5: Not permitted.
+!
+implicit none (type, external)
+type sct
+  integer, allocatable :: c
+end type
+type(sct) var
+
+!$omp target enter data map(to:var)  ! { dg-error "allocatable components is not permitted in map clause" }
+end


More information about the Gcc-cvs mailing list