aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/simplify.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/simplify.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/simplify.c')
-rw-r--r--gcc/fortran/simplify.c20
1 files changed, 2 insertions, 18 deletions
diff --git a/gcc/fortran/simplify.c b/gcc/fortran/simplify.c
index 5dcbf02..02505db 100644
--- a/gcc/fortran/simplify.c
+++ b/gcc/fortran/simplify.c
@@ -5674,14 +5674,6 @@ gfc_simplify_sizeof (gfc_expr *x)
&x->where);
mpz_set_si (result->value.integer, gfc_target_expr_size (x));
- /* gfc_target_expr_size already takes the array size for array constructors
- into account. */
- if (x->rank && x->expr_type != EXPR_ARRAY)
- {
- mpz_mul (result->value.integer, result->value.integer, array_size);
- mpz_clear (array_size);
- }
-
return result;
}
@@ -5694,7 +5686,6 @@ gfc_simplify_storage_size (gfc_expr *x,
{
gfc_expr *result = NULL;
int k;
- size_t elt_size;
if (x->ts.type == BT_CLASS || x->ts.deferred)
return NULL;
@@ -5708,17 +5699,10 @@ gfc_simplify_storage_size (gfc_expr *x,
if (k == -1)
return &gfc_bad_expr;
- if (x->expr_type == EXPR_ARRAY)
- {
- gfc_constructor *c = gfc_constructor_first (x->value.constructor);
- elt_size = gfc_target_expr_size (c->expr);
- }
- else
- elt_size = gfc_target_expr_size (x);
-
result = gfc_get_constant_expr (BT_INTEGER, gfc_index_integer_kind,
&x->where);
- mpz_set_si (result->value.integer, elt_size);
+
+ mpz_set_si (result->value.integer, gfc_element_size (x));
mpz_mul_ui (result->value.integer, result->value.integer, BITS_PER_UNIT);
return result;