aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2016-09-27 09:52:28 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2016-09-27 09:52:28 +0200
commitf2e0c4e1ce34642b613ec2ed6cd2be83b1753849 (patch)
treed17be163d5873dd2df5a75cc7d91cd0976c4bd21 /gcc
parent0fbac2d130600a37414c33ecf2c12c9c8945f353 (diff)
downloadgcc-f2e0c4e1ce34642b613ec2ed6cd2be83b1753849.zip
gcc-f2e0c4e1ce34642b613ec2ed6cd2be83b1753849.tar.gz
gcc-f2e0c4e1ce34642b613ec2ed6cd2be83b1753849.tar.bz2
re PR fortran/77666 (ICE in gfc_omp_clause_default_ctor, at fortran/trans-openmp.c:471)
PR fortran/77666 * trans-openmp.c (gfc_omp_private_outer_ref): Return true even for references to allocatable arrays. * gfortran.dg/gomp/pr77666.f90: New test. From-SVN: r240522
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/trans-openmp.c6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/gomp/pr77666.f9026
4 files changed, 40 insertions, 3 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index c6bc662..2aa7c69 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2016-09-27 Jakub Jelinek <jakub@redhat.com>
+
+ PR fortran/77666
+ * trans-openmp.c (gfc_omp_private_outer_ref): Return true even for
+ references to allocatable arrays.
+
2016-09-26 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/77420
diff --git a/gcc/fortran/trans-openmp.c b/gcc/fortran/trans-openmp.c
index e4a2975..b8b8576 100644
--- a/gcc/fortran/trans-openmp.c
+++ b/gcc/fortran/trans-openmp.c
@@ -207,6 +207,9 @@ gfc_omp_private_outer_ref (tree decl)
{
tree type = TREE_TYPE (decl);
+ if (gfc_omp_privatize_by_reference (decl))
+ type = TREE_TYPE (type);
+
if (GFC_DESCRIPTOR_TYPE_P (type)
&& GFC_TYPE_ARRAY_AKIND (type) == GFC_ARRAY_ALLOCATABLE)
return true;
@@ -214,9 +217,6 @@ gfc_omp_private_outer_ref (tree decl)
if (GFC_DECL_GET_SCALAR_ALLOCATABLE (decl))
return true;
- if (gfc_omp_privatize_by_reference (decl))
- type = TREE_TYPE (type);
-
if (gfc_has_alloc_comps (type, decl))
return true;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 4b24d64..353fd07 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2016-09-27 Jakub Jelinek <jakub@redhat.com>
+
+ PR fortran/77666
+ * gfortran.dg/gomp/pr77666.f90: New test.
+
2016-09-27 Kugan Vivekanandarajah <kuganv@linaro.org>
PR ipa/77677
diff --git a/gcc/testsuite/gfortran.dg/gomp/pr77666.f90 b/gcc/testsuite/gfortran.dg/gomp/pr77666.f90
new file mode 100644
index 0000000..18e039e
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/gomp/pr77666.f90
@@ -0,0 +1,26 @@
+! PR fortran/77666
+! { dg-do compile }
+
+subroutine foo(x)
+ interface
+ subroutine baz(x, y)
+ integer, allocatable :: x(:), y
+ end subroutine
+ end interface
+ integer, allocatable :: x(:), y
+!$omp parallel private(x, y)
+ call baz (x, y)
+!$omp end parallel
+end
+subroutine bar
+ interface
+ subroutine baz(x, y)
+ integer, allocatable :: x(:), y
+ end subroutine
+ end interface
+ integer, allocatable :: x(:), y
+ call baz (x, y)
+!$omp parallel private(x, y)
+ call baz (x, y)
+!$omp end parallel
+end