+2018-05-31 Chung-Lin Tang <cltang@codesourcery.com>
+ Cesar Philippidis <cesar@codesourcery.com>
+
+ PR middle-end/85879
+ * gimplify.c (gimplify_adjust_omp_clauses): Add 'remove = true'
+ when emitting error on private/firstprivate reductions.
+ * omp-low.c (lower_omp_target): Avoid reference-type processing
+ on pointers for firstprivate clause.
+
2018-05-31 Sameera Deshpande <sameera.deshpande@linaro.org>
* config/aarch64/aarch64-simd-builtins.def (ld1x3): New.
case OMP_CLAUSE_REDUCTION:
decl = OMP_CLAUSE_DECL (c);
/* OpenACC reductions need a present_or_copy data clause.
- Add one if necessary. Error is the reduction is private. */
+ Add one if necessary. Emit error when the reduction is private. */
if (ctx->region_type == ORT_ACC_PARALLEL)
{
n = splay_tree_lookup (ctx->variables, (splay_tree_key) decl);
if (n->value & (GOVD_PRIVATE | GOVD_FIRSTPRIVATE))
- error_at (OMP_CLAUSE_LOCATION (c), "invalid private "
- "reduction on %qE", DECL_NAME (decl));
+ {
+ remove = true;
+ error_at (OMP_CLAUSE_LOCATION (c), "invalid private "
+ "reduction on %qE", DECL_NAME (decl));
+ }
else if ((n->value & GOVD_MAP) == 0)
{
tree next = OMP_CLAUSE_CHAIN (c);
if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE)
{
gcc_assert (is_gimple_omp_oacc (ctx->stmt));
- if (omp_is_reference (new_var))
+ if (omp_is_reference (new_var)
+ && TREE_CODE (TREE_TYPE (new_var)) != POINTER_TYPE)
{
/* Create a local object to hold the instance
value. */
+2018-05-31 Chung-Lin Tang <cltang@codesourcery.com>
+ Cesar Philippidis <cesar@codesourcery.com>
+
+ PR middle-end/85879
+ * gfortran.dg/goacc/pr77371-1.f90: New test.
+ * gfortran.dg/goacc/pr77371-2.f90: New test.
+ * gfortran.dg/goacc/pr85879.f90: New test.
+
2018-05-31 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/stack_usage1.adb: Replace -fstack-usage with -Wstack-usage.
--- /dev/null
+! PR fortran/77371
+! { dg-do compile }
+program p
+ character(:), allocatable :: z
+ !$acc parallel
+ z = 'abc'
+ !$acc end parallel
+ print *, z
+end
--- /dev/null
+! PR fortran/77371
+! { dg-do compile }
+program p
+ integer, allocatable :: n
+!$acc parallel reduction (+:n) private(n) ! { dg-error "invalid private reduction" }
+!$acc end parallel
+end
--- /dev/null
+! PR middle-end/85879
+! { dg-do compile }
+
+program p
+ integer, pointer :: i
+ integer, target :: j
+ j = 2
+ i => j
+ !$acc parallel
+ j = i
+ !$acc end parallel
+end