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

Francois-Xavier Coudert <fxcoudert at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |patch
                 CC|                            |fxcoudert at gcc dot
                   |                            |gnu.org

--- Comment #3 from Francois-Xavier Coudert <fxcoudert at gcc dot gnu.org> 
2011-03-11 21:32:33 UTC ---
(In reply to comment #2)
> This seems to be because the libgfortran implementation uses gfc_charlen_type
> for the length of the string,

Which is the correct thing the do!

> but the frontend passes the address of an
> integer(8) variable

Which is wrong. This is fixed by the patch:

Index: trans-intrinsic.c
===================================================================
--- trans-intrinsic.c    (revision 170612)
+++ trans-intrinsic.c    (working copy)
@@ -1501,7 +1501,7 @@
   args = XALLOCAVEC (tree, num_args);

   var = gfc_create_var (pchar_type_node, "pstr");
-  len = gfc_create_var (gfc_get_int_type (8), "len");
+  len = gfc_create_var (gfc_charlen_type_node, "len");

   gfc_conv_intrinsic_function_args (se, expr, &args[2], num_args - 2);
   args[0] = gfc_build_addr_expr (NULL_TREE, var);


> If not before, perhaps something to fix when/if we change to use size_t for
> string lengths, see http://gcc.gnu.org/wiki/LibgfortranAbiCleanup

Just as a remark: you're not going to use size_t, but the signed ssize_t,
right?

Reply via email to