This fixes a glitch introduced during the initial OpenACC work import
process, causing crashes on any Acc_Parallel + Acc_Loop combination.

Tested on x86_64-pc-linux-gnu, committed on trunk

2019-08-19  Olivier Hainque  <hain...@adacore.com>

gcc/ada/

        * gcc-interface/trans.c (Acc_Loop_to_gnu): Return the openacc
        BIND_EXPR node we have constructed on purpose.  Remove unused
        variable.

gcc/testsuite/

        * gnat.dg/openacc1.adb: New testcase.
--- gcc/ada/gcc-interface/trans.c
+++ gcc/ada/gcc-interface/trans.c
@@ -3398,9 +3398,6 @@ independent_iterations_p (tree stmt_list)
 static tree
 Acc_Loop_to_gnu (Node_Id gnat_loop)
 {
-  const struct loop_info_d * const gnu_loop_info = gnu_loop_stack->last ();
-  tree gnu_loop_stmt = gnu_loop_info->stmt;
-
   tree acc_loop = make_node (OACC_LOOP);
   tree acc_bind_expr = NULL_TREE;
   Node_Id cur_loop = gnat_loop;
@@ -3517,7 +3514,7 @@ Acc_Loop_to_gnu (Node_Id gnat_loop)
 
   BIND_EXPR_BODY (acc_bind_expr) = acc_loop;
 
-  return gnu_loop_stmt;
+  return acc_bind_expr;
 }
 
 /* Helper for Loop_Statement_to_gnu, to translate the body of a loop not

--- /dev/null
new file mode 100644
+++ gcc/testsuite/gnat.dg/openacc1.adb
@@ -0,0 +1,12 @@
+--  { dg-do compile }
+
+procedure OpenAcc1 is
+   type Integer_Array is array (1 .. 32) of Integer;
+   Data : Integer_Array;
+begin
+   for i in Data'Range loop
+      pragma Acc_Parallel;
+      pragma Acc_Loop(Worker);
+      Data (i) := i;
+   end loop;
+end;

Reply via email to