aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/array.c
diff options
context:
space:
mode:
authorAlessandro Fanfarillo <fanfarillo.gcc@gmail.com>2016-07-05 09:33:06 -0600
committerAlessandro Fanfarillo <afanfa@gcc.gnu.org>2016-07-05 09:33:06 -0600
commit20d0bfcefd6caf09c23113732edd98241a46af56 (patch)
treeec27aaef1b5d3d90fcdc003d50d5ed2169894af8 /gcc/fortran/array.c
parent1174b21b388ba06e8cebfaa2d0a4cc7a026475ad (diff)
downloadgcc-20d0bfcefd6caf09c23113732edd98241a46af56.zip
gcc-20d0bfcefd6caf09c23113732edd98241a46af56.tar.gz
gcc-20d0bfcefd6caf09c23113732edd98241a46af56.tar.bz2
Second review of STAT= patch + tests
From-SVN: r238007
Diffstat (limited to 'gcc/fortran/array.c')
-rw-r--r--gcc/fortran/array.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/gcc/fortran/array.c b/gcc/fortran/array.c
index 1430e80..03c8b17 100644
--- a/gcc/fortran/array.c
+++ b/gcc/fortran/array.c
@@ -156,6 +156,8 @@ gfc_match_array_ref (gfc_array_ref *ar, gfc_array_spec *as, int init,
{
match m;
bool matched_bracket = false;
+ gfc_expr *tmp;
+ bool stat_just_seen = false;
memset (ar, '\0', sizeof (*ar));
@@ -220,12 +222,27 @@ coarray:
return MATCH_ERROR;
}
+ ar->stat = NULL;
+
for (ar->codimen = 0; ar->codimen + ar->dimen < GFC_MAX_DIMENSIONS; ar->codimen++)
{
m = match_subscript (ar, init, true);
if (m == MATCH_ERROR)
return MATCH_ERROR;
+ stat_just_seen = false;
+ if (gfc_match(" , stat = %e",&tmp) == MATCH_YES && ar->stat == NULL)
+ {
+ ar->stat = tmp;
+ stat_just_seen = true;
+ }
+
+ if (ar->stat && !stat_just_seen)
+ {
+ gfc_error ("STAT= attribute in %C misplaced");
+ return MATCH_ERROR;
+ }
+
if (gfc_match_char (']') == MATCH_YES)
{
ar->codimen++;