aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/check.c
diff options
context:
space:
mode:
authorThomas Koenig <tkoenig@gcc.gnu.org>2017-11-04 13:20:32 +0000
committerThomas Koenig <tkoenig@gcc.gnu.org>2017-11-04 13:20:32 +0000
commit9a3d38f6dcacbfb9c8ced01d870f35864d765ba7 (patch)
treef05ef1721791d75acf575c83b92dbc3ed7317a19 /gcc/fortran/check.c
parent77dacf9da6fe475efc87d63d7ea6fde66f097afc (diff)
downloadgcc-9a3d38f6dcacbfb9c8ced01d870f35864d765ba7.zip
gcc-9a3d38f6dcacbfb9c8ced01d870f35864d765ba7.tar.gz
gcc-9a3d38f6dcacbfb9c8ced01d870f35864d765ba7.tar.bz2
re PR fortran/29600 ([F03] MINLOC and MAXLOC take an optional KIND argument)
2017-11-04 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/29600 * gfortran.h (gfc_check_f): Replace fm3l with fm4l. * intrinsic.h (gfc_resolve_maxloc): Add gfc_expr * to argument list in protoytpe. (gfc_resolve_minloc): Likewise. * check.c (gfc_check_minloc_maxloc): Handle kind argument. * intrinsic.c (add_sym_3_ml): Rename to (add_sym_4_ml): and handle kind argument. (add_function): Replace add_sym_3ml with add_sym_4ml and add extra arguments for maxloc and minloc. (check_specific): Change use of check.f3ml with check.f4ml. * iresolve.c (gfc_resolve_maxloc): Handle kind argument. If the kind is smaller than the smallest library version available, use gfc_default_integer_kind and convert afterwards. (gfc_resolve_minloc): Likewise. 2017-11-04 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/29600 * gfortran.dg/minmaxloc_8.f90: New test. From-SVN: r254405
Diffstat (limited to 'gcc/fortran/check.c')
-rw-r--r--gcc/fortran/check.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/gcc/fortran/check.c b/gcc/fortran/check.c
index 759c15a..914dbf9 100644
--- a/gcc/fortran/check.c
+++ b/gcc/fortran/check.c
@@ -3179,7 +3179,7 @@ gfc_check_matmul (gfc_expr *matrix_a, gfc_expr *matrix_b)
bool
gfc_check_minloc_maxloc (gfc_actual_arglist *ap)
{
- gfc_expr *a, *m, *d;
+ gfc_expr *a, *m, *d, *k;
a = ap->expr;
if (!int_or_real_check (a, 0) || !array_check (a, 0))
@@ -3187,6 +3187,7 @@ gfc_check_minloc_maxloc (gfc_actual_arglist *ap)
d = ap->next->expr;
m = ap->next->next->expr;
+ k = ap->next->next->next->expr;
if (m == NULL && d != NULL && d->ts.type == BT_LOGICAL
&& ap->next->name == NULL)
@@ -3214,6 +3215,9 @@ gfc_check_minloc_maxloc (gfc_actual_arglist *ap)
gfc_current_intrinsic))
return false;
+ if (!kind_check (k, 1, BT_INTEGER))
+ return false;
+
return true;
}