OpenMP/Fortran: Reject allocatable components in map clause
authorTobias Burnus <tobias@codesourcery.com>
Thu, 18 Jun 2020 13:27:30 +0000 (15:27 +0200)
committerTobias Burnus <tobias@codesourcery.com>
Thu, 18 Jun 2020 13:27:30 +0000 (15:27 +0200)
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.

gcc/fortran/openmp.c
gcc/testsuite/gfortran.dg/gomp/map-alloc-comp-1.f90 [new file with mode: 0644]

index 94522d16e6d6bca85ac70876fa98cddc86eb8559..e681903c7c271a6cd70fdbcd43b1588331040edc 100644 (file)
@@ -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 (file)
index 0000000..0c44296
--- /dev/null
@@ -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