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