aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/trans-openmp.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2006-05-15 11:57:54 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2006-05-15 11:57:54 +0200
commit5b8fdd1fade31b12b6b33d4598f0e8c14caed3b4 (patch)
treebe5d403048ff99d6d1060ac0b9d66a4b664a4728 /gcc/fortran/trans-openmp.c
parent7e497d0c1f385c09cdf1e20afb02403f2132a8ee (diff)
downloadgcc-5b8fdd1fade31b12b6b33d4598f0e8c14caed3b4.zip
gcc-5b8fdd1fade31b12b6b33d4598f0e8c14caed3b4.tar.gz
gcc-5b8fdd1fade31b12b6b33d4598f0e8c14caed3b4.tar.bz2
re PR fortran/27446 (ICE on OpenMP array REDUCTION clause)
PR fortran/27446 * trans-openmp.c (gfc_trans_omp_array_reduction): Ensure OMP_CLAUSE_REDUCTION_{INIT,MERGE} are set to BIND_EXPR. From-SVN: r113787
Diffstat (limited to 'gcc/fortran/trans-openmp.c')
-rw-r--r--gcc/fortran/trans-openmp.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/gcc/fortran/trans-openmp.c b/gcc/fortran/trans-openmp.c
index bd57836..f33f1bd 100644
--- a/gcc/fortran/trans-openmp.c
+++ b/gcc/fortran/trans-openmp.c
@@ -262,7 +262,7 @@ gfc_trans_omp_array_reduction (tree c, gfc_symbol *sym, locus where)
gfc_symbol init_val_sym, outer_sym, intrinsic_sym;
gfc_expr *e1, *e2, *e3, *e4;
gfc_ref *ref;
- tree decl, backend_decl;
+ tree decl, backend_decl, stmt;
locus old_loc = gfc_current_locus;
const char *iname;
try t;
@@ -400,10 +400,22 @@ gfc_trans_omp_array_reduction (tree c, gfc_symbol *sym, locus where)
gcc_assert (t == SUCCESS);
/* Create the init statement list. */
- OMP_CLAUSE_REDUCTION_INIT (c) = gfc_trans_assignment (e1, e2);
+ pushlevel (0);
+ stmt = gfc_trans_assignment (e1, e2);
+ if (TREE_CODE (stmt) != BIND_EXPR)
+ stmt = build3_v (BIND_EXPR, NULL, stmt, poplevel (1, 0, 0));
+ else
+ poplevel (0, 0, 0);
+ OMP_CLAUSE_REDUCTION_INIT (c) = stmt;
/* Create the merge statement list. */
- OMP_CLAUSE_REDUCTION_MERGE (c) = gfc_trans_assignment (e3, e4);
+ pushlevel (0);
+ stmt = gfc_trans_assignment (e3, e4);
+ if (TREE_CODE (stmt) != BIND_EXPR)
+ stmt = build3_v (BIND_EXPR, NULL, stmt, poplevel (1, 0, 0));
+ else
+ poplevel (0, 0, 0);
+ OMP_CLAUSE_REDUCTION_MERGE (c) = stmt;
/* And stick the placeholder VAR_DECL into the clause as well. */
OMP_CLAUSE_REDUCTION_PLACEHOLDER (c) = outer_sym.backend_decl;