From 9438af576b2c64026be187b075868da20d53a545 Mon Sep 17 00:00:00 2001 From: jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> Date: Mon, 15 May 2006 09:59:30 +0000 Subject: [PATCH] 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@113788 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 6 ++++++ gcc/omp-low.c | 4 ++++ libgomp/ChangeLog | 5 +++++ .../testsuite/libgomp.fortran/pr27416-1.f90 | 19 +++++++++++++++++++ 4 files changed, 34 insertions(+) create mode 100644 libgomp/testsuite/libgomp.fortran/pr27416-1.f90 diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 80a3571bc368..68ee5888aedb 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 2de13eccdec4..c6d186bee715 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 d04194cd4a65..3cf357ed1b6e 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 000000000000..d42e1ef19ab5 --- /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 -- GitLab