aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCesar Philippidis <cesar@codesourcery.com>2019-02-14 05:44:19 -0800
committerThomas Schwinge <tschwinge@gcc.gnu.org>2019-02-14 14:44:19 +0100
commitaffd7d477acb4a19dd588e51e6d5597679d0391d (patch)
tree9a9ef5fd502c9bb9ce68499efcf2d9ea02c48f1e
parent696c5b27c524cf65c6b06e93e62f047faad40a78 (diff)
downloadgcc-affd7d477acb4a19dd588e51e6d5597679d0391d.zip
gcc-affd7d477acb4a19dd588e51e6d5597679d0391d.tar.gz
gcc-affd7d477acb4a19dd588e51e6d5597679d0391d.tar.bz2
Fix PR72715 "ICE in gfc_trans_omp_do, at fortran/trans-openmp.c:3164"
The OpenACC 'resolve_oacc_nested_loops' function duplicates most code of the OpenMP 'resolve_omp_do', but didn't include the PR60127 "ICE with OpenMP and DO CONCURRENT" (trunk r210331) changes. (Probably the two functions should be unified?) The Fortran DO CONCURRENT construct is a way to tell the compiler that loop iterations don't have any interdependencies -- which is information that would very well be suitable for OpenACC/OpenMP loops. There are some "details" however, see the discussion/references in PR60127, so for the time being, make this a compile-time error instead of an ICE. gcc/fortran/ * openmp.c (resolve_oacc_nested_loops): Error on do concurrent loops. gcc/testsuite/ * gfortran.dg/goacc/loop-3-2.f95: Error on do concurrent loops. * gfortran.dg/goacc/loop-3.f95: Likewise. * gfortran.dg/goacc/pr72715.f90: New test. Reviewed-by: Thomas Schwinge <thomas@codesourcery.com> From-SVN: r268875
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/openmp.c8
-rw-r--r--gcc/testsuite/ChangeLog7
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/loop-3-2.f954
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/loop-3.f954
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/pr72715.f906
6 files changed, 30 insertions, 5 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index c573f77..71cef4f 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2019-02-14 Cesar Philippidis <cesar@codesourcery.com>
+
+ PR fortran/72715
+ * openmp.c (resolve_oacc_nested_loops): Error on do concurrent
+ loops.
+
2019-02-13 Martin Liska <mliska@suse.cz>
PR fortran/88649
diff --git a/gcc/fortran/openmp.c b/gcc/fortran/openmp.c
index 15c5842..8651afa 100644
--- a/gcc/fortran/openmp.c
+++ b/gcc/fortran/openmp.c
@@ -5760,7 +5760,13 @@ resolve_oacc_nested_loops (gfc_code *code, gfc_code* do_code, int collapse,
"at %L", &do_code->loc);
break;
}
- gcc_assert (do_code->op == EXEC_DO || do_code->op == EXEC_DO_CONCURRENT);
+ if (do_code->op == EXEC_DO_CONCURRENT)
+ {
+ gfc_error ("!$ACC LOOP cannot be a DO CONCURRENT loop at %L",
+ &do_code->loc);
+ break;
+ }
+ gcc_assert (do_code->op == EXEC_DO);
if (do_code->ext.iterator->var->ts.type != BT_INTEGER)
gfc_error ("!$ACC LOOP iteration variable must be of type integer at %L",
&do_code->loc);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index def998a..6a64983 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,10 @@
+2019-02-14 Cesar Philippidis <cesar@codesourcery.com>
+
+ PR fortran/72715
+ * gfortran.dg/goacc/loop-3-2.f95: Error on do concurrent loops.
+ * gfortran.dg/goacc/loop-3.f95: Likewise.
+ * gfortran.dg/goacc/pr72715.f90: New test.
+
2019-02-14 Martin Liska <mliska@suse.cz>
PR rtl-optimization/89242
diff --git a/gcc/testsuite/gfortran.dg/goacc/loop-3-2.f95 b/gcc/testsuite/gfortran.dg/goacc/loop-3-2.f95
index 9be74a8..c091084 100644
--- a/gcc/testsuite/gfortran.dg/goacc/loop-3-2.f95
+++ b/gcc/testsuite/gfortran.dg/goacc/loop-3-2.f95
@@ -27,9 +27,9 @@ subroutine test1
!$acc end parallel
!$acc end loop ! { dg-error "Unexpected" }
- ! OpenACC supports Fortran 2008 do concurrent statement
+ ! OpenACC does not support Fortran 2008 do concurrent statement
!$acc loop
- do concurrent (i = 1:5)
+ do concurrent (i = 1:5) ! { dg-error "ACC LOOP cannot be a DO CONCURRENT loop" }
end do
!$acc loop
diff --git a/gcc/testsuite/gfortran.dg/goacc/loop-3.f95 b/gcc/testsuite/gfortran.dg/goacc/loop-3.f95
index 30930f4..ed3e8d5 100644
--- a/gcc/testsuite/gfortran.dg/goacc/loop-3.f95
+++ b/gcc/testsuite/gfortran.dg/goacc/loop-3.f95
@@ -24,9 +24,9 @@ subroutine test1
!$acc end parallel
!$acc end loop ! { dg-error "Unexpected" }
- ! OpenACC supports Fortran 2008 do concurrent statement
+ ! OpenACC does not support Fortran 2008 do concurrent statement
!$acc loop
- do concurrent (i = 1:5)
+ do concurrent (i = 1:5) ! { dg-error "ACC LOOP cannot be a DO CONCURRENT loop" }
end do
!$acc loop
diff --git a/gcc/testsuite/gfortran.dg/goacc/pr72715.f90 b/gcc/testsuite/gfortran.dg/goacc/pr72715.f90
new file mode 100644
index 0000000..68580f9
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/goacc/pr72715.f90
@@ -0,0 +1,6 @@
+program p
+ integer :: i
+ !$acc loop
+ do concurrent (i=1:3) ! { dg-error "ACC LOOP cannot be a DO CONCURRENT loop" }
+ end do
+end program p