aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog5
-rw-r--r--gcc/fortran/class.c1
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/class_62.f9029
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