diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 13ddef193dc..36da100bf1b 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,8 @@ +2008-08-31 Richard Guenther + + * trans-expr.c (gfc_trans_string_copy): Use the correct types + to compute slen and dlen. + 2008-08-31 Daniel Kraft * gfortran.h (enum gfc_statement): New entry `ST_GENERIC'. diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c index 6c0897897aa..8ebda494588 100644 --- a/gcc/fortran/trans-expr.c +++ b/gcc/fortran/trans-expr.c @@ -3066,10 +3066,12 @@ gfc_trans_string_copy (stmtblock_t * block, tree dlength, tree dest, /* For non-default character kinds, we have to multiply the string length by the base type size. */ chartype = gfc_get_char_type (dkind); - slen = fold_build2 (MULT_EXPR, size_type_node, slen, - TYPE_SIZE_UNIT (chartype)); - dlen = fold_build2 (MULT_EXPR, size_type_node, dlen, - TYPE_SIZE_UNIT (chartype)); + slen = fold_build2 (MULT_EXPR, size_type_node, + fold_convert (size_type_node, slen), + fold_convert (size_type_node, TYPE_SIZE_UNIT (chartype))); + dlen = fold_build2 (MULT_EXPR, size_type_node, + fold_convert (size_type_node, dlen), + fold_convert (size_type_node, TYPE_SIZE_UNIT (chartype))); if (dlength) dest = fold_convert (pvoid_type_node, dest);