diff options
author | Paul Thomas <pault@gcc.gnu.org> | 2006-09-18 06:24:54 +0000 |
---|---|---|
committer | Paul Thomas <pault@gcc.gnu.org> | 2006-09-18 06:24:54 +0000 |
commit | 80f2bb6e3af5a9ae2576f86258cdafa7fe1ff384 (patch) | |
tree | 795e77314928c5d566f1e60e6c2032bc761cf1e5 /gcc/fortran/iresolve.c | |
parent | 9adc3dc789b21d98f700141801cafec29489d92c (diff) | |
download | gcc-80f2bb6e3af5a9ae2576f86258cdafa7fe1ff384.zip gcc-80f2bb6e3af5a9ae2576f86258cdafa7fe1ff384.tar.gz gcc-80f2bb6e3af5a9ae2576f86258cdafa7fe1ff384.tar.bz2 |
re PR fortran/29060 (spread causes ICE in gfc_trans_array_constructor)
2006-09-18 Paul Thomas <pault@gcc.gnu.org>
PR fortran/29060
* iresolve.c (resolve_spread): Build shape for result if the
source shape is available and dim and ncopies are constants.
PR fortran/28817
PR fortran/21918
* trans-decl.c (generate_local_decl): Change from 'warning' to
'gfc_warning' to have line numbers correctly reported.
2006-09-18 Paul Thomas <pault@gcc.gnu.org>
PR fortran/29060
* gfortran.dg/spread_shape_1.f90: New test.
From-SVN: r117014
Diffstat (limited to 'gcc/fortran/iresolve.c')
-rw-r--r-- | gcc/fortran/iresolve.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/gcc/fortran/iresolve.c b/gcc/fortran/iresolve.c index a9a9858..c72bf9f 100644 --- a/gcc/fortran/iresolve.c +++ b/gcc/fortran/iresolve.c @@ -1885,6 +1885,23 @@ gfc_resolve_spread (gfc_expr * f, gfc_expr * source, ? PREFIX("spread_char") : PREFIX("spread")); + if (dim && gfc_is_constant_expr (dim) + && ncopies && gfc_is_constant_expr (ncopies) + && source->shape[0]) + { + int i, idim; + idim = mpz_get_ui (dim->value.integer); + f->shape = gfc_get_shape (f->rank); + for (i = 0; i < (idim - 1); i++) + mpz_init_set (f->shape[i], source->shape[i]); + + mpz_init_set (f->shape[idim - 1], ncopies->value.integer); + + for (i = idim; i < f->rank ; i++) + mpz_init_set (f->shape[i], source->shape[i-1]); + } + + gfc_resolve_dim_arg (dim); gfc_resolve_index (ncopies, 1); } |