aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPaul Thomas <pault@gcc.gnu.org>2018-11-24 09:07:23 +0000
committerPaul Thomas <pault@gcc.gnu.org>2018-11-24 09:07:23 +0000
commit51a025fb2e82db52e624cb01e8d46e80acfa593e (patch)
tree1be5259e9830c8e6dc00125d58053f94eba081ca /gcc
parenteabec4d3c56af2e8959c8329b5257a81c606da60 (diff)
downloadgcc-51a025fb2e82db52e624cb01e8d46e80acfa593e.zip
gcc-51a025fb2e82db52e624cb01e8d46e80acfa593e.tar.gz
gcc-51a025fb2e82db52e624cb01e8d46e80acfa593e.tar.bz2
2018-11-24 Paul Thomas <pault@gcc.gnu.org>
PR fortran/888143 * resolve.c (resolve_variable): Check for associate names with NULL target. 2018-11-24 Paul Thomas <pault@gcc.gnu.org> PR fortran/888143 * gfortran.dg/associate_46.f90: New test. From-SVN: r266427
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/resolve.c2
-rw-r--r--gcc/testsuite/ChangeLog9
-rw-r--r--gcc/testsuite/gfortran.dg/associate_46.f9037
4 files changed, 51 insertions, 3 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 6f29472..58ca263 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2018-11-24 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/888143
+ * resolve.c (resolve_variable): Check for associate names with
+ NULL target.
+
2018-11-23 Jakub Jelinek <jakub@redhat.com>
* lang.opt (fpad-source): New option.
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index df7c6cb..b209021 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -5410,7 +5410,7 @@ resolve_variable (gfc_expr *e)
the ts' type of the component refs is still array valued, which
can't be translated that way. */
if (sym->assoc && e->rank == 0 && e->ref && sym->ts.type == BT_CLASS
- && sym->assoc->target->ts.type == BT_CLASS
+ && sym->assoc->target && sym->assoc->target->ts.type == BT_CLASS
&& CLASS_DATA (sym->assoc->target)->as)
{
gfc_ref *ref = e->ref;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 587526e7..de3196e 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2018-11-24 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/888143
+ * gfortran.dg/associate_46.f90: New test.
+
2018-11-23 Jeff Law <law@redhat.com>
PR rtl-optimization/84768
@@ -585,7 +590,7 @@
Likewise.
* gcc.target/s390/global-array-even-element.c: Likewise.
-2018-11-14 Wilco Dijkstra <wdijkstr@arm.com>
+2018-11-14 Wilco Dijkstra <wdijkstr@arm.com>
Jackson Woodruff <jackson.woodruff@arm.com>
PR 71026/tree-optimization
@@ -600,7 +605,7 @@
PR rtl-optimization/87817
* gcc.target/i386/bmi2-bzhi-3.c (main): Add a couple of new tests.
-2018-11-14 Wilco Dijkstra <wdijkstr@arm.com>
+2018-11-14 Wilco Dijkstra <wdijkstr@arm.com>
* gcc.target/aarch64/pr62178.c: Relax scan-assembler checks.
diff --git a/gcc/testsuite/gfortran.dg/associate_46.f90 b/gcc/testsuite/gfortran.dg/associate_46.f90
new file mode 100644
index 0000000..69cc189
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/associate_46.f90
@@ -0,0 +1,37 @@
+! { dg-do run }
+!
+! Check the fix for PR88143, in which the associate name caused
+! a segfault in resolve.c. Make sure that the associate construct
+! does its job correctly, as well as compiles.
+!
+! Contributed by Andrew Wood <andrew@fluidgravity.co.uk>
+!
+MODULE m
+ IMPLICIT NONE
+ TYPE t
+ INTEGER, DIMENSION(:), ALLOCATABLE :: i
+ END TYPE
+ CONTAINS
+ SUBROUTINE s(x, idx1, idx2, k)
+ CLASS(*), DIMENSION(:), INTENT(IN), OPTIONAL :: x
+ INTEGER :: idx1, idx2, k
+ SELECT TYPE ( x )
+ CLASS IS ( t )
+ ASSOCIATE ( j => x(idx1)%i )
+ k = j(idx2)
+ END ASSOCIATE
+ END SELECT
+ END
+END
+
+ use m
+ class (t), allocatable :: c(:)
+ integer :: k
+ allocate (c(2))
+ allocate (c(1)%i, source = [3,2,1])
+ allocate (c(2)%i, source = [6,5,4])
+ call s(c, 1, 3, k)
+ if (k .ne. 1) stop 1
+ call s(c, 2, 1, k)
+ if (k .ne. 6) stop 2
+end