diff options
author | Alessandro Fanfarillo <fanfarillo.gcc@gmail.com> | 2012-07-26 02:35:55 -0600 |
---|---|---|
committer | Tobias Burnus <burnus@gcc.gnu.org> | 2012-07-26 10:35:55 +0200 |
commit | b573c9d6f4a2e4692492894266d1d936b8bd35af (patch) | |
tree | 4262e3abbe0c445f21acc4975be1f3304a66a226 /gcc/fortran/module.c | |
parent | 1fae9801e45958493870828b44c64726609c7500 (diff) | |
download | gcc-b573c9d6f4a2e4692492894266d1d936b8bd35af.zip gcc-b573c9d6f4a2e4692492894266d1d936b8bd35af.tar.gz gcc-b573c9d6f4a2e4692492894266d1d936b8bd35af.tar.bz2 |
module.c (mio_array_spec): Don't read as->lower for assumed-rank arrays.
2012-07-26 Alessandro Fanfarillo <fanfarillo.gcc@gmail.com>
Tobias Burnus <burnus@net-b.de>
* module.c (mio_array_spec): Don't read as->lower for
assumed-rank arrays.
Co-Authored-By: Tobias Burnus <burnus@net-b.de>
From-SVN: r189881
Diffstat (limited to 'gcc/fortran/module.c')
-rw-r--r-- | gcc/fortran/module.c | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/gcc/fortran/module.c b/gcc/fortran/module.c index a3b9088..a4ff199 100644 --- a/gcc/fortran/module.c +++ b/gcc/fortran/module.c @@ -2359,9 +2359,15 @@ mio_array_spec (gfc_array_spec **asp) if (iomode == IO_OUTPUT) { + int rank; + if (*asp == NULL) goto done; as = *asp; + + /* mio_integer expects nonnegative values. */ + rank = as->rank > 0 ? as->rank : 0; + mio_integer (&rank); } else { @@ -2372,20 +2378,23 @@ mio_array_spec (gfc_array_spec **asp) } *asp = as = gfc_get_array_spec (); + mio_integer (&as->rank); } - mio_integer (&as->rank); mio_integer (&as->corank); as->type = MIO_NAME (array_type) (as->type, array_spec_types); + if (iomode == IO_INPUT && as->type == AS_ASSUMED_RANK) + as->rank = -1; if (iomode == IO_INPUT && as->corank) as->cotype = (as->type == AS_DEFERRED) ? AS_DEFERRED : AS_EXPLICIT; - for (i = 0; i < as->rank + as->corank; i++) - { - mio_expr (&as->lower[i]); - mio_expr (&as->upper[i]); - } + if (as->rank > 0) + for (i = 0; i < as->rank + as->corank; i++) + { + mio_expr (&as->lower[i]); + mio_expr (&as->upper[i]); + } done: mio_rparen (); |