Commit affd7d47 by Cesar Philippidis Committed by Thomas Schwinge

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
parent 696c5b27
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> 2019-02-13 Martin Liska <mliska@suse.cz>
PR fortran/88649 PR fortran/88649
......
...@@ -5760,7 +5760,13 @@ resolve_oacc_nested_loops (gfc_code *code, gfc_code* do_code, int collapse, ...@@ -5760,7 +5760,13 @@ resolve_oacc_nested_loops (gfc_code *code, gfc_code* do_code, int collapse,
"at %L", &do_code->loc); "at %L", &do_code->loc);
break; 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) if (do_code->ext.iterator->var->ts.type != BT_INTEGER)
gfc_error ("!$ACC LOOP iteration variable must be of type integer at %L", gfc_error ("!$ACC LOOP iteration variable must be of type integer at %L",
&do_code->loc); &do_code->loc);
......
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> 2019-02-14 Martin Liska <mliska@suse.cz>
PR rtl-optimization/89242 PR rtl-optimization/89242
......
...@@ -27,9 +27,9 @@ subroutine test1 ...@@ -27,9 +27,9 @@ subroutine test1
!$acc end parallel !$acc end parallel
!$acc end loop ! { dg-error "Unexpected" } !$acc end loop ! { dg-error "Unexpected" }
! OpenACC supports Fortran 2008 do concurrent statement ! OpenACC does not support Fortran 2008 do concurrent statement
!$acc loop !$acc loop
do concurrent (i = 1:5) do concurrent (i = 1:5) ! { dg-error "ACC LOOP cannot be a DO CONCURRENT loop" }
end do end do
!$acc loop !$acc loop
......
...@@ -24,9 +24,9 @@ subroutine test1 ...@@ -24,9 +24,9 @@ subroutine test1
!$acc end parallel !$acc end parallel
!$acc end loop ! { dg-error "Unexpected" } !$acc end loop ! { dg-error "Unexpected" }
! OpenACC supports Fortran 2008 do concurrent statement ! OpenACC does not support Fortran 2008 do concurrent statement
!$acc loop !$acc loop
do concurrent (i = 1:5) do concurrent (i = 1:5) ! { dg-error "ACC LOOP cannot be a DO CONCURRENT loop" }
end do end do
!$acc loop !$acc loop
......
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
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment