aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/check.c
diff options
context:
space:
mode:
authorJanus Weil <janus@gcc.gnu.org>2013-04-22 21:14:22 +0200
committerJanus Weil <janus@gcc.gnu.org>2013-04-22 21:14:22 +0200
commite361d18df77ed06994441e0b0d0c33409ede5b63 (patch)
treec9169197a1c8013e938b0c13132d766b4bcffb84 /gcc/fortran/check.c
parentcefb0898ebc75fefdd2cf93d39e6ccbb1aa7ee51 (diff)
downloadgcc-e361d18df77ed06994441e0b0d0c33409ede5b63.zip
gcc-e361d18df77ed06994441e0b0d0c33409ede5b63.tar.gz
gcc-e361d18df77ed06994441e0b0d0c33409ede5b63.tar.bz2
re PR fortran/53685 (surprising warns about transfer with explicit character range)
2013-04-22 Janus Weil <janus@gcc.gnu.org> PR fortran/53685 PR fortran/57022 * check.c (gfc_calculate_transfer_sizes): Fix for array-valued SOURCE expressions. * simplify.c (gfc_simplify_sizeof,gfc_simplify_storage_size): Get rid of special treatment for EXPR_ARRAY. * target-memory.h (gfc_element_size): New prototype. * target-memory.c (size_array): Remove. (gfc_element_size): New function. (gfc_target_expr_size): Modified to always return the full size of the expression. 2013-04-22 Janus Weil <janus@gcc.gnu.org> PR fortran/53685 PR fortran/57022 * gfortran.dg/transfer_check_4.f90: New. From-SVN: r198155
Diffstat (limited to 'gcc/fortran/check.c')
-rw-r--r--gcc/fortran/check.c12
1 files changed, 1 insertions, 11 deletions
diff --git a/gcc/fortran/check.c b/gcc/fortran/check.c
index 870ca75..e531deb 100644
--- a/gcc/fortran/check.c
+++ b/gcc/fortran/check.c
@@ -4446,8 +4446,6 @@ gfc_calculate_transfer_sizes (gfc_expr *source, gfc_expr *mold, gfc_expr *size,
size_t *result_length_p)
{
size_t result_elt_size;
- mpz_t tmp;
- gfc_expr *mold_element;
if (source->expr_type == EXPR_FUNCTION)
return false;
@@ -4456,20 +4454,12 @@ gfc_calculate_transfer_sizes (gfc_expr *source, gfc_expr *mold, gfc_expr *size,
return false;
/* Calculate the size of the source. */
- if (source->expr_type == EXPR_ARRAY
- && !gfc_array_size (source, &tmp))
- return false;
-
*source_size = gfc_target_expr_size (source);
if (*source_size == 0)
return false;
- mold_element = mold->expr_type == EXPR_ARRAY
- ? gfc_constructor_first (mold->value.constructor)->expr
- : mold;
-
/* Determine the size of the element. */
- result_elt_size = gfc_target_expr_size (mold_element);
+ result_elt_size = gfc_element_size (mold);
if (result_elt_size == 0)
return false;