From: Chung-Lin Tang Date: Thu, 31 May 2018 14:10:10 +0000 (+0000) Subject: re PR middle-end/85879 (ICE in expand_debug_locations, at cfgexpand.c:5405) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=bd1cab35c5eabf51d9392751036fa3a71758d263;p=gcc.git re PR middle-end/85879 (ICE in expand_debug_locations, at cfgexpand.c:5405) Fix PR middle-end/85879 gcc/ * 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. gcc/testsuite/ * gfortran.dg/goacc/pr77371-1.f90: New test. * gfortran.dg/goacc/pr77371-2.f90: New test. * gfortran.dg/goacc/pr85879.f90: New test. Co-Authored-By: Cesar Philippidis From-SVN: r261025 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e696c32d376..c9cf570599c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2018-05-31 Chung-Lin Tang + Cesar Philippidis + + 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 * config/aarch64/aarch64-simd-builtins.def (ld1x3): New. diff --git a/gcc/gimplify.c b/gcc/gimplify.c index 9771804f27e..44cb784620a 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -9275,13 +9275,16 @@ gimplify_adjust_omp_clauses (gimple_seq *pre_p, gimple_seq body, tree *list_p, 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); diff --git a/gcc/omp-low.c b/gcc/omp-low.c index d8588b9faed..ba6c705cf8b 100644 --- a/gcc/omp-low.c +++ b/gcc/omp-low.c @@ -7700,7 +7700,8 @@ lower_omp_target (gimple_stmt_iterator *gsi_p, omp_context *ctx) 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. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a04fff8d188..188ea7d7ed5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2018-05-31 Chung-Lin Tang + Cesar Philippidis + + 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 * gnat.dg/stack_usage1.adb: Replace -fstack-usage with -Wstack-usage. diff --git a/gcc/testsuite/gfortran.dg/goacc/pr77371-1.f90 b/gcc/testsuite/gfortran.dg/goacc/pr77371-1.f90 new file mode 100644 index 00000000000..11c29ba3e6d --- /dev/null +++ b/gcc/testsuite/gfortran.dg/goacc/pr77371-1.f90 @@ -0,0 +1,9 @@ +! PR fortran/77371 +! { dg-do compile } +program p + character(:), allocatable :: z + !$acc parallel + z = 'abc' + !$acc end parallel + print *, z +end diff --git a/gcc/testsuite/gfortran.dg/goacc/pr77371-2.f90 b/gcc/testsuite/gfortran.dg/goacc/pr77371-2.f90 new file mode 100644 index 00000000000..9d42c17ac4e --- /dev/null +++ b/gcc/testsuite/gfortran.dg/goacc/pr77371-2.f90 @@ -0,0 +1,7 @@ +! 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 diff --git a/gcc/testsuite/gfortran.dg/goacc/pr85879.f90 b/gcc/testsuite/gfortran.dg/goacc/pr85879.f90 new file mode 100644 index 00000000000..cd50be2fdb4 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/goacc/pr85879.f90 @@ -0,0 +1,12 @@ +! 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