diff options
-rw-r--r-- | gcc/fortran/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/fortran/trans-intrinsic.c | 7 | ||||
-rw-r--r-- | gcc/fortran/trans-io.c | 3 |
3 files changed, 14 insertions, 3 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 786abca..20bf60b 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2007-07-12 Richard Guenther <rguenther@suse.de> + + * trans-intrinsic.c (gfc_conv_intrinsic_repeat): Convert + arguments to gfc_charlen_type_node. + * trans-io.c (gfc_convert_array_to_string): Convert type + size to gfc_array_index_type. + 2007-07-12 Daniel Franke <franke.daniel@gmail.com> PR fortran/32634 diff --git a/gcc/fortran/trans-intrinsic.c b/gcc/fortran/trans-intrinsic.c index c4354b1..d6209c3 100644 --- a/gcc/fortran/trans-intrinsic.c +++ b/gcc/fortran/trans-intrinsic.c @@ -3570,7 +3570,9 @@ gfc_conv_intrinsic_repeat (gfc_se * se, gfc_expr * expr) &se->pre, &expr->where); /* Compute the destination length. */ - dlen = fold_build2 (MULT_EXPR, gfc_charlen_type_node, slen, ncopies); + dlen = fold_build2 (MULT_EXPR, gfc_charlen_type_node, + fold_convert (gfc_charlen_type_node, slen), + fold_convert (gfc_charlen_type_node, ncopies)); type = gfc_get_character_type (expr->ts.kind, expr->ts.cl); dest = gfc_conv_string_tmp (se, build_pointer_type (type), dlen); @@ -3594,7 +3596,8 @@ gfc_conv_intrinsic_repeat (gfc_se * se, gfc_expr * expr) gfc_add_expr_to_block (&body, tmp); /* Call memmove (dest + (i*slen), src, slen). */ - tmp = fold_build2 (MULT_EXPR, gfc_charlen_type_node, slen, + tmp = fold_build2 (MULT_EXPR, gfc_charlen_type_node, + fold_convert (gfc_charlen_type_node, slen), fold_convert (gfc_charlen_type_node, count)); tmp = fold_build2 (POINTER_PLUS_EXPR, pchar_type_node, fold_convert (pchar_type_node, dest), diff --git a/gcc/fortran/trans-io.c b/gcc/fortran/trans-io.c index 00d0ebd..4d7695e 100644 --- a/gcc/fortran/trans-io.c +++ b/gcc/fortran/trans-io.c @@ -623,7 +623,8 @@ gfc_convert_array_to_string (gfc_se * se, gfc_expr * e) } tmp = TYPE_SIZE_UNIT (gfc_get_element_type (type)); - size = fold_build2 (MULT_EXPR, gfc_array_index_type, size, tmp); + size = fold_build2 (MULT_EXPR, gfc_array_index_type, size, + fold_convert (gfc_array_index_type, tmp)); se->string_length = fold_convert (gfc_charlen_type_node, size); } |