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/37201] ICE in in gfc_conv_string_parameter



------- 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


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