diff options
author | Thomas Koenig <Thomas.Koenig@online.de> | 2006-02-14 19:25:36 +0000 |
---|---|---|
committer | Thomas Koenig <tkoenig@gcc.gnu.org> | 2006-02-14 19:25:36 +0000 |
commit | ce99d59440477170c00aa9ef2c2dfacb42e6f25f (patch) | |
tree | 3d3ad82e9ba7346317222ce9dd164bc1c566f55b /gcc/fortran/check.c | |
parent | 89031799f4009b0416164a7e77a7b008e63d94ad (diff) | |
download | gcc-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.c | 29 |
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) |