aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2007-07-12 09:30:27 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2007-07-12 09:30:27 +0000
commit553b66ad1d40ff948dfe1215e38787c1799110ff (patch)
tree29c5b917bfe31c769ff547e9990987839016560a
parent176be57beaed92f771fd7c86007363e17f65324e (diff)
downloadgcc-553b66ad1d40ff948dfe1215e38787c1799110ff.zip
gcc-553b66ad1d40ff948dfe1215e38787c1799110ff.tar.gz
gcc-553b66ad1d40ff948dfe1215e38787c1799110ff.tar.bz2
trans-intrinsic.c (gfc_conv_intrinsic_repeat): Convert arguments to gfc_charlen_type_node.
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. From-SVN: r126575
-rw-r--r--gcc/fortran/ChangeLog7
-rw-r--r--gcc/fortran/trans-intrinsic.c7
-rw-r--r--gcc/fortran/trans-io.c3
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);
}