From: Mikael Morin Date: Wed, 5 Aug 2015 16:42:00 +0000 (+0000) Subject: Fix random class_allocate_18.f90 failure X-Git-Tag: releases/gcc-4.9.4~659 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6e0ae0e2c68ce688699f68c873470be942e8b380;p=thirdparty%2Fgcc.git 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: r226639 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index e0a8816a75d7..34d612441156 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2015-08-05 Mikael Morin + + PR fortran/64921 + * class.c (generate_finalization_wrapper): Set finalization + procedure symbol's always_explicit attribute. + 2015-06-26 Release Manager * GCC 4.9.3 released. diff --git a/gcc/fortran/class.c b/gcc/fortran/class.c index cd0330a0c54b..f83a24bd1b00 100644 --- a/gcc/fortran/class.c +++ b/gcc/fortran/class.c @@ -1596,6 +1596,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 64920695bf4f..c69841a296f5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-08-05 Mikael Morin + + PR fortran/64921 + * gfortran.dg/class_allocate_20.f90: New. + 2015-08-04 Szabolcs Nagy Backport from mainline r225450: 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 000000000000..defe9df9d06d --- /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 + +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" }