diff options
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/omp-low.c | 4 | ||||
-rw-r--r-- | libgomp/ChangeLog | 5 | ||||
-rw-r--r-- | libgomp/testsuite/libgomp.fortran/pr27416-1.f90 | 19 |
4 files changed, 34 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 80a3571..68ee588 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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 diff --git a/gcc/omp-low.c b/gcc/omp-low.c index 2de13ec..c6d186b 100644 --- a/gcc/omp-low.c +++ b/gcc/omp-low.c @@ -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 (); diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog index d04194c..3cf357e 100644 --- a/libgomp/ChangeLog +++ b/libgomp/ChangeLog @@ -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 diff --git a/libgomp/testsuite/libgomp.fortran/pr27416-1.f90 b/libgomp/testsuite/libgomp.fortran/pr27416-1.f90 new file mode 100644 index 0000000..d42e1ef --- /dev/null +++ b/libgomp/testsuite/libgomp.fortran/pr27416-1.f90 @@ -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 |