diff options
author | Jerry DeLisle <jvdelisle@gcc.gnu.org> | 2016-07-15 19:58:55 +0000 |
---|---|---|
committer | Jerry DeLisle <jvdelisle@gcc.gnu.org> | 2016-07-15 19:58:55 +0000 |
commit | a07b81c7422349f3a104058af3ae192565a6a6f4 (patch) | |
tree | 61b7c0ce5454c61aa9c28620d7b1f82c25a99954 | |
parent | d1129d45b09c6fe0542f439fffda3bd4667a67a1 (diff) | |
download | gcc-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/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/fortran/symbol.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/pr62125.f90 | 32 |
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 |