re PR middle-end/27416 (ICE on invalid firstprivate/lastprivate)

PR middle-end/27416
	* omp-low.c (build_outer_var_ref): If VAR is reference in orphaned
	construct, return *VAR.

	* libgomp.fortran/pr27416-1.f90: New test.

From-SVN: r113788
This commit is contained in:
Jakub Jelinek 2006-05-15 11:59:30 +02:00 committed by Jakub Jelinek
parent 5b8fdd1fad
commit eeb1d9e08e
4 changed files with 34 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2006-05-15 Jakub Jelinek <jakub@redhat.com>
PR middle-end/27416
* omp-low.c (build_outer_var_ref): If VAR is reference in orphaned
construct, return *VAR.
2006-05-14 Kaz Kojima <kkojima@gcc.gnu.org>
PR rtl-optimization/27406

View File

@ -577,6 +577,10 @@ build_outer_var_ref (tree var, omp_context *ctx)
}
else if (ctx->outer)
x = lookup_decl (var, ctx->outer);
else if (is_reference (var))
/* This can happen with orphaned constructs. If var is reference, it is
possible it is shared and as such valid. */
x = var;
else
gcc_unreachable ();

View File

@ -1,3 +1,8 @@
2006-05-15 Jakub Jelinek <jakub@redhat.com>
PR middle-end/27416
* libgomp.fortran/pr27416-1.f90: New test.
2006-05-03 Jakub Jelinek <jakub@redhat.com>
PR fortran/27395

View File

@ -0,0 +1,19 @@
! PR middle-end/27416
! { dg-do run }
integer :: j
j = 6
!$omp parallel num_threads (4)
call foo (j)
!$omp end parallel
if (j.ne.6+16) call abort
end
subroutine foo (j)
integer :: i, j
!$omp do firstprivate (j) lastprivate (j)
do i = 1, 16
if (i.eq.16) j = j + i
end do
end subroutine foo