aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorChung-Lin Tang <cltang@codesourcery.com>2018-05-31 14:10:10 +0000
committerCesar Philippidis <cesar@gcc.gnu.org>2018-05-31 07:10:10 -0700
commitbd1cab35c5eabf51d9392751036fa3a71758d263 (patch)
treeb3173fd010fc1a205b8af74f166a3e091a389ad5 /gcc
parent22f1f4c790759674d47b704e0faa140343e542d5 (diff)
downloadgcc-bd1cab35c5eabf51d9392751036fa3a71758d263.zip
gcc-bd1cab35c5eabf51d9392751036fa3a71758d263.tar.gz
gcc-bd1cab35c5eabf51d9392751036fa3a71758d263.tar.bz2
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 <cesar@codesourcery.com> From-SVN: r261025
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/gimplify.c9
-rw-r--r--gcc/omp-low.c3
-rw-r--r--gcc/testsuite/ChangeLog8
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/pr77371-1.f909
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/pr77371-2.f907
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/pr85879.f9012
7 files changed, 53 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index e696c32..c9cf570 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+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.
diff --git a/gcc/gimplify.c b/gcc/gimplify.c
index 9771804..44cb784 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 d8588b9..ba6c705 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 a04fff8..188ea7d 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,11 @@
+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.
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 0000000..11c29ba
--- /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 0000000..9d42c17
--- /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 0000000..cd50be2
--- /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