aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/module.c
diff options
context:
space:
mode:
authorAlessandro Fanfarillo <fanfarillo.gcc@gmail.com>2012-07-26 02:35:55 -0600
committerTobias Burnus <burnus@gcc.gnu.org>2012-07-26 10:35:55 +0200
commitb573c9d6f4a2e4692492894266d1d936b8bd35af (patch)
tree4262e3abbe0c445f21acc4975be1f3304a66a226 /gcc/fortran/module.c
parent1fae9801e45958493870828b44c64726609c7500 (diff)
downloadgcc-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.c21
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 ();