+2016-12-21 Jakub Jelinek <jakub@redhat.com>
+
+ PR fortran/78866
+ * openmp.c (resolve_omp_clauses): Diagnose assumed size arrays in
+ OpenMP map, to and from clauses.
+ * trans-openmp.c: Include diagnostic-core.h, temporarily redefining
+ GCC_DIAG_STYLE to __gcc_tdiag__.
+ (gfc_omp_finish_clause): Diagnose implicitly mapped assumed size
+ arrays.
+
2016-12-21 Janne Blomqvist <jb@gcc.gnu.org>
PR fortran/78867
else
resolve_oacc_data_clauses (n->sym, n->where, name);
}
+ else if (list != OMP_CLAUSE_DEPEND
+ && n->sym->as
+ && 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 (list == OMP_LIST_MAP && !openacc)
switch (code->op)
{
#include "gomp-constants.h"
#include "omp-general.h"
#include "omp-low.h"
+#undef GCC_DIAG_STYLE
+#define GCC_DIAG_STYLE __gcc_tdiag__
+#include "diagnostic-core.h"
+#undef GCC_DIAG_STYLE
+#define GCC_DIAG_STYLE __gcc_gfc__
int ompws_flags;
return;
tree decl = OMP_CLAUSE_DECL (c);
+
+ /* Assumed-size arrays can't be mapped implicitly, they have to be
+ mapped explicitly using array sections. */
+ if (TREE_CODE (decl) == PARM_DECL
+ && GFC_ARRAY_TYPE_P (TREE_TYPE (decl))
+ && GFC_TYPE_ARRAY_AKIND (TREE_TYPE (decl)) == GFC_ARRAY_UNKNOWN
+ && GFC_TYPE_ARRAY_UBOUND (TREE_TYPE (decl),
+ GFC_TYPE_ARRAY_RANK (TREE_TYPE (decl)) - 1)
+ == NULL)
+ {
+ error_at (OMP_CLAUSE_LOCATION (c),
+ "implicit mapping of assumed size array %qD", decl);
+ return;
+ }
+
tree c2 = NULL_TREE, c3 = NULL_TREE, c4 = NULL_TREE;
if (POINTER_TYPE_P (TREE_TYPE (decl)))
{
+2016-12-21 Jakub Jelinek <jakub@redhat.com>
+
+ PR fortran/78866
+ * gfortran.dg/gomp/map-1.f90: Add expected error.
+ * gfortran.dg/gomp/pr78866-1.f90: New test.
+ * gfortran.dg/gomp/pr78866-2.f90: New test.
+
2016-12-21 David Edelsohn <dje.gcc@gmail.com>
* gcc.dg/vect/costmodel/ppc/costmodel-bb-slp-9a-pr63175.c: XFAIL
! { dg-error "Rightmost upper bound of assumed size array section not specified" "" { target *-*-* } 68 }
! { dg-error "'aas' in MAP clause at \\\(1\\\) is not a proper array section" "" { target *-*-* } 68 }
- !$omp target map(aas) ! { dg-error "The upper bound in the last dimension must appear" "" { xfail *-*-* } }
+ !$omp target map(aas) ! { dg-error "Assumed size array" }
!$omp end target
!$omp target map(aas(5:7))
--- /dev/null
+! PR fortran/78866
+! { dg-do compile }
+
+subroutine pr78866(x)
+ integer :: x(*)
+!$omp target map(x) ! { dg-error "Assumed size array" }
+ x(1) = 1
+!$omp end target
+!$omp target data map(tofrom: x) ! { dg-error "Assumed size array" }
+!$omp target update to(x) ! { dg-error "Assumed size array" }
+!$omp target update from(x) ! { dg-error "Assumed size array" }
+!$omp end target data
+!$omp target map(x(:23)) ! { dg-bogus "Assumed size array" }
+ x(1) = 1
+!$omp end target
+!$omp target map(x(:)) ! { dg-error "upper bound of assumed size array section" }
+ x(1) = 1 ! { dg-error "not a proper array section" "" { target *-*-* } .-1 }
+!$omp end target
+end
--- /dev/null
+! PR fortran/78866
+! { dg-do compile }
+
+subroutine pr78866(x)
+ integer :: x(*)
+!$omp target ! { dg-error "implicit mapping of assumed size array" }
+ x(1) = 1
+!$omp end target
+end