http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49430

--- Comment #5 from janus at gcc dot gnu.org 2011-06-21 21:37:27 UTC ---
Comment #4 can be fixed with the following patch:


Index: gcc/fortran/trans-expr.c
===================================================================
--- gcc/fortran/trans-expr.c    (revision 175256)
+++ gcc/fortran/trans-expr.c    (working copy)
@@ -3381,7 +3381,7 @@ gfc_conv_procedure_call (gfc_se * se, gfc_symbol *
          we take the character length of the first argument for the result.
          For dummies, we have to look through the formal argument list for
          this function and use the character length found there.*/
-      if (ts.deferred && (sym->attr.allocatable || sym->attr.pointer))
+      if (ts.deferred)
         cl.backend_decl = gfc_create_var (gfc_charlen_type_node, "slen");
       else if (!sym->attr.dummy)
         cl.backend_decl = VEC_index (tree, stringargs, 0);
@@ -6112,7 +6112,7 @@ gfc_trans_assignment_1 (gfc_expr * expr1, gfc_expr
   gfc_conv_expr (&rse, expr2);

   /* Stabilize a string length for temporaries.  */
-  if (expr2->ts.type == BT_CHARACTER)
+  if (expr2->ts.type == BT_CHARACTER && !expr2->ts.deferred)
     string_length = gfc_evaluate_now (rse.string_length, &rse.pre);
   else
     string_length = NULL_TREE;

Reply via email to