Hello,

I submit the PR64921 fix I posted two days ago on bugzilla.
The problem comes from the finalization wrapper not having the always_explicit attribute set, so that when it is called, the array argument is passed without descriptor, but the argument declaration is a descriptor array. Boom!

Normally the always_explicit attribute is set automatically during resolution, but the code generated by finalization is not passed through resolution. As resolution also takes care of error reporting,
I prefer to not pass the generated code through resolution.

So the attached patch just sets the flag.
I think it can be backported.

The test is already present on the trunk and 5 branch. I plan to add it to 4.9 as well.

Regression tested on x86_64-unkown-linux-gnu. OK for 6/5/4.9 ?

Mikael


2015-07-29  Mikael Morin  <mik...@gcc.gnu.org>

        PR fortran/64921
        * class.c (generate_finalization_wrapper): Set finalization
        procedure symbol's always_explicit attribute.

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;


Reply via email to