[Bug fortran/37201] ICE in in gfc_conv_string_parameter

burnus at gcc dot gnu dot org gcc-bugzilla@gcc.gnu.org
Sat Aug 23 19:46:00 GMT 2008



------- Comment #4 from burnus at gcc dot gnu dot org  2008-08-23 19:45 -------
Actually, removing the assert

--- /home/tob/projects/gcc/gcc/fortran/trans-expr.c     (Revision 139520)
+++ /home/tob/projects/gcc/gcc/fortran/trans-expr.c
@@ -4008,2 +4008,0 @@ gfc_conv_string_parameter (gfc_se * se)
-  gcc_assert (se->string_length
-         && TREE_CODE (TREE_TYPE (se->string_length)) == INTEGER_TYPE);

is enough for assignments. Proof:

 str[1]{lb: 1 sz: 1} = cdir ();  ! str = cdir()
 i = (integer(kind=4)) cdir ();  ! i   = ichar(cdir())

TODO: Come up with a better assert which works also in this case.

 * * *

For I/O one also needs the following:

--- trans-io.c  (Revision 139521)
+++ trans-io.c
@@ -2071,2 +2071,6 @@ transfer_expr (gfc_se * se, gfc_typespec
-         gcc_assert (TREE_CODE (TREE_TYPE (tmp)) == ARRAY_TYPE);
-         arg2 = TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (tmp)));
+
+         /* BIND(C) function return value.  */
+         if (TREE_CODE (TREE_TYPE (tmp)) != ARRAY_TYPE)
+           arg2 = build_int_cst (gfc_charlen_type_node, 1);
+         else
+           arg2 = TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (tmp)));


-- 


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



More information about the Gcc-bugs mailing list