Commit bd1cab35 by Chung-Lin Tang Committed by Cesar Philippidis

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
parent 22f1f4c7
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> 2018-05-31 Sameera Deshpande <sameera.deshpande@linaro.org>
* config/aarch64/aarch64-simd-builtins.def (ld1x3): New. * config/aarch64/aarch64-simd-builtins.def (ld1x3): New.
......
...@@ -9275,13 +9275,16 @@ gimplify_adjust_omp_clauses (gimple_seq *pre_p, gimple_seq body, tree *list_p, ...@@ -9275,13 +9275,16 @@ gimplify_adjust_omp_clauses (gimple_seq *pre_p, gimple_seq body, tree *list_p,
case OMP_CLAUSE_REDUCTION: case OMP_CLAUSE_REDUCTION:
decl = OMP_CLAUSE_DECL (c); decl = OMP_CLAUSE_DECL (c);
/* OpenACC reductions need a present_or_copy data clause. /* 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) if (ctx->region_type == ORT_ACC_PARALLEL)
{ {
n = splay_tree_lookup (ctx->variables, (splay_tree_key) decl); n = splay_tree_lookup (ctx->variables, (splay_tree_key) decl);
if (n->value & (GOVD_PRIVATE | GOVD_FIRSTPRIVATE)) 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) else if ((n->value & GOVD_MAP) == 0)
{ {
tree next = OMP_CLAUSE_CHAIN (c); tree next = OMP_CLAUSE_CHAIN (c);
......
...@@ -7700,7 +7700,8 @@ lower_omp_target (gimple_stmt_iterator *gsi_p, omp_context *ctx) ...@@ -7700,7 +7700,8 @@ lower_omp_target (gimple_stmt_iterator *gsi_p, omp_context *ctx)
if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE) if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE)
{ {
gcc_assert (is_gimple_omp_oacc (ctx->stmt)); 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 /* Create a local object to hold the instance
value. */ 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> 2018-05-31 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/stack_usage1.adb: Replace -fstack-usage with -Wstack-usage. * gnat.dg/stack_usage1.adb: Replace -fstack-usage with -Wstack-usage.
......
! PR fortran/77371
! { dg-do compile }
program p
character(:), allocatable :: z
!$acc parallel
z = 'abc'
!$acc end parallel
print *, z
end
! 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
! 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
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment