This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug fortran/49430] ICE with allocatable length character in interface block


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;


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]