diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/fortran/class.c | 1 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/class_62.f90 | 29 |
4 files changed, 40 insertions, 0 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 9f31ad9..0fb826d 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,8 @@ +2017-04-14 Janus Weil <janus@gcc.gnu.org> + + PR fortran/80361 + * class.c (generate_finalization_wrapper): Give the finalization wrapper + the recursive attribute. 2017-04-10 Nicolas Koenig <koenigni@student.ethz.ch> Paul Thomas <pault@gcc.gnu.org> diff --git a/gcc/fortran/class.c b/gcc/fortran/class.c index d507e22..2d72e95 100644 --- a/gcc/fortran/class.c +++ b/gcc/fortran/class.c @@ -1613,6 +1613,7 @@ generate_finalization_wrapper (gfc_symbol *derived, gfc_namespace *ns, final->attr.flavor = FL_PROCEDURE; final->attr.function = 1; final->attr.pure = 0; + final->attr.recursive = 1; final->result = final; final->ts.type = BT_INTEGER; final->ts.kind = 4; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 3de763f..107f3dd 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2017-04-14 Janus Weil <janus@gcc.gnu.org> + + PR fortran/80361 + * gfortran.dg/class_62.f90: New test case. + 2017-04-14 Andrew Burgess <andrew.burgess@embecosm.com> * gcc.target/arc/loop-1.c: New file. diff --git a/gcc/testsuite/gfortran.dg/class_62.f90 b/gcc/testsuite/gfortran.dg/class_62.f90 new file mode 100644 index 0000000..39ee98d --- /dev/null +++ b/gcc/testsuite/gfortran.dg/class_62.f90 @@ -0,0 +1,29 @@ +! { dg-do run } +! { dg-options "-fcheck=recursion" } +! +! PR 80361: [5/6/7 Regression] bogus recursive call to nonrecursive procedure with -fcheck=recursion +! +! Contributed by Jürgen Reuter <juergen.reuter@desy.de> + +program main_ut + + implicit none + + type :: prt_spec_expr_t + end type + + type :: prt_expr_t + class(prt_spec_expr_t), allocatable :: x + end type + + type, extends (prt_spec_expr_t) :: prt_spec_list_t + type(prt_expr_t) :: e + end type + + class(prt_spec_list_t), allocatable :: y + + allocate (y) + allocate (prt_spec_list_t :: y%e%x) + deallocate(y) + +end program |