aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikael Morin <mikael@gcc.gnu.org>2015-08-03 10:03:55 +0000
committerMikael Morin <mikael@gcc.gnu.org>2015-08-03 10:03:55 +0000
commit2ab320ad365da31f2d02b57d2f03bc291ab64bb9 (patch)
tree29f18a52b53636fb4ec84ebafe091f84638056af
parent44fef04ab18f57111e7d9f7dcd88d76a3c7bfc09 (diff)
downloadgcc-2ab320ad365da31f2d02b57d2f03bc291ab64bb9.zip
gcc-2ab320ad365da31f2d02b57d2f03bc291ab64bb9.tar.gz
gcc-2ab320ad365da31f2d02b57d2f03bc291ab64bb9.tar.bz2
Fix random class_allocate_18.f90 failure
PR fortran/64921 gcc/fortran/ * class.c (generate_finalization_wrapper): Set finalization procedure symbol's always_explicit attribute. gcc/testsuite/ * gfortran.dg/class_allocate_20.f90: New. From-SVN: r226493
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/class.c1
-rw-r--r--gcc/testsuite/ChangeLog17
-rw-r--r--gcc/testsuite/gfortran.dg/class_allocate_20.f9032
4 files changed, 50 insertions, 6 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 5bb70f1..03ea33c 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2015-08-03 Mikael Morin <mikael@gcc.gnu.org>
+
+ PR fortran/64921
+ * class.c (generate_finalization_wrapper): Set finalization
+ procedure symbol's always_explicit attribute.
+
2015-08-01 Paul Thomas <pault@gcc.gnu.org>
PR fortran/67091
diff --git a/gcc/fortran/class.c b/gcc/fortran/class.c
index 218973d..7a9e275 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->ts.type = BT_INTEGER;
final->ts.kind = 4;
final->attr.artificial = 1;
+ final->attr.always_explicit = 1;
final->attr.if_source = expr_null_wrapper ? IFSRC_IFBODY : IFSRC_DECL;
if (ns->proc_name->attr.flavor == FL_MODULE)
final->module = ns->proc_name->name;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 640289c..be48d39 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2015-08-03 Mikael Morin <mikael@gcc.gnu.org>
+
+ PR fortran/64921
+ * gfortran.dg/class_allocate_20.f90: New.
+
2015-08-03 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
* gcc.target/aarch64/csel_bfx_1.c: New test.
@@ -5,12 +10,12 @@
2015-08-02 Martin Sebor <msebor@redhat.com>
- * g++.dg/Wframe-address-in-Wall.C: New test.
- * g++.dg/Wframe-address.C: New test.
- * g++.dg/Wno-frame-address.C: New test.
- * gcc.dg/Wframe-address-in-Wall.c: New test.
- * gcc.dg/Wframe-address.c: New test.
- * gcc.dg/Wno-frame-address.c: New test.
+ * g++.dg/Wframe-address-in-Wall.C: New test.
+ * g++.dg/Wframe-address.C: New test.
+ * g++.dg/Wno-frame-address.C: New test.
+ * gcc.dg/Wframe-address-in-Wall.c: New test.
+ * gcc.dg/Wframe-address.c: New test.
+ * gcc.dg/Wno-frame-address.c: New test.
2015-08-02 Patrick Palka <ppalka@gcc.gnu.org>
diff --git a/gcc/testsuite/gfortran.dg/class_allocate_20.f90 b/gcc/testsuite/gfortran.dg/class_allocate_20.f90
new file mode 100644
index 0000000..defe9df
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/class_allocate_20.f90
@@ -0,0 +1,32 @@
+! { dg-do run }
+!
+! PR fortran/64921
+! Test that the finalization wrapper procedure get the always_explicit
+! attribute so that the array is not passed without descriptor from
+! T3's finalization wrapper procedure to T2's one.
+!
+! Contributed by Mat Cross <mathewc@nag.co.uk>
+
+Program test
+ Implicit None
+ Type :: t1
+ Integer, Allocatable :: i
+ End Type
+ Type :: t2
+ Integer, Allocatable :: i
+ End Type
+ Type, Extends (t1) :: t3
+ Type (t2) :: j
+ End Type
+ Type, Extends (t3) :: t4
+ Integer, Allocatable :: k
+ End Type
+ Call s
+ Print *, 'ok'
+Contains
+ Subroutine s
+ Class (t1), Allocatable :: x
+ Allocate (t4 :: x)
+ End Subroutine
+End Program
+! { dg-output "ok" }