re PR fortran/77973 (ICE in scan_omp_1_op, at omp-low.c:3841)
PR fortran/77973 * gimplify.c (gimplify_adjust_omp_clauses_1): For all added map clauses with OMP_CLAUSE_SIZE being a decl, call omp_notice_variable on outer context if any. * gfortran.dg/gomp/pr77973.f90: New test. Co-Authored-By: Martin Liska <mliska@suse.cz> From-SVN: r241581
This commit is contained in:
parent
984fa0eacb
commit
3693a620f0
|
@ -1,3 +1,11 @@
|
|||
2016-10-26 Jakub Jelinek <jakub@redhat.com>
|
||||
Martin Liska <mliska@suse.cz>
|
||||
|
||||
PR fortran/77973
|
||||
* gimplify.c (gimplify_adjust_omp_clauses_1): For all added map
|
||||
clauses with OMP_CLAUSE_SIZE being a decl, call omp_notice_variable
|
||||
on outer context if any.
|
||||
|
||||
2016-10-26 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* gen-pass-instances.awk (adjust_linenos): INcrement pass_lines[p]
|
||||
|
|
|
@ -8421,9 +8421,10 @@ gimplify_adjust_omp_clauses_1 (splay_tree_node n, void *data)
|
|||
&& omp_shared_to_firstprivate_optimizable_decl_p (decl))
|
||||
omp_mark_stores (gimplify_omp_ctxp->outer_context, decl);
|
||||
|
||||
tree chain = *list_p;
|
||||
clause = build_omp_clause (input_location, code);
|
||||
OMP_CLAUSE_DECL (clause) = decl;
|
||||
OMP_CLAUSE_CHAIN (clause) = *list_p;
|
||||
OMP_CLAUSE_CHAIN (clause) = chain;
|
||||
if (private_debug)
|
||||
OMP_CLAUSE_PRIVATE_DEBUG (clause) = 1;
|
||||
else if (code == OMP_CLAUSE_PRIVATE && (flags & GOVD_PRIVATE_OUTER_REF))
|
||||
|
@ -8450,7 +8451,7 @@ gimplify_adjust_omp_clauses_1 (splay_tree_node n, void *data)
|
|||
OMP_CLAUSE_SET_MAP_KIND (clause, GOMP_MAP_ALLOC);
|
||||
OMP_CLAUSE_MAP_MAYBE_ZERO_LENGTH_ARRAY_SECTION (clause) = 1;
|
||||
OMP_CLAUSE_SET_MAP_KIND (nc, GOMP_MAP_FIRSTPRIVATE_POINTER);
|
||||
OMP_CLAUSE_CHAIN (nc) = *list_p;
|
||||
OMP_CLAUSE_CHAIN (nc) = chain;
|
||||
OMP_CLAUSE_CHAIN (clause) = nc;
|
||||
struct gimplify_omp_ctx *ctx = gimplify_omp_ctxp;
|
||||
gimplify_omp_ctxp = ctx->outer_context;
|
||||
|
@ -8520,7 +8521,7 @@ gimplify_adjust_omp_clauses_1 (splay_tree_node n, void *data)
|
|||
tree nc = build_omp_clause (input_location, OMP_CLAUSE_LASTPRIVATE);
|
||||
OMP_CLAUSE_DECL (nc) = decl;
|
||||
OMP_CLAUSE_LASTPRIVATE_FIRSTPRIVATE (nc) = 1;
|
||||
OMP_CLAUSE_CHAIN (nc) = *list_p;
|
||||
OMP_CLAUSE_CHAIN (nc) = chain;
|
||||
OMP_CLAUSE_CHAIN (clause) = nc;
|
||||
struct gimplify_omp_ctx *ctx = gimplify_omp_ctxp;
|
||||
gimplify_omp_ctxp = ctx->outer_context;
|
||||
|
@ -8531,6 +8532,12 @@ gimplify_adjust_omp_clauses_1 (splay_tree_node n, void *data)
|
|||
struct gimplify_omp_ctx *ctx = gimplify_omp_ctxp;
|
||||
gimplify_omp_ctxp = ctx->outer_context;
|
||||
lang_hooks.decls.omp_finish_clause (clause, pre_p);
|
||||
if (gimplify_omp_ctxp)
|
||||
for (; clause != chain; clause = OMP_CLAUSE_CHAIN (clause))
|
||||
if (OMP_CLAUSE_CODE (clause) == OMP_CLAUSE_MAP
|
||||
&& DECL_P (OMP_CLAUSE_SIZE (clause)))
|
||||
omp_notice_variable (gimplify_omp_ctxp, OMP_CLAUSE_SIZE (clause),
|
||||
true);
|
||||
gimplify_omp_ctxp = ctx;
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2016-10-26 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR fortran/77973
|
||||
* gfortran.dg/gomp/pr77973.f90: New test.
|
||||
|
||||
2016-10-26 Paul Thomas <pault@gcc.gnu.org>
|
||||
|
||||
PR fortran/78108
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
! PR fortran/77973
|
||||
! { dg-do compile }
|
||||
|
||||
subroutine s(x)
|
||||
integer :: x(:)
|
||||
integer :: i
|
||||
!$omp parallel
|
||||
!$omp target
|
||||
x(1) = 1
|
||||
!$omp end target
|
||||
!$omp end parallel
|
||||
end
|
Loading…
Reference in New Issue