]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Correct the reported line number in Fortran combined OpenACC directives
authortschwinge <tschwinge@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 9 Dec 2018 12:49:20 +0000 (12:49 +0000)
committertschwinge <tschwinge@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 9 Dec 2018 12:49:20 +0000 (12:49 +0000)
gcc/fortran/
* trans-openmp.c (gfc_trans_oacc_combined_directive): Set the
location of combined acc loops.
gcc/testsuite/
* gfortran.dg/goacc/combined-directives-3.f90: New file.

Reviewed-by: Thomas Schwinge <thomas@codesourcery.com>
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@266924 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/fortran/ChangeLog
gcc/fortran/trans-openmp.c
gcc/testsuite/ChangeLog
gcc/testsuite/c-c++-common/goacc/combined-directives-3.c
gcc/testsuite/gfortran.dg/goacc/combined-directives-3.f90 [new file with mode: 0644]

index c6eb05174f69bc2e46a1bf39c703d4cabceb68ea..e74bda7a1362dce345ad92a467f0e4d2eeecb834 100644 (file)
@@ -1,3 +1,8 @@
+2018-12-09  Cesar Philippidis  <cesar@codesourcery.com>
+
+       * trans-openmp.c (gfc_trans_oacc_combined_directive): Set the
+       location of combined acc loops.
+
 2018-12-09  Thomas Schwinge  <thomas@codesourcery.com>
 
        * openmp.c (resolve_oacc_loop_blocks): Remove checking of OpenACC
index c9fc4e49c450cd3ab42639ccc521e5c8fe6e4736..bf3f46939e39b495c6c8f439075737332c3a1ca1 100644 (file)
@@ -3878,6 +3878,7 @@ gfc_trans_oacc_combined_directive (gfc_code *code)
   gfc_omp_clauses construct_clauses, loop_clauses;
   tree stmt, oacc_clauses = NULL_TREE;
   enum tree_code construct_code;
+  location_t loc = input_location;
 
   switch (code->op)
     {
@@ -3939,12 +3940,12 @@ gfc_trans_oacc_combined_directive (gfc_code *code)
   else
     pushlevel ();
   stmt = gfc_trans_omp_do (code, EXEC_OACC_LOOP, pblock, &loop_clauses, NULL);
+  protected_set_expr_location (stmt, loc);
   if (TREE_CODE (stmt) != BIND_EXPR)
     stmt = build3_v (BIND_EXPR, NULL, stmt, poplevel (1, 0));
   else
     poplevel (0, 0);
-  stmt = build2_loc (input_location, construct_code, void_type_node, stmt,
-                    oacc_clauses);
+  stmt = build2_loc (loc, construct_code, void_type_node, stmt, oacc_clauses);
   gfc_add_expr_to_block (&block, stmt);
   return gfc_finish_block (&block);
 }
index 6b26f6f510dbc42ccc84caf0879ab10f1ff98180..19bc532c9d5711e9db03f320e9c28b9e42ae1ebf 100644 (file)
@@ -1,3 +1,7 @@
+2018-12-09  Thomas Schwinge  <thomas@codesourcery.com>
+
+       * gfortran.dg/goacc/combined-directives-3.f90: New file.
+
 2018-12-09  Cesar Philippidis  <cesar@codesourcery.com>
 
        * c-c++-common/goacc/combined-directives-3.c: New test.
index 77d418262eacf6b2e384da4466905198742209a2..c6e31c26a8f13733debc4aaa9d5cd3dc28d03d5a 100644 (file)
@@ -1,5 +1,6 @@
 /* Verify the accuracy of the line number associated with combined
    constructs.  */
+/* See also "../../gfortran.dg/goacc/combined-directives-3.f90".  */
 
 int
 main ()
diff --git a/gcc/testsuite/gfortran.dg/goacc/combined-directives-3.f90 b/gcc/testsuite/gfortran.dg/goacc/combined-directives-3.f90
new file mode 100644 (file)
index 0000000..b138822
--- /dev/null
@@ -0,0 +1,26 @@
+! Verify the accuracy of the line number associated with combined constructs.
+! See "../../c-c++-common/goacc/combined-directives-3.c".
+
+subroutine test
+  implicit none
+  integer x, y, z
+
+  !$acc parallel loop seq auto ! { dg-error "'seq' overrides other OpenACC loop specifiers" }
+  do x = 0, 10
+     !$acc loop
+     do y = 0, 10
+     end do
+  end do
+  !$acc end parallel loop
+
+  !$acc parallel loop gang auto ! { dg-error "'auto' conflicts with other OpenACC loop specifiers" }
+  do x = 0, 10
+     !$acc loop worker auto ! { dg-error "'auto' conflicts with other OpenACC loop specifiers" }
+     do y = 0, 10
+        !$acc loop vector
+        do z = 0, 10
+        end do
+     end do
+  end do
+  !$acc end parallel loop
+end subroutine test