aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJerry DeLisle <jvdelisle@gcc.gnu.org>2016-07-15 19:58:55 +0000
committerJerry DeLisle <jvdelisle@gcc.gnu.org>2016-07-15 19:58:55 +0000
commita07b81c7422349f3a104058af3ae192565a6a6f4 (patch)
tree61b7c0ce5454c61aa9c28620d7b1f82c25a99954
parentd1129d45b09c6fe0542f439fffda3bd4667a67a1 (diff)
downloadgcc-a07b81c7422349f3a104058af3ae192565a6a6f4.zip
gcc-a07b81c7422349f3a104058af3ae192565a6a6f4.tar.gz
gcc-a07b81c7422349f3a104058af3ae192565a6a6f4.tar.bz2
re PR fortran/62125 (Nested select type not accepted (rejects valid))
2016-07-15 Jerry DeLisle <jvdelisle@gcc.gnu.org> Marco Restelli <mrestelli@gmail.com> PR fortran/62125 * symbol.c (select_type_insert_tmp): Recursively call self to take care of nested select type. * gfortran.dg/pr62125.f90: New test. Co-Authored-By: Marco Restelli <mrestelli@gmail.com> From-SVN: r238400
-rw-r--r--gcc/fortran/ChangeLog7
-rw-r--r--gcc/fortran/symbol.c6
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gfortran.dg/pr62125.f9032
4 files changed, 50 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 51e8e2e..82e90da 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,10 @@
+2016-07-15 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+ Marco Restelli <mrestelli@gmail.com>
+
+ PR fortran/62125
+ * symbol.c (select_type_insert_tmp): Recursively call self to take care
+ of nested select type.
+
2016-07-15 Cesar Philippidis <cesar@codesourcery.com>
* openmp.c (gfc_match_omp_clauses): Scan for clause vector_length
diff --git a/gcc/fortran/symbol.c b/gcc/fortran/symbol.c
index 0ee7dec..c967f25 100644
--- a/gcc/fortran/symbol.c
+++ b/gcc/fortran/symbol.c
@@ -2930,7 +2930,11 @@ select_type_insert_tmp (gfc_symtree **st)
gfc_select_type_stack *stack = select_type_stack;
for (; stack; stack = stack->prev)
if ((*st)->n.sym == stack->selector && stack->tmp)
- *st = stack->tmp;
+ {
+ *st = stack->tmp;
+ select_type_insert_tmp (st);
+ return;
+ }
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 9608c2b..2793b34 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2016-07-15 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+ Marco Restelli <mrestelli@gmail.com>
+
+ PR fortran/62125
+ * gfortran.dg/pr62125.f90: New test.
+
2016-07-15 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
* gcc.target/powerpc/divkc3-1.c: Require p8vector support.
diff --git a/gcc/testsuite/gfortran.dg/pr62125.f90 b/gcc/testsuite/gfortran.dg/pr62125.f90
new file mode 100644
index 0000000..3256d05c
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr62125.f90
@@ -0,0 +1,32 @@
+! { dg-do run }
+! PR62125 Nested select type not accepted (rejects valid)
+module m
+ implicit none
+ type, abstract :: t1
+ logical :: l
+ end type t1
+ type, extends(t1), abstract :: t2
+ integer :: i
+ end type t2
+ type, extends(t2) :: t3
+ real :: x
+ end type t3
+contains
+ subroutine s(u)
+ class(t1), intent(in) :: u
+ if(.not.u%l) call abort()
+ select type(u); class is(t2)
+ if(u%i.ne.2) call abort()
+ select type(u); class is(t3)
+ if(u%x.ne.3.5) call abort()
+ end select
+ end select
+ end subroutine s
+end module m
+
+program p
+ use m
+ implicit none
+ type(t3) :: var = t3( l=.true. , i=2 , x=3.5 )
+ call s(var)
+end program p