From: Janus Weil Date: Fri, 21 Apr 2017 21:37:16 +0000 (+0200) Subject: backport: re PR fortran/80361 ([OOP] bogus recursive call to nonrecursive procedure... X-Git-Tag: releases/gcc-5.5.0~396 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cd93319bcfa6ccf2715ec76065ac0640d09bee99;p=thirdparty%2Fgcc.git backport: re PR fortran/80361 ([OOP] bogus recursive call to nonrecursive procedure with -fcheck=recursion) 2017-04-21 Janus Weil Backport from trunk PR fortran/80361 * class.c (generate_finalization_wrapper): Give the finalization wrapper the recursive attribute. 2017-04-21 Janus Weil Backport from trunk PR fortran/80361 * gfortran.dg/class_62.f90: New test case. From-SVN: r247071 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 30c90d3f6031..dd51c6b75048 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2017-04-21 Janus Weil + + Backport from trunk + PR fortran/80361 + * class.c (generate_finalization_wrapper): Give the finalization wrapper + the recursive attribute. + 2017-04-14 Dominique d'Humieres Backport from trunk diff --git a/gcc/fortran/class.c b/gcc/fortran/class.c index 4ab96524b24c..c8f67d538208 100644 --- a/gcc/fortran/class.c +++ b/gcc/fortran/class.c @@ -1599,6 +1599,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 df0134eb983e..a57d8bdd9a5c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2017-04-21 Janus Weil + + Backport from trunk + PR fortran/80361 + * gfortran.dg/class_62.f90: New test case. + 2017-04-21 Christophe Lyon Backport from mainline diff --git a/gcc/testsuite/gfortran.dg/class_62.f90 b/gcc/testsuite/gfortran.dg/class_62.f90 new file mode 100644 index 000000000000..39ee98dd3618 --- /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 + +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