Fix random class_allocate_18.f90 failure
authorMikael Morin <mikael@gcc.gnu.org>
Mon, 3 Aug 2015 10:03:55 +0000 (10:03 +0000)
committerMikael Morin <mikael@gcc.gnu.org>
Mon, 3 Aug 2015 10:03:55 +0000 (10:03 +0000)
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

gcc/fortran/ChangeLog
gcc/fortran/class.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/class_allocate_20.f90 [new file with mode: 0644]

index 5bb70f1c68ad9c94ebfa9427c16c949d5596bdbe..03ea33cc996bf6440e60d8fc0648da57b021f038 100644 (file)
@@ -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
index 218973dc048b27522f42a673dbf89bddceb03943..7a9e2755a0fd87487006cce3e6894630ae7ba6a0 100644 (file)
@@ -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;
index 640289c2c4d1eaa40eea4b6bbb9f9dc0a26c3569..be48d3939934a198294b74603fbacbfe425641ce 100644 (file)
@@ -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.
 
 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 (file)
index 0000000..defe9df
--- /dev/null
@@ -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" }