diff options
author | Janus Weil <janus@gcc.gnu.org> | 2013-04-22 21:14:22 +0200 |
---|---|---|
committer | Janus Weil <janus@gcc.gnu.org> | 2013-04-22 21:14:22 +0200 |
commit | e361d18df77ed06994441e0b0d0c33409ede5b63 (patch) | |
tree | c9169197a1c8013e938b0c13132d766b4bcffb84 /gcc/fortran/simplify.c | |
parent | cefb0898ebc75fefdd2cf93d39e6ccbb1aa7ee51 (diff) | |
download | gcc-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.c | 20 |
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; |