aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/check.c
diff options
context:
space:
mode:
authorThomas Koenig <Thomas.Koenig@online.de>2006-02-14 19:25:36 +0000
committerThomas Koenig <tkoenig@gcc.gnu.org>2006-02-14 19:25:36 +0000
commitce99d59440477170c00aa9ef2c2dfacb42e6f25f (patch)
tree3d3ad82e9ba7346317222ce9dd164bc1c566f55b /gcc/fortran/check.c
parent89031799f4009b0416164a7e77a7b008e63d94ad (diff)
downloadgcc-ce99d59440477170c00aa9ef2c2dfacb42e6f25f.zip
gcc-ce99d59440477170c00aa9ef2c2dfacb42e6f25f.tar.gz
gcc-ce99d59440477170c00aa9ef2c2dfacb42e6f25f.tar.bz2
re PR fortran/25045 ([4.1 only] DIM argument of PRODUCT is not optional)
2006-02-14 Thomas Koenig <Thomas.Koenig@online.de> PR fortran/25045 * check.c (dim_check): Perform all checks if dim is optional. (gfc_check_minloc_maxloc): Use dim_check and dim_rank_check to check dim argument. (check_reduction): Likewise. 2006-02-14 Thomas Koenig <Thomas.Koenig@online.de> PR fortran/25045 * optional_dim.f90: New test. From-SVN: r110994
Diffstat (limited to 'gcc/fortran/check.c')
-rw-r--r--gcc/fortran/check.c29
1 files changed, 13 insertions, 16 deletions
diff --git a/gcc/fortran/check.c b/gcc/fortran/check.c
index dc6541c8..6d3fd3d 100644
--- a/gcc/fortran/check.c
+++ b/gcc/fortran/check.c
@@ -295,16 +295,8 @@ variable_check (gfc_expr * e, int n)
static try
dim_check (gfc_expr * dim, int n, int optional)
{
- if (optional)
- {
- if (dim == NULL)
- return SUCCESS;
-
- if (nonoptional_check (dim, n) == FAILURE)
- return FAILURE;
-
- return SUCCESS;
- }
+ if (optional && dim == NULL)
+ return SUCCESS;
if (dim == NULL)
{
@@ -319,6 +311,9 @@ dim_check (gfc_expr * dim, int n, int optional)
if (scalar_check (dim, n) == FAILURE)
return FAILURE;
+ if (nonoptional_check (dim, n) == FAILURE)
+ return FAILURE;
+
return SUCCESS;
}
@@ -1578,9 +1573,10 @@ gfc_check_minloc_maxloc (gfc_actual_arglist * ap)
ap->next->next->expr = m;
}
- if (d != NULL
- && (scalar_check (d, 1) == FAILURE
- || type_check (d, 1, BT_INTEGER) == FAILURE))
+ if (dim_check (d, 1, 1) == FAILURE)
+ return FAILURE;
+
+ if (dim_rank_check (d, a, 0) == FAILURE)
return FAILURE;
if (m != NULL && type_check (m, 2, BT_LOGICAL) == FAILURE)
@@ -1634,9 +1630,10 @@ check_reduction (gfc_actual_arglist * ap)
ap->next->next->expr = m;
}
- if (d != NULL
- && (scalar_check (d, 1) == FAILURE
- || type_check (d, 1, BT_INTEGER) == FAILURE))
+ if (dim_check (d, 1, 1) == FAILURE)
+ return FAILURE;
+
+ if (dim_rank_check (d, a, 0) == FAILURE)
return FAILURE;
if (m != NULL && type_check (m, 2, BT_LOGICAL) == FAILURE)