[gomp] Fix array REDUCTION with -fbounds-check (PR fortran/27446)

Jakub Jelinek jakub@redhat.com
Fri May 12 17:27:00 GMT 2006


Hi!

gimplify.c relies on OMP_CLAUSE_REDUCTION_{INIT,MERGE} being BIND_EXPRs,
so this patch just ensures that.
Ok for trunk?

2006-05-12  Jakub Jelinek  <jakub@redhat.com>

	PR fortran/27446
	* trans-openmp.c (gfc_trans_omp_array_reduction): Ensure
	OMP_CLAUSE_REDUCTION_{INIT,MERGE} are set to BIND_EXPR.

--- gcc/fortran/trans-openmp.c.jj	2006-04-15 00:14:38.000000000 +0200
+++ gcc/fortran/trans-openmp.c	2006-05-12 13:53:25.000000000 +0200
@@ -262,7 +262,7 @@ gfc_trans_omp_array_reduction (tree c, g
   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, g
   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;

	Jakub



More information about the Gcc-patches mailing list