diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/fortran/trans-array.c | 7 | ||||
-rw-r--r-- | gcc/fortran/trans-intrinsic.c | 22 | ||||
-rw-r--r-- | gcc/fortran/trans-stmt.c | 3 |
4 files changed, 26 insertions, 14 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 439eae5..bb3e708 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,11 @@ +2012-11-17 Jakub Jelinek <jakub@redhat.com> + + PR fortran/55341 + * trans-intrinsic.c (gfc_conv_intrinsic_transfer): Convert last + argument to memcpy to size_type_node type. + * trans-stmt.c (gfc_conv_elemental_dependencies): Likewise. + * trasn-array.c (duplicate_allocatable): Likewise. + 2012-11-16 Janus Weil <janus@gcc.gnu.org> PR fortran/55297 diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c index 26f0523..fc628ca 100644 --- a/gcc/fortran/trans-array.c +++ b/gcc/fortran/trans-array.c @@ -7341,8 +7341,8 @@ duplicate_allocatable (tree dest, tree src, tree type, int rank, } tmp = builtin_decl_explicit (BUILT_IN_MEMCPY); - tmp = build_call_expr_loc (input_location, tmp, 3, - dest, src, size); + tmp = build_call_expr_loc (input_location, tmp, 3, dest, src, + fold_convert (size_type_node, size)); } else { @@ -7367,7 +7367,8 @@ duplicate_allocatable (tree dest, tree src, tree type, int rank, tmp = builtin_decl_explicit (BUILT_IN_MEMCPY); tmp = build_call_expr_loc (input_location, tmp, 3, gfc_conv_descriptor_data_get (dest), - gfc_conv_descriptor_data_get (src), size); + gfc_conv_descriptor_data_get (src), + fold_convert (size_type_node, size)); } gfc_add_expr_to_block (&block, tmp); diff --git a/gcc/fortran/trans-intrinsic.c b/gcc/fortran/trans-intrinsic.c index b101cb4..a31284e 100644 --- a/gcc/fortran/trans-intrinsic.c +++ b/gcc/fortran/trans-intrinsic.c @@ -5600,14 +5600,16 @@ gfc_conv_intrinsic_transfer (gfc_se * se, gfc_expr * expr) tmp = fold_convert (pvoid_type_node, tmp); /* Use memcpy to do the transfer. */ - tmp = build_call_expr_loc (input_location, - builtin_decl_explicit (BUILT_IN_MEMCPY), - 3, - tmp, - fold_convert (pvoid_type_node, source), - fold_build2_loc (input_location, MIN_EXPR, - gfc_array_index_type, - size_bytes, source_bytes)); + tmp + = build_call_expr_loc (input_location, + builtin_decl_explicit (BUILT_IN_MEMCPY), 3, tmp, + fold_convert (pvoid_type_node, source), + fold_convert (size_type_node, + fold_build2_loc (input_location, + MIN_EXPR, + gfc_array_index_type, + size_bytes, + source_bytes))); gfc_add_expr_to_block (&se->pre, tmp); se->expr = info->descriptor; @@ -5649,7 +5651,7 @@ scalar_transfer: builtin_decl_explicit (BUILT_IN_MEMCPY), 3, fold_convert (pvoid_type_node, tmpdecl), fold_convert (pvoid_type_node, ptr), - extent); + fold_convert (size_type_node, extent)); gfc_add_expr_to_block (&block, tmp); indirect = gfc_finish_block (&block); @@ -5687,7 +5689,7 @@ scalar_transfer: builtin_decl_explicit (BUILT_IN_MEMCPY), 3, fold_convert (pvoid_type_node, tmp), fold_convert (pvoid_type_node, ptr), - extent); + fold_convert (size_type_node, extent)); gfc_add_expr_to_block (&se->pre, tmp); /* For CLASS results, set the _vptr. */ diff --git a/gcc/fortran/trans-stmt.c b/gcc/fortran/trans-stmt.c index b95c8da..de22ce0 100644 --- a/gcc/fortran/trans-stmt.c +++ b/gcc/fortran/trans-stmt.c @@ -337,7 +337,8 @@ gfc_conv_elemental_dependencies (gfc_se * se, gfc_se * loopse, tmp = gfc_conv_descriptor_data_get (tmp); tmp = build_call_expr_loc (input_location, builtin_decl_explicit (BUILT_IN_MEMCPY), - 3, tmp, data, size); + 3, tmp, data, + fold_convert (size_type_node, size)); } gfc_add_expr_to_block (&se->post, tmp); |