http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54818
--- Comment #6 from Tobias Burnus <burnus at gcc dot gnu.org> 2012-12-19 09:03:46 UTC --- My patch is wrong. It might lead to passing an integer(8) instead of integer(4) as hidden argument when calling a procedure. The proper way it to use gfc_charlen_type_node. However, the following works: --- a/gcc/fortran/trans-intrinsic.c +++ b/gcc/fortran/trans-intrinsic.c @@ -5664,3 +5664,3 @@ scalar_transfer: se->expr = tmpdecl; - se->string_length = dest_word_len; + se->string_length = fold_convert (gfc_charlen_type_node, dest_word_len); }