2 Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007
3 Free Software Foundation, Inc.
4 Contributed by Andy Vaught & Katherine Holcomb
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 3, or (at your option) any later
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3. If not see
20 <http://www.gnu.org/licenses/>. */
23 /* These functions check to see if an argument list is compatible with
24 a particular intrinsic function or subroutine. Presence of
25 required arguments has already been established, the argument list
26 has been sorted into the right order and has NULL arguments in the
27 correct places for missing optional arguments. */
33 #include "intrinsic.h"
36 /* Make sure an expression is a scalar. */
39 scalar_check (gfc_expr *e, int n)
44 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a scalar",
45 gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &e->where);
51 /* Check the type of an expression. */
54 type_check (gfc_expr *e, int n, bt type)
56 if (e->ts.type == type)
59 gfc_error ("'%s' argument of '%s' intrinsic at %L must be %s",
60 gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &e->where,
61 gfc_basic_typename (type));
67 /* Check that the expression is a numeric type. */
70 numeric_check (gfc_expr *e, int n)
72 if (gfc_numeric_ts (&e->ts))
75 /* If the expression has not got a type, check if its namespace can
76 offer a default type. */
77 if ((e->expr_type == EXPR_VARIABLE || e->expr_type == EXPR_VARIABLE)
78 && e->symtree->n.sym->ts.type == BT_UNKNOWN
79 && gfc_set_default_type (e->symtree->n.sym, 0,
80 e->symtree->n.sym->ns) == SUCCESS
81 && gfc_numeric_ts (&e->symtree->n.sym->ts))
83 e->ts = e->symtree->n.sym->ts;
87 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a numeric type",
88 gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &e->where);
94 /* Check that an expression is integer or real. */
97 int_or_real_check (gfc_expr *e, int n)
99 if (e->ts.type != BT_INTEGER && e->ts.type != BT_REAL)
101 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
102 "or REAL", gfc_current_intrinsic_arg[n],
103 gfc_current_intrinsic, &e->where);
111 /* Check that an expression is real or complex. */
114 real_or_complex_check (gfc_expr *e, int n)
116 if (e->ts.type != BT_REAL && e->ts.type != BT_COMPLEX)
118 gfc_error ("'%s' argument of '%s' intrinsic at %L must be REAL "
119 "or COMPLEX", gfc_current_intrinsic_arg[n],
120 gfc_current_intrinsic, &e->where);
128 /* Check that the expression is an optional constant integer
129 and that it specifies a valid kind for that type. */
132 kind_check (gfc_expr *k, int n, bt type)
139 if (type_check (k, n, BT_INTEGER) == FAILURE)
142 if (scalar_check (k, n) == FAILURE)
145 if (k->expr_type != EXPR_CONSTANT)
147 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a constant",
148 gfc_current_intrinsic_arg[n], gfc_current_intrinsic,
153 if (gfc_extract_int (k, &kind) != NULL
154 || gfc_validate_kind (type, kind, true) < 0)
156 gfc_error ("Invalid kind for %s at %L", gfc_basic_typename (type),
165 /* Make sure the expression is a double precision real. */
168 double_check (gfc_expr *d, int n)
170 if (type_check (d, n, BT_REAL) == FAILURE)
173 if (d->ts.kind != gfc_default_double_kind)
175 gfc_error ("'%s' argument of '%s' intrinsic at %L must be double "
176 "precision", gfc_current_intrinsic_arg[n],
177 gfc_current_intrinsic, &d->where);
185 /* Make sure the expression is a logical array. */
188 logical_array_check (gfc_expr *array, int n)
190 if (array->ts.type != BT_LOGICAL || array->rank == 0)
192 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a logical "
193 "array", gfc_current_intrinsic_arg[n], gfc_current_intrinsic,
202 /* Make sure an expression is an array. */
205 array_check (gfc_expr *e, int n)
210 gfc_error ("'%s' argument of '%s' intrinsic at %L must be an array",
211 gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &e->where);
217 /* Make sure two expressions have the same type. */
220 same_type_check (gfc_expr *e, int n, gfc_expr *f, int m)
222 if (gfc_compare_types (&e->ts, &f->ts))
225 gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same type "
226 "and kind as '%s'", gfc_current_intrinsic_arg[m],
227 gfc_current_intrinsic, &f->where, gfc_current_intrinsic_arg[n]);
233 /* Make sure that an expression has a certain (nonzero) rank. */
236 rank_check (gfc_expr *e, int n, int rank)
241 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank %d",
242 gfc_current_intrinsic_arg[n], gfc_current_intrinsic,
249 /* Make sure a variable expression is not an optional dummy argument. */
252 nonoptional_check (gfc_expr *e, int n)
254 if (e->expr_type == EXPR_VARIABLE && e->symtree->n.sym->attr.optional)
256 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be OPTIONAL",
257 gfc_current_intrinsic_arg[n], gfc_current_intrinsic,
261 /* TODO: Recursive check on nonoptional variables? */
267 /* Check that an expression has a particular kind. */
270 kind_value_check (gfc_expr *e, int n, int k)
275 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of kind %d",
276 gfc_current_intrinsic_arg[n], gfc_current_intrinsic,
283 /* Make sure an expression is a variable. */
286 variable_check (gfc_expr *e, int n)
288 if ((e->expr_type == EXPR_VARIABLE
289 && e->symtree->n.sym->attr.flavor != FL_PARAMETER)
290 || (e->expr_type == EXPR_FUNCTION
291 && e->symtree->n.sym->result == e->symtree->n.sym))
294 if (e->expr_type == EXPR_VARIABLE
295 && e->symtree->n.sym->attr.intent == INTENT_IN)
297 gfc_error ("'%s' argument of '%s' intrinsic at %L cannot be INTENT(IN)",
298 gfc_current_intrinsic_arg[n], gfc_current_intrinsic,
303 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a variable",
304 gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &e->where);
310 /* Check the common DIM parameter for correctness. */
313 dim_check (gfc_expr *dim, int n, bool optional)
318 if (type_check (dim, n, BT_INTEGER) == FAILURE)
321 if (scalar_check (dim, n) == FAILURE)
324 if (!optional && nonoptional_check (dim, n) == FAILURE)
331 /* If a DIM parameter is a constant, make sure that it is greater than
332 zero and less than or equal to the rank of the given array. If
333 allow_assumed is zero then dim must be less than the rank of the array
334 for assumed size arrays. */
337 dim_rank_check (gfc_expr *dim, gfc_expr *array, int allow_assumed)
342 if (dim->expr_type != EXPR_CONSTANT || array->expr_type != EXPR_VARIABLE)
345 ar = gfc_find_array_ref (array);
347 if (ar->as->type == AS_ASSUMED_SIZE
349 && ar->type != AR_ELEMENT
350 && ar->type != AR_SECTION)
353 if (mpz_cmp_ui (dim->value.integer, 1) < 0
354 || mpz_cmp_ui (dim->value.integer, rank) > 0)
356 gfc_error ("'dim' argument of '%s' intrinsic at %L is not a valid "
357 "dimension index", gfc_current_intrinsic, &dim->where);
366 /* Compare the size of a along dimension ai with the size of b along
367 dimension bi, returning 0 if they are known not to be identical,
368 and 1 if they are identical, or if this cannot be determined. */
371 identical_dimen_shape (gfc_expr *a, int ai, gfc_expr *b, int bi)
373 mpz_t a_size, b_size;
376 gcc_assert (a->rank > ai);
377 gcc_assert (b->rank > bi);
381 if (gfc_array_dimen_size (a, ai, &a_size) == SUCCESS)
383 if (gfc_array_dimen_size (b, bi, &b_size) == SUCCESS)
385 if (mpz_cmp (a_size, b_size) != 0)
396 /* Check whether two character expressions have the same length;
397 returns SUCCESS if they have or if the length cannot be determined. */
400 check_same_strlen (const gfc_expr *a, const gfc_expr *b, const char *name)
405 if (a->ts.cl && a->ts.cl->length
406 && a->ts.cl->length->expr_type == EXPR_CONSTANT)
407 len_a = mpz_get_si (a->ts.cl->length->value.integer);
408 else if (a->expr_type == EXPR_CONSTANT
409 && (a->ts.cl == NULL || a->ts.cl->length == NULL))
410 len_a = a->value.character.length;
414 if (b->ts.cl && b->ts.cl->length
415 && b->ts.cl->length->expr_type == EXPR_CONSTANT)
416 len_b = mpz_get_si (b->ts.cl->length->value.integer);
417 else if (b->expr_type == EXPR_CONSTANT
418 && (b->ts.cl == NULL || b->ts.cl->length == NULL))
419 len_b = b->value.character.length;
426 gfc_error ("Unequal character lengths (%ld and %ld) in %s intrinsic "
427 "at %L", len_a, len_b, name, &a->where);
432 /***** Check functions *****/
434 /* Check subroutine suitable for intrinsics taking a real argument and
435 a kind argument for the result. */
438 check_a_kind (gfc_expr *a, gfc_expr *kind, bt type)
440 if (type_check (a, 0, BT_REAL) == FAILURE)
442 if (kind_check (kind, 1, type) == FAILURE)
449 /* Check subroutine suitable for ceiling, floor and nint. */
452 gfc_check_a_ikind (gfc_expr *a, gfc_expr *kind)
454 return check_a_kind (a, kind, BT_INTEGER);
458 /* Check subroutine suitable for aint, anint. */
461 gfc_check_a_xkind (gfc_expr *a, gfc_expr *kind)
463 return check_a_kind (a, kind, BT_REAL);
468 gfc_check_abs (gfc_expr *a)
470 if (numeric_check (a, 0) == FAILURE)
478 gfc_check_achar (gfc_expr *a, gfc_expr *kind)
480 if (type_check (a, 0, BT_INTEGER) == FAILURE)
482 if (kind_check (kind, 1, BT_CHARACTER) == FAILURE)
490 gfc_check_access_func (gfc_expr *name, gfc_expr *mode)
492 if (type_check (name, 0, BT_CHARACTER) == FAILURE
493 || scalar_check (name, 0) == FAILURE)
496 if (type_check (mode, 1, BT_CHARACTER) == FAILURE
497 || scalar_check (mode, 1) == FAILURE)
505 gfc_check_all_any (gfc_expr *mask, gfc_expr *dim)
507 if (logical_array_check (mask, 0) == FAILURE)
510 if (dim_check (dim, 1, false) == FAILURE)
518 gfc_check_allocated (gfc_expr *array)
520 symbol_attribute attr;
522 if (variable_check (array, 0) == FAILURE)
525 attr = gfc_variable_attr (array, NULL);
526 if (!attr.allocatable)
528 gfc_error ("'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE",
529 gfc_current_intrinsic_arg[0], gfc_current_intrinsic,
534 if (array_check (array, 0) == FAILURE)
541 /* Common check function where the first argument must be real or
542 integer and the second argument must be the same as the first. */
545 gfc_check_a_p (gfc_expr *a, gfc_expr *p)
547 if (int_or_real_check (a, 0) == FAILURE)
550 if (a->ts.type != p->ts.type)
552 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
553 "have the same type", gfc_current_intrinsic_arg[0],
554 gfc_current_intrinsic_arg[1], gfc_current_intrinsic,
559 if (a->ts.kind != p->ts.kind)
561 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
562 &p->where) == FAILURE)
571 gfc_check_x_yd (gfc_expr *x, gfc_expr *y)
573 if (double_check (x, 0) == FAILURE || double_check (y, 1) == FAILURE)
581 gfc_check_associated (gfc_expr *pointer, gfc_expr *target)
583 symbol_attribute attr;
588 where = &pointer->where;
590 if (pointer->expr_type == EXPR_VARIABLE)
591 attr = gfc_variable_attr (pointer, NULL);
592 else if (pointer->expr_type == EXPR_FUNCTION)
593 attr = pointer->symtree->n.sym->attr;
594 else if (pointer->expr_type == EXPR_NULL)
597 gcc_assert (0); /* Pointer must be a variable or a function. */
601 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER",
602 gfc_current_intrinsic_arg[0], gfc_current_intrinsic,
607 /* Target argument is optional. */
611 where = &target->where;
612 if (target->expr_type == EXPR_NULL)
615 if (target->expr_type == EXPR_VARIABLE)
616 attr = gfc_variable_attr (target, NULL);
617 else if (target->expr_type == EXPR_FUNCTION)
618 attr = target->symtree->n.sym->attr;
621 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a pointer "
622 "or target VARIABLE or FUNCTION", gfc_current_intrinsic_arg[1],
623 gfc_current_intrinsic, &target->where);
627 if (!attr.pointer && !attr.target)
629 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER "
630 "or a TARGET", gfc_current_intrinsic_arg[1],
631 gfc_current_intrinsic, &target->where);
636 if (same_type_check (pointer, 0, target, 1) == FAILURE)
638 if (rank_check (target, 0, pointer->rank) == FAILURE)
640 if (target->rank > 0)
642 for (i = 0; i < target->rank; i++)
643 if (target->ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
645 gfc_error ("Array section with a vector subscript at %L shall not "
646 "be the target of a pointer",
656 gfc_error ("NULL pointer at %L is not permitted as actual argument "
657 "of '%s' intrinsic function", where, gfc_current_intrinsic);
664 gfc_check_atan2 (gfc_expr *y, gfc_expr *x)
666 if (type_check (y, 0, BT_REAL) == FAILURE)
668 if (same_type_check (y, 0, x, 1) == FAILURE)
675 /* BESJN and BESYN functions. */
678 gfc_check_besn (gfc_expr *n, gfc_expr *x)
680 if (type_check (n, 0, BT_INTEGER) == FAILURE)
683 if (type_check (x, 1, BT_REAL) == FAILURE)
691 gfc_check_btest (gfc_expr *i, gfc_expr *pos)
693 if (type_check (i, 0, BT_INTEGER) == FAILURE)
695 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
703 gfc_check_char (gfc_expr *i, gfc_expr *kind)
705 if (type_check (i, 0, BT_INTEGER) == FAILURE)
707 if (kind_check (kind, 1, BT_CHARACTER) == FAILURE)
715 gfc_check_chdir (gfc_expr *dir)
717 if (type_check (dir, 0, BT_CHARACTER) == FAILURE)
725 gfc_check_chdir_sub (gfc_expr *dir, gfc_expr *status)
727 if (type_check (dir, 0, BT_CHARACTER) == FAILURE)
733 if (type_check (status, 1, BT_INTEGER) == FAILURE)
736 if (scalar_check (status, 1) == FAILURE)
744 gfc_check_chmod (gfc_expr *name, gfc_expr *mode)
746 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
749 if (type_check (mode, 1, BT_CHARACTER) == FAILURE)
757 gfc_check_chmod_sub (gfc_expr *name, gfc_expr *mode, gfc_expr *status)
759 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
762 if (type_check (mode, 1, BT_CHARACTER) == FAILURE)
768 if (type_check (status, 2, BT_INTEGER) == FAILURE)
771 if (scalar_check (status, 2) == FAILURE)
779 gfc_check_cmplx (gfc_expr *x, gfc_expr *y, gfc_expr *kind)
781 if (numeric_check (x, 0) == FAILURE)
786 if (numeric_check (y, 1) == FAILURE)
789 if (x->ts.type == BT_COMPLEX)
791 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
792 "present if 'x' is COMPLEX", gfc_current_intrinsic_arg[1],
793 gfc_current_intrinsic, &y->where);
798 if (kind_check (kind, 2, BT_COMPLEX) == FAILURE)
806 gfc_check_complex (gfc_expr *x, gfc_expr *y)
808 if (x->ts.type != BT_INTEGER && x->ts.type != BT_REAL)
810 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
811 "or REAL", gfc_current_intrinsic_arg[0],
812 gfc_current_intrinsic, &x->where);
815 if (scalar_check (x, 0) == FAILURE)
818 if (y->ts.type != BT_INTEGER && y->ts.type != BT_REAL)
820 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
821 "or REAL", gfc_current_intrinsic_arg[1],
822 gfc_current_intrinsic, &y->where);
825 if (scalar_check (y, 1) == FAILURE)
833 gfc_check_count (gfc_expr *mask, gfc_expr *dim, gfc_expr *kind)
835 if (logical_array_check (mask, 0) == FAILURE)
837 if (dim_check (dim, 1, false) == FAILURE)
839 if (kind_check (kind, 2, BT_INTEGER) == FAILURE)
841 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
842 "with KIND argument at %L",
843 gfc_current_intrinsic, &kind->where) == FAILURE)
851 gfc_check_cshift (gfc_expr *array, gfc_expr *shift, gfc_expr *dim)
853 if (array_check (array, 0) == FAILURE)
856 if (array->rank == 1)
858 if (scalar_check (shift, 1) == FAILURE)
863 /* TODO: more requirements on shift parameter. */
866 if (dim_check (dim, 2, true) == FAILURE)
874 gfc_check_ctime (gfc_expr *time)
876 if (scalar_check (time, 0) == FAILURE)
879 if (type_check (time, 0, BT_INTEGER) == FAILURE)
886 try gfc_check_datan2 (gfc_expr *y, gfc_expr *x)
888 if (double_check (y, 0) == FAILURE || double_check (x, 1) == FAILURE)
895 gfc_check_dcmplx (gfc_expr *x, gfc_expr *y)
897 if (numeric_check (x, 0) == FAILURE)
902 if (numeric_check (y, 1) == FAILURE)
905 if (x->ts.type == BT_COMPLEX)
907 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
908 "present if 'x' is COMPLEX", gfc_current_intrinsic_arg[1],
909 gfc_current_intrinsic, &y->where);
919 gfc_check_dble (gfc_expr *x)
921 if (numeric_check (x, 0) == FAILURE)
929 gfc_check_digits (gfc_expr *x)
931 if (int_or_real_check (x, 0) == FAILURE)
939 gfc_check_dot_product (gfc_expr *vector_a, gfc_expr *vector_b)
941 switch (vector_a->ts.type)
944 if (type_check (vector_b, 1, BT_LOGICAL) == FAILURE)
951 if (numeric_check (vector_b, 1) == FAILURE)
956 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
957 "or LOGICAL", gfc_current_intrinsic_arg[0],
958 gfc_current_intrinsic, &vector_a->where);
962 if (rank_check (vector_a, 0, 1) == FAILURE)
965 if (rank_check (vector_b, 1, 1) == FAILURE)
968 if (! identical_dimen_shape (vector_a, 0, vector_b, 0))
970 gfc_error ("Different shape for arguments '%s' and '%s' at %L for "
971 "intrinsic 'dot_product'", gfc_current_intrinsic_arg[0],
972 gfc_current_intrinsic_arg[1], &vector_a->where);
981 gfc_check_dprod (gfc_expr *x, gfc_expr *y)
983 if (type_check (x, 0, BT_REAL) == FAILURE
984 || type_check (y, 1, BT_REAL) == FAILURE)
987 if (x->ts.kind != gfc_default_real_kind)
989 gfc_error ("'%s' argument of '%s' intrinsic at %L must be default "
990 "real", gfc_current_intrinsic_arg[0],
991 gfc_current_intrinsic, &x->where);
995 if (y->ts.kind != gfc_default_real_kind)
997 gfc_error ("'%s' argument of '%s' intrinsic at %L must be default "
998 "real", gfc_current_intrinsic_arg[1],
999 gfc_current_intrinsic, &y->where);
1008 gfc_check_eoshift (gfc_expr *array, gfc_expr *shift, gfc_expr *boundary,
1011 if (array_check (array, 0) == FAILURE)
1014 if (type_check (shift, 1, BT_INTEGER) == FAILURE)
1017 if (array->rank == 1)
1019 if (scalar_check (shift, 2) == FAILURE)
1024 /* TODO: more weird restrictions on shift. */
1027 if (boundary != NULL)
1029 if (same_type_check (array, 0, boundary, 2) == FAILURE)
1032 /* TODO: more restrictions on boundary. */
1035 if (dim_check (dim, 4, true) == FAILURE)
1042 /* A single complex argument. */
1045 gfc_check_fn_c (gfc_expr *a)
1047 if (type_check (a, 0, BT_COMPLEX) == FAILURE)
1054 /* A single real argument. */
1057 gfc_check_fn_r (gfc_expr *a)
1059 if (type_check (a, 0, BT_REAL) == FAILURE)
1065 /* A single double argument. */
1068 gfc_check_fn_d (gfc_expr *a)
1070 if (double_check (a, 0) == FAILURE)
1076 /* A single real or complex argument. */
1079 gfc_check_fn_rc (gfc_expr *a)
1081 if (real_or_complex_check (a, 0) == FAILURE)
1089 gfc_check_fnum (gfc_expr *unit)
1091 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
1094 if (scalar_check (unit, 0) == FAILURE)
1102 gfc_check_huge (gfc_expr *x)
1104 if (int_or_real_check (x, 0) == FAILURE)
1111 /* Check that the single argument is an integer. */
1114 gfc_check_i (gfc_expr *i)
1116 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1124 gfc_check_iand (gfc_expr *i, gfc_expr *j)
1126 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1129 if (type_check (j, 1, BT_INTEGER) == FAILURE)
1132 if (i->ts.kind != j->ts.kind)
1134 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
1135 &i->where) == FAILURE)
1144 gfc_check_ibclr (gfc_expr *i, gfc_expr *pos)
1146 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1149 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
1157 gfc_check_ibits (gfc_expr *i, gfc_expr *pos, gfc_expr *len)
1159 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1162 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
1165 if (type_check (len, 2, BT_INTEGER) == FAILURE)
1173 gfc_check_ibset (gfc_expr *i, gfc_expr *pos)
1175 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1178 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
1186 gfc_check_ichar_iachar (gfc_expr *c, gfc_expr *kind)
1190 if (type_check (c, 0, BT_CHARACTER) == FAILURE)
1193 if (kind_check (kind, 1, BT_INTEGER) == FAILURE)
1196 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
1197 "with KIND argument at %L",
1198 gfc_current_intrinsic, &kind->where) == FAILURE)
1201 if (c->expr_type == EXPR_VARIABLE || c->expr_type == EXPR_SUBSTRING)
1207 /* Substring references don't have the charlength set. */
1209 while (ref && ref->type != REF_SUBSTRING)
1212 gcc_assert (ref == NULL || ref->type == REF_SUBSTRING);
1216 /* Check that the argument is length one. Non-constant lengths
1217 can't be checked here, so assume they are ok. */
1218 if (c->ts.cl && c->ts.cl->length)
1220 /* If we already have a length for this expression then use it. */
1221 if (c->ts.cl->length->expr_type != EXPR_CONSTANT)
1223 i = mpz_get_si (c->ts.cl->length->value.integer);
1230 start = ref->u.ss.start;
1231 end = ref->u.ss.end;
1234 if (end == NULL || end->expr_type != EXPR_CONSTANT
1235 || start->expr_type != EXPR_CONSTANT)
1238 i = mpz_get_si (end->value.integer) + 1
1239 - mpz_get_si (start->value.integer);
1247 gfc_error ("Argument of %s at %L must be of length one",
1248 gfc_current_intrinsic, &c->where);
1257 gfc_check_idnint (gfc_expr *a)
1259 if (double_check (a, 0) == FAILURE)
1267 gfc_check_ieor (gfc_expr *i, gfc_expr *j)
1269 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1272 if (type_check (j, 1, BT_INTEGER) == FAILURE)
1275 if (i->ts.kind != j->ts.kind)
1277 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
1278 &i->where) == FAILURE)
1287 gfc_check_index (gfc_expr *string, gfc_expr *substring, gfc_expr *back,
1290 if (type_check (string, 0, BT_CHARACTER) == FAILURE
1291 || type_check (substring, 1, BT_CHARACTER) == FAILURE)
1294 if (back != NULL && type_check (back, 2, BT_LOGICAL) == FAILURE)
1297 if (kind_check (kind, 3, BT_INTEGER) == FAILURE)
1299 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
1300 "with KIND argument at %L",
1301 gfc_current_intrinsic, &kind->where) == FAILURE)
1304 if (string->ts.kind != substring->ts.kind)
1306 gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same "
1307 "kind as '%s'", gfc_current_intrinsic_arg[1],
1308 gfc_current_intrinsic, &substring->where,
1309 gfc_current_intrinsic_arg[0]);
1318 gfc_check_int (gfc_expr *x, gfc_expr *kind)
1320 if (numeric_check (x, 0) == FAILURE)
1323 if (kind_check (kind, 1, BT_INTEGER) == FAILURE)
1331 gfc_check_intconv (gfc_expr *x)
1333 if (numeric_check (x, 0) == FAILURE)
1341 gfc_check_ior (gfc_expr *i, gfc_expr *j)
1343 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1346 if (type_check (j, 1, BT_INTEGER) == FAILURE)
1349 if (i->ts.kind != j->ts.kind)
1351 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
1352 &i->where) == FAILURE)
1361 gfc_check_ishft (gfc_expr *i, gfc_expr *shift)
1363 if (type_check (i, 0, BT_INTEGER) == FAILURE
1364 || type_check (shift, 1, BT_INTEGER) == FAILURE)
1372 gfc_check_ishftc (gfc_expr *i, gfc_expr *shift, gfc_expr *size)
1374 if (type_check (i, 0, BT_INTEGER) == FAILURE
1375 || type_check (shift, 1, BT_INTEGER) == FAILURE)
1378 if (size != NULL && type_check (size, 2, BT_INTEGER) == FAILURE)
1386 gfc_check_kill (gfc_expr *pid, gfc_expr *sig)
1388 if (type_check (pid, 0, BT_INTEGER) == FAILURE)
1391 if (type_check (sig, 1, BT_INTEGER) == FAILURE)
1399 gfc_check_kill_sub (gfc_expr *pid, gfc_expr *sig, gfc_expr *status)
1401 if (type_check (pid, 0, BT_INTEGER) == FAILURE)
1404 if (scalar_check (pid, 0) == FAILURE)
1407 if (type_check (sig, 1, BT_INTEGER) == FAILURE)
1410 if (scalar_check (sig, 1) == FAILURE)
1416 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1419 if (scalar_check (status, 2) == FAILURE)
1427 gfc_check_kind (gfc_expr *x)
1429 if (x->ts.type == BT_DERIVED)
1431 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a "
1432 "non-derived type", gfc_current_intrinsic_arg[0],
1433 gfc_current_intrinsic, &x->where);
1442 gfc_check_lbound (gfc_expr *array, gfc_expr *dim, gfc_expr *kind)
1444 if (array_check (array, 0) == FAILURE)
1449 if (dim_check (dim, 1, false) == FAILURE)
1452 if (dim_rank_check (dim, array, 1) == FAILURE)
1456 if (kind_check (kind, 2, BT_INTEGER) == FAILURE)
1458 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
1459 "with KIND argument at %L",
1460 gfc_current_intrinsic, &kind->where) == FAILURE)
1468 gfc_check_len_lentrim (gfc_expr *s, gfc_expr *kind)
1470 if (type_check (s, 0, BT_CHARACTER) == FAILURE)
1473 if (kind_check (kind, 1, BT_INTEGER) == FAILURE)
1475 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
1476 "with KIND argument at %L",
1477 gfc_current_intrinsic, &kind->where) == FAILURE)
1485 gfc_check_link (gfc_expr *path1, gfc_expr *path2)
1487 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1490 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1498 gfc_check_link_sub (gfc_expr *path1, gfc_expr *path2, gfc_expr *status)
1500 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1503 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1509 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1512 if (scalar_check (status, 2) == FAILURE)
1520 gfc_check_loc (gfc_expr *expr)
1522 return variable_check (expr, 0);
1527 gfc_check_symlnk (gfc_expr *path1, gfc_expr *path2)
1529 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1532 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1540 gfc_check_symlnk_sub (gfc_expr *path1, gfc_expr *path2, gfc_expr *status)
1542 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1545 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1551 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1554 if (scalar_check (status, 2) == FAILURE)
1562 gfc_check_logical (gfc_expr *a, gfc_expr *kind)
1564 if (type_check (a, 0, BT_LOGICAL) == FAILURE)
1566 if (kind_check (kind, 1, BT_LOGICAL) == FAILURE)
1573 /* Min/max family. */
1576 min_max_args (gfc_actual_arglist *arg)
1578 if (arg == NULL || arg->next == NULL)
1580 gfc_error ("Intrinsic '%s' at %L must have at least two arguments",
1581 gfc_current_intrinsic, gfc_current_intrinsic_where);
1590 check_rest (bt type, int kind, gfc_actual_arglist *arglist)
1592 gfc_actual_arglist *arg, *tmp;
1597 if (min_max_args (arglist) == FAILURE)
1600 for (arg = arglist, n=1; arg; arg = arg->next, n++)
1603 if (x->ts.type != type || x->ts.kind != kind)
1605 if (x->ts.type == type)
1607 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type "
1608 "kinds at %L", &x->where) == FAILURE)
1613 gfc_error ("'a%d' argument of '%s' intrinsic at %L must be "
1614 "%s(%d)", n, gfc_current_intrinsic, &x->where,
1615 gfc_basic_typename (type), kind);
1620 for (tmp = arglist, m=1; tmp != arg; tmp = tmp->next, m++)
1623 snprintf (buffer, 80, "arguments 'a%d' and 'a%d' for intrinsic '%s'",
1624 m, n, gfc_current_intrinsic);
1625 if (gfc_check_conformance (buffer, tmp->expr, x) == FAILURE)
1635 gfc_check_min_max (gfc_actual_arglist *arg)
1639 if (min_max_args (arg) == FAILURE)
1644 if (x->ts.type == BT_CHARACTER)
1646 if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
1647 "with CHARACTER argument at %L",
1648 gfc_current_intrinsic, &x->where) == FAILURE)
1651 else if (x->ts.type != BT_INTEGER && x->ts.type != BT_REAL)
1653 gfc_error ("'a1' argument of '%s' intrinsic at %L must be INTEGER, "
1654 "REAL or CHARACTER", gfc_current_intrinsic, &x->where);
1658 return check_rest (x->ts.type, x->ts.kind, arg);
1663 gfc_check_min_max_integer (gfc_actual_arglist *arg)
1665 return check_rest (BT_INTEGER, gfc_default_integer_kind, arg);
1670 gfc_check_min_max_real (gfc_actual_arglist *arg)
1672 return check_rest (BT_REAL, gfc_default_real_kind, arg);
1677 gfc_check_min_max_double (gfc_actual_arglist *arg)
1679 return check_rest (BT_REAL, gfc_default_double_kind, arg);
1683 /* End of min/max family. */
1686 gfc_check_malloc (gfc_expr *size)
1688 if (type_check (size, 0, BT_INTEGER) == FAILURE)
1691 if (scalar_check (size, 0) == FAILURE)
1699 gfc_check_matmul (gfc_expr *matrix_a, gfc_expr *matrix_b)
1701 if ((matrix_a->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_b->ts))
1703 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1704 "or LOGICAL", gfc_current_intrinsic_arg[0],
1705 gfc_current_intrinsic, &matrix_a->where);
1709 if ((matrix_b->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_a->ts))
1711 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1712 "or LOGICAL", gfc_current_intrinsic_arg[1],
1713 gfc_current_intrinsic, &matrix_b->where);
1717 switch (matrix_a->rank)
1720 if (rank_check (matrix_b, 1, 2) == FAILURE)
1722 /* Check for case matrix_a has shape(m), matrix_b has shape (m, k). */
1723 if (!identical_dimen_shape (matrix_a, 0, matrix_b, 0))
1725 gfc_error ("Different shape on dimension 1 for arguments '%s' "
1726 "and '%s' at %L for intrinsic matmul",
1727 gfc_current_intrinsic_arg[0],
1728 gfc_current_intrinsic_arg[1], &matrix_a->where);
1734 if (matrix_b->rank != 2)
1736 if (rank_check (matrix_b, 1, 1) == FAILURE)
1739 /* matrix_b has rank 1 or 2 here. Common check for the cases
1740 - matrix_a has shape (n,m) and matrix_b has shape (m, k)
1741 - matrix_a has shape (n,m) and matrix_b has shape (m). */
1742 if (!identical_dimen_shape (matrix_a, 1, matrix_b, 0))
1744 gfc_error ("Different shape on dimension 2 for argument '%s' and "
1745 "dimension 1 for argument '%s' at %L for intrinsic "
1746 "matmul", gfc_current_intrinsic_arg[0],
1747 gfc_current_intrinsic_arg[1], &matrix_a->where);
1753 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank "
1754 "1 or 2", gfc_current_intrinsic_arg[0],
1755 gfc_current_intrinsic, &matrix_a->where);
1763 /* Whoever came up with this interface was probably on something.
1764 The possibilities for the occupation of the second and third
1771 NULL MASK minloc(array, mask=m)
1774 I.e. in the case of minloc(array,mask), mask will be in the second
1775 position of the argument list and we'll have to fix that up. */
1778 gfc_check_minloc_maxloc (gfc_actual_arglist *ap)
1780 gfc_expr *a, *m, *d;
1783 if (int_or_real_check (a, 0) == FAILURE || array_check (a, 0) == FAILURE)
1787 m = ap->next->next->expr;
1789 if (m == NULL && d != NULL && d->ts.type == BT_LOGICAL
1790 && ap->next->name == NULL)
1794 ap->next->expr = NULL;
1795 ap->next->next->expr = m;
1798 if (d && dim_check (d, 1, false) == FAILURE)
1801 if (d && dim_rank_check (d, a, 0) == FAILURE)
1804 if (m != NULL && type_check (m, 2, BT_LOGICAL) == FAILURE)
1810 snprintf (buffer, 80, "arguments '%s' and '%s' for intrinsic %s",
1811 gfc_current_intrinsic_arg[0], gfc_current_intrinsic_arg[2],
1812 gfc_current_intrinsic);
1813 if (gfc_check_conformance (buffer, a, m) == FAILURE)
1821 /* Similar to minloc/maxloc, the argument list might need to be
1822 reordered for the MINVAL, MAXVAL, PRODUCT, and SUM intrinsics. The
1823 difference is that MINLOC/MAXLOC take an additional KIND argument.
1824 The possibilities are:
1830 NULL MASK minval(array, mask=m)
1833 I.e. in the case of minval(array,mask), mask will be in the second
1834 position of the argument list and we'll have to fix that up. */
1837 check_reduction (gfc_actual_arglist *ap)
1839 gfc_expr *a, *m, *d;
1843 m = ap->next->next->expr;
1845 if (m == NULL && d != NULL && d->ts.type == BT_LOGICAL
1846 && ap->next->name == NULL)
1850 ap->next->expr = NULL;
1851 ap->next->next->expr = m;
1854 if (d && dim_check (d, 1, false) == FAILURE)
1857 if (d && dim_rank_check (d, a, 0) == FAILURE)
1860 if (m != NULL && type_check (m, 2, BT_LOGICAL) == FAILURE)
1866 snprintf (buffer, 80, "arguments '%s' and '%s' for intrinsic %s",
1867 gfc_current_intrinsic_arg[0], gfc_current_intrinsic_arg[2],
1868 gfc_current_intrinsic);
1869 if (gfc_check_conformance (buffer, a, m) == FAILURE)
1878 gfc_check_minval_maxval (gfc_actual_arglist *ap)
1880 if (int_or_real_check (ap->expr, 0) == FAILURE
1881 || array_check (ap->expr, 0) == FAILURE)
1884 return check_reduction (ap);
1889 gfc_check_product_sum (gfc_actual_arglist *ap)
1891 if (numeric_check (ap->expr, 0) == FAILURE
1892 || array_check (ap->expr, 0) == FAILURE)
1895 return check_reduction (ap);
1900 gfc_check_merge (gfc_expr *tsource, gfc_expr *fsource, gfc_expr *mask)
1902 if (same_type_check (tsource, 0, fsource, 1) == FAILURE)
1905 if (type_check (mask, 2, BT_LOGICAL) == FAILURE)
1908 if (tsource->ts.type == BT_CHARACTER)
1909 return check_same_strlen (tsource, fsource, "MERGE");
1916 gfc_check_move_alloc (gfc_expr *from, gfc_expr *to)
1918 symbol_attribute attr;
1920 if (variable_check (from, 0) == FAILURE)
1923 if (array_check (from, 0) == FAILURE)
1926 attr = gfc_variable_attr (from, NULL);
1927 if (!attr.allocatable)
1929 gfc_error ("'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE",
1930 gfc_current_intrinsic_arg[0], gfc_current_intrinsic,
1935 if (variable_check (to, 0) == FAILURE)
1938 if (array_check (to, 0) == FAILURE)
1941 attr = gfc_variable_attr (to, NULL);
1942 if (!attr.allocatable)
1944 gfc_error ("'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE",
1945 gfc_current_intrinsic_arg[0], gfc_current_intrinsic,
1950 if (same_type_check (from, 0, to, 1) == FAILURE)
1953 if (to->rank != from->rank)
1955 gfc_error ("the '%s' and '%s' arguments of '%s' intrinsic at %L must "
1956 "have the same rank %d/%d", gfc_current_intrinsic_arg[0],
1957 gfc_current_intrinsic_arg[1], gfc_current_intrinsic,
1958 &to->where, from->rank, to->rank);
1962 if (to->ts.kind != from->ts.kind)
1964 gfc_error ("the '%s' and '%s' arguments of '%s' intrinsic at %L must "
1965 "be of the same kind %d/%d", gfc_current_intrinsic_arg[0],
1966 gfc_current_intrinsic_arg[1], gfc_current_intrinsic,
1967 &to->where, from->ts.kind, to->ts.kind);
1976 gfc_check_nearest (gfc_expr *x, gfc_expr *s)
1978 if (type_check (x, 0, BT_REAL) == FAILURE)
1981 if (type_check (s, 1, BT_REAL) == FAILURE)
1989 gfc_check_new_line (gfc_expr *a)
1991 if (type_check (a, 0, BT_CHARACTER) == FAILURE)
1999 gfc_check_null (gfc_expr *mold)
2001 symbol_attribute attr;
2006 if (variable_check (mold, 0) == FAILURE)
2009 attr = gfc_variable_attr (mold, NULL);
2013 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER",
2014 gfc_current_intrinsic_arg[0],
2015 gfc_current_intrinsic, &mold->where);
2024 gfc_check_pack (gfc_expr *array, gfc_expr *mask, gfc_expr *vector)
2028 if (array_check (array, 0) == FAILURE)
2031 if (type_check (mask, 1, BT_LOGICAL) == FAILURE)
2034 snprintf (buffer, 80, "arguments '%s' and '%s' for intrinsic '%s'",
2035 gfc_current_intrinsic_arg[0], gfc_current_intrinsic_arg[1],
2036 gfc_current_intrinsic);
2037 if (gfc_check_conformance (buffer, array, mask) == FAILURE)
2042 if (same_type_check (array, 0, vector, 2) == FAILURE)
2045 if (rank_check (vector, 2, 1) == FAILURE)
2048 /* TODO: More constraints here. */
2056 gfc_check_precision (gfc_expr *x)
2058 if (x->ts.type != BT_REAL && x->ts.type != BT_COMPLEX)
2060 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of type "
2061 "REAL or COMPLEX", gfc_current_intrinsic_arg[0],
2062 gfc_current_intrinsic, &x->where);
2071 gfc_check_present (gfc_expr *a)
2075 if (variable_check (a, 0) == FAILURE)
2078 sym = a->symtree->n.sym;
2079 if (!sym->attr.dummy)
2081 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a "
2082 "dummy variable", gfc_current_intrinsic_arg[0],
2083 gfc_current_intrinsic, &a->where);
2087 if (!sym->attr.optional)
2089 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of "
2090 "an OPTIONAL dummy variable", gfc_current_intrinsic_arg[0],
2091 gfc_current_intrinsic, &a->where);
2095 /* 13.14.82 PRESENT(A)
2097 Argument. A shall be the name of an optional dummy argument that is
2098 accessible in the subprogram in which the PRESENT function reference
2102 && !(a->ref->next == NULL && a->ref->type == REF_ARRAY
2103 && a->ref->u.ar.type == AR_FULL))
2105 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be a "
2106 "subobject of '%s'", gfc_current_intrinsic_arg[0],
2107 gfc_current_intrinsic, &a->where, sym->name);
2116 gfc_check_radix (gfc_expr *x)
2118 if (int_or_real_check (x, 0) == FAILURE)
2126 gfc_check_range (gfc_expr *x)
2128 if (numeric_check (x, 0) == FAILURE)
2135 /* real, float, sngl. */
2137 gfc_check_real (gfc_expr *a, gfc_expr *kind)
2139 if (numeric_check (a, 0) == FAILURE)
2142 if (kind_check (kind, 1, BT_REAL) == FAILURE)
2150 gfc_check_rename (gfc_expr *path1, gfc_expr *path2)
2152 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
2155 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
2163 gfc_check_rename_sub (gfc_expr *path1, gfc_expr *path2, gfc_expr *status)
2165 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
2168 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
2174 if (type_check (status, 2, BT_INTEGER) == FAILURE)
2177 if (scalar_check (status, 2) == FAILURE)
2185 gfc_check_repeat (gfc_expr *x, gfc_expr *y)
2187 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
2190 if (scalar_check (x, 0) == FAILURE)
2193 if (type_check (y, 0, BT_INTEGER) == FAILURE)
2196 if (scalar_check (y, 1) == FAILURE)
2204 gfc_check_reshape (gfc_expr *source, gfc_expr *shape,
2205 gfc_expr *pad, gfc_expr *order)
2211 if (array_check (source, 0) == FAILURE)
2214 if (rank_check (shape, 1, 1) == FAILURE)
2217 if (type_check (shape, 1, BT_INTEGER) == FAILURE)
2220 if (gfc_array_size (shape, &size) != SUCCESS)
2222 gfc_error ("'shape' argument of 'reshape' intrinsic at %L must be an "
2223 "array of constant size", &shape->where);
2227 m = mpz_cmp_ui (size, GFC_MAX_DIMENSIONS);
2232 gfc_error ("'shape' argument of 'reshape' intrinsic at %L has more "
2233 "than %d elements", &shape->where, GFC_MAX_DIMENSIONS);
2239 if (same_type_check (source, 0, pad, 2) == FAILURE)
2241 if (array_check (pad, 2) == FAILURE)
2245 if (order != NULL && array_check (order, 3) == FAILURE)
2248 if (pad == NULL && shape->expr_type == EXPR_ARRAY
2249 && gfc_is_constant_expr (shape)
2250 && !(source->expr_type == EXPR_VARIABLE && source->symtree->n.sym->as
2251 && source->symtree->n.sym->as->type == AS_ASSUMED_SIZE))
2253 /* Check the match in size between source and destination. */
2254 if (gfc_array_size (source, &nelems) == SUCCESS)
2259 c = shape->value.constructor;
2260 mpz_init_set_ui (size, 1);
2261 for (; c; c = c->next)
2262 mpz_mul (size, size, c->expr->value.integer);
2264 test = mpz_cmp (nelems, size) < 0 && mpz_cmp_ui (size, 0) > 0;
2270 gfc_error ("Without padding, there are not enough elements "
2271 "in the intrinsic RESHAPE source at %L to match "
2272 "the shape", &source->where);
2283 gfc_check_scale (gfc_expr *x, gfc_expr *i)
2285 if (type_check (x, 0, BT_REAL) == FAILURE)
2288 if (type_check (i, 1, BT_INTEGER) == FAILURE)
2296 gfc_check_scan (gfc_expr *x, gfc_expr *y, gfc_expr *z, gfc_expr *kind)
2298 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
2301 if (type_check (y, 1, BT_CHARACTER) == FAILURE)
2304 if (z != NULL && type_check (z, 2, BT_LOGICAL) == FAILURE)
2307 if (kind_check (kind, 3, BT_INTEGER) == FAILURE)
2309 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
2310 "with KIND argument at %L",
2311 gfc_current_intrinsic, &kind->where) == FAILURE)
2314 if (same_type_check (x, 0, y, 1) == FAILURE)
2322 gfc_check_secnds (gfc_expr *r)
2324 if (type_check (r, 0, BT_REAL) == FAILURE)
2327 if (kind_value_check (r, 0, 4) == FAILURE)
2330 if (scalar_check (r, 0) == FAILURE)
2338 gfc_check_selected_int_kind (gfc_expr *r)
2340 if (type_check (r, 0, BT_INTEGER) == FAILURE)
2343 if (scalar_check (r, 0) == FAILURE)
2351 gfc_check_selected_real_kind (gfc_expr *p, gfc_expr *r)
2353 if (p == NULL && r == NULL)
2355 gfc_error ("Missing arguments to %s intrinsic at %L",
2356 gfc_current_intrinsic, gfc_current_intrinsic_where);
2361 if (p != NULL && type_check (p, 0, BT_INTEGER) == FAILURE)
2364 if (r != NULL && type_check (r, 1, BT_INTEGER) == FAILURE)
2372 gfc_check_set_exponent (gfc_expr *x, gfc_expr *i)
2374 if (type_check (x, 0, BT_REAL) == FAILURE)
2377 if (type_check (i, 1, BT_INTEGER) == FAILURE)
2385 gfc_check_shape (gfc_expr *source)
2389 if (source->rank == 0 || source->expr_type != EXPR_VARIABLE)
2392 ar = gfc_find_array_ref (source);
2394 if (ar->as && ar->as->type == AS_ASSUMED_SIZE)
2396 gfc_error ("'source' argument of 'shape' intrinsic at %L must not be "
2397 "an assumed size array", &source->where);
2406 gfc_check_sign (gfc_expr *a, gfc_expr *b)
2408 if (int_or_real_check (a, 0) == FAILURE)
2411 if (same_type_check (a, 0, b, 1) == FAILURE)
2419 gfc_check_size (gfc_expr *array, gfc_expr *dim, gfc_expr *kind)
2421 if (array_check (array, 0) == FAILURE)
2426 if (dim_check (dim, 1, true) == FAILURE)
2429 if (dim_rank_check (dim, array, 0) == FAILURE)
2433 if (kind_check (kind, 2, BT_INTEGER) == FAILURE)
2435 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
2436 "with KIND argument at %L",
2437 gfc_current_intrinsic, &kind->where) == FAILURE)
2446 gfc_check_sizeof (gfc_expr *arg __attribute__((unused)))
2453 gfc_check_sleep_sub (gfc_expr *seconds)
2455 if (type_check (seconds, 0, BT_INTEGER) == FAILURE)
2458 if (scalar_check (seconds, 0) == FAILURE)
2466 gfc_check_spread (gfc_expr *source, gfc_expr *dim, gfc_expr *ncopies)
2468 if (source->rank >= GFC_MAX_DIMENSIONS)
2470 gfc_error ("'%s' argument of '%s' intrinsic at %L must be less "
2471 "than rank %d", gfc_current_intrinsic_arg[0],
2472 gfc_current_intrinsic, &source->where, GFC_MAX_DIMENSIONS);
2480 if (dim_check (dim, 1, false) == FAILURE)
2483 if (type_check (ncopies, 2, BT_INTEGER) == FAILURE)
2486 if (scalar_check (ncopies, 2) == FAILURE)
2493 /* Functions for checking FGETC, FPUTC, FGET and FPUT (subroutines and
2497 gfc_check_fgetputc_sub (gfc_expr *unit, gfc_expr *c, gfc_expr *status)
2499 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2502 if (scalar_check (unit, 0) == FAILURE)
2505 if (type_check (c, 1, BT_CHARACTER) == FAILURE)
2511 if (type_check (status, 2, BT_INTEGER) == FAILURE
2512 || kind_value_check (status, 2, gfc_default_integer_kind) == FAILURE
2513 || scalar_check (status, 2) == FAILURE)
2521 gfc_check_fgetputc (gfc_expr *unit, gfc_expr *c)
2523 return gfc_check_fgetputc_sub (unit, c, NULL);
2528 gfc_check_fgetput_sub (gfc_expr *c, gfc_expr *status)
2530 if (type_check (c, 0, BT_CHARACTER) == FAILURE)
2536 if (type_check (status, 1, BT_INTEGER) == FAILURE
2537 || kind_value_check (status, 1, gfc_default_integer_kind) == FAILURE
2538 || scalar_check (status, 1) == FAILURE)
2546 gfc_check_fgetput (gfc_expr *c)
2548 return gfc_check_fgetput_sub (c, NULL);
2553 gfc_check_fseek_sub (gfc_expr *unit, gfc_expr *offset, gfc_expr *whence, gfc_expr *status)
2555 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2558 if (scalar_check (unit, 0) == FAILURE)
2561 if (type_check (offset, 1, BT_INTEGER) == FAILURE)
2564 if (scalar_check (offset, 1) == FAILURE)
2567 if (type_check (whence, 2, BT_INTEGER) == FAILURE)
2570 if (scalar_check (whence, 2) == FAILURE)
2576 if (type_check (status, 3, BT_INTEGER) == FAILURE)
2579 if (kind_value_check (status, 3, 4) == FAILURE)
2582 if (scalar_check (status, 3) == FAILURE)
2591 gfc_check_fstat (gfc_expr *unit, gfc_expr *array)
2593 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2596 if (scalar_check (unit, 0) == FAILURE)
2599 if (type_check (array, 1, BT_INTEGER) == FAILURE
2600 || kind_value_check (unit, 0, gfc_default_integer_kind) == FAILURE)
2603 if (array_check (array, 1) == FAILURE)
2611 gfc_check_fstat_sub (gfc_expr *unit, gfc_expr *array, gfc_expr *status)
2613 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2616 if (scalar_check (unit, 0) == FAILURE)
2619 if (type_check (array, 1, BT_INTEGER) == FAILURE
2620 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
2623 if (array_check (array, 1) == FAILURE)
2629 if (type_check (status, 2, BT_INTEGER) == FAILURE
2630 || kind_value_check (status, 2, gfc_default_integer_kind) == FAILURE)
2633 if (scalar_check (status, 2) == FAILURE)
2641 gfc_check_ftell (gfc_expr *unit)
2643 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2646 if (scalar_check (unit, 0) == FAILURE)
2654 gfc_check_ftell_sub (gfc_expr *unit, gfc_expr *offset)
2656 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2659 if (scalar_check (unit, 0) == FAILURE)
2662 if (type_check (offset, 1, BT_INTEGER) == FAILURE)
2665 if (scalar_check (offset, 1) == FAILURE)
2673 gfc_check_stat (gfc_expr *name, gfc_expr *array)
2675 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
2678 if (type_check (array, 1, BT_INTEGER) == FAILURE
2679 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
2682 if (array_check (array, 1) == FAILURE)
2690 gfc_check_stat_sub (gfc_expr *name, gfc_expr *array, gfc_expr *status)
2692 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
2695 if (type_check (array, 1, BT_INTEGER) == FAILURE
2696 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
2699 if (array_check (array, 1) == FAILURE)
2705 if (type_check (status, 2, BT_INTEGER) == FAILURE
2706 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
2709 if (scalar_check (status, 2) == FAILURE)
2717 gfc_check_transfer (gfc_expr *source ATTRIBUTE_UNUSED,
2718 gfc_expr *mold ATTRIBUTE_UNUSED, gfc_expr *size)
2720 if (mold->ts.type == BT_HOLLERITH)
2722 gfc_error ("'MOLD' argument of 'TRANSFER' intrinsic at %L must not be %s",
2723 &mold->where, gfc_basic_typename (BT_HOLLERITH));
2729 if (type_check (size, 2, BT_INTEGER) == FAILURE)
2732 if (scalar_check (size, 2) == FAILURE)
2735 if (nonoptional_check (size, 2) == FAILURE)
2744 gfc_check_transpose (gfc_expr *matrix)
2746 if (rank_check (matrix, 0, 2) == FAILURE)
2754 gfc_check_ubound (gfc_expr *array, gfc_expr *dim, gfc_expr *kind)
2756 if (array_check (array, 0) == FAILURE)
2761 if (dim_check (dim, 1, false) == FAILURE)
2764 if (dim_rank_check (dim, array, 0) == FAILURE)
2768 if (kind_check (kind, 2, BT_INTEGER) == FAILURE)
2770 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
2771 "with KIND argument at %L",
2772 gfc_current_intrinsic, &kind->where) == FAILURE)
2780 gfc_check_unpack (gfc_expr *vector, gfc_expr *mask, gfc_expr *field)
2782 if (rank_check (vector, 0, 1) == FAILURE)
2785 if (array_check (mask, 1) == FAILURE)
2788 if (type_check (mask, 1, BT_LOGICAL) == FAILURE)
2791 if (same_type_check (vector, 0, field, 2) == FAILURE)
2799 gfc_check_verify (gfc_expr *x, gfc_expr *y, gfc_expr *z, gfc_expr *kind)
2801 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
2804 if (same_type_check (x, 0, y, 1) == FAILURE)
2807 if (z != NULL && type_check (z, 2, BT_LOGICAL) == FAILURE)
2810 if (kind_check (kind, 3, BT_INTEGER) == FAILURE)
2812 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
2813 "with KIND argument at %L",
2814 gfc_current_intrinsic, &kind->where) == FAILURE)
2822 gfc_check_trim (gfc_expr *x)
2824 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
2827 if (scalar_check (x, 0) == FAILURE)
2835 gfc_check_ttynam (gfc_expr *unit)
2837 if (scalar_check (unit, 0) == FAILURE)
2840 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2847 /* Common check function for the half a dozen intrinsics that have a
2848 single real argument. */
2851 gfc_check_x (gfc_expr *x)
2853 if (type_check (x, 0, BT_REAL) == FAILURE)
2860 /************* Check functions for intrinsic subroutines *************/
2863 gfc_check_cpu_time (gfc_expr *time)
2865 if (scalar_check (time, 0) == FAILURE)
2868 if (type_check (time, 0, BT_REAL) == FAILURE)
2871 if (variable_check (time, 0) == FAILURE)
2879 gfc_check_date_and_time (gfc_expr *date, gfc_expr *time,
2880 gfc_expr *zone, gfc_expr *values)
2884 if (type_check (date, 0, BT_CHARACTER) == FAILURE)
2886 if (scalar_check (date, 0) == FAILURE)
2888 if (variable_check (date, 0) == FAILURE)
2894 if (type_check (time, 1, BT_CHARACTER) == FAILURE)
2896 if (scalar_check (time, 1) == FAILURE)
2898 if (variable_check (time, 1) == FAILURE)
2904 if (type_check (zone, 2, BT_CHARACTER) == FAILURE)
2906 if (scalar_check (zone, 2) == FAILURE)
2908 if (variable_check (zone, 2) == FAILURE)
2914 if (type_check (values, 3, BT_INTEGER) == FAILURE)
2916 if (array_check (values, 3) == FAILURE)
2918 if (rank_check (values, 3, 1) == FAILURE)
2920 if (variable_check (values, 3) == FAILURE)
2929 gfc_check_mvbits (gfc_expr *from, gfc_expr *frompos, gfc_expr *len,
2930 gfc_expr *to, gfc_expr *topos)
2932 if (type_check (from, 0, BT_INTEGER) == FAILURE)
2935 if (type_check (frompos, 1, BT_INTEGER) == FAILURE)
2938 if (type_check (len, 2, BT_INTEGER) == FAILURE)
2941 if (same_type_check (from, 0, to, 3) == FAILURE)
2944 if (variable_check (to, 3) == FAILURE)
2947 if (type_check (topos, 4, BT_INTEGER) == FAILURE)
2955 gfc_check_random_number (gfc_expr *harvest)
2957 if (type_check (harvest, 0, BT_REAL) == FAILURE)
2960 if (variable_check (harvest, 0) == FAILURE)
2968 gfc_check_random_seed (gfc_expr *size, gfc_expr *put, gfc_expr *get)
2970 unsigned int nargs = 0;
2971 locus *where = NULL;
2975 if (size->expr_type != EXPR_VARIABLE
2976 || !size->symtree->n.sym->attr.optional)
2979 if (scalar_check (size, 0) == FAILURE)
2982 if (type_check (size, 0, BT_INTEGER) == FAILURE)
2985 if (variable_check (size, 0) == FAILURE)
2988 if (kind_value_check (size, 0, gfc_default_integer_kind) == FAILURE)
2994 if (put->expr_type != EXPR_VARIABLE
2995 || !put->symtree->n.sym->attr.optional)
2998 where = &put->where;
3001 if (array_check (put, 1) == FAILURE)
3004 if (rank_check (put, 1, 1) == FAILURE)
3007 if (type_check (put, 1, BT_INTEGER) == FAILURE)
3010 if (kind_value_check (put, 1, gfc_default_integer_kind) == FAILURE)
3016 if (get->expr_type != EXPR_VARIABLE
3017 || !get->symtree->n.sym->attr.optional)
3020 where = &get->where;
3023 if (array_check (get, 2) == FAILURE)
3026 if (rank_check (get, 2, 1) == FAILURE)
3029 if (type_check (get, 2, BT_INTEGER) == FAILURE)
3032 if (variable_check (get, 2) == FAILURE)
3035 if (kind_value_check (get, 2, gfc_default_integer_kind) == FAILURE)
3039 /* RANDOM_SEED may not have more than one non-optional argument. */
3041 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic, where);
3048 gfc_check_second_sub (gfc_expr *time)
3050 if (scalar_check (time, 0) == FAILURE)
3053 if (type_check (time, 0, BT_REAL) == FAILURE)
3056 if (kind_value_check(time, 0, 4) == FAILURE)
3063 /* The arguments of SYSTEM_CLOCK are scalar, integer variables. Note,
3064 count, count_rate, and count_max are all optional arguments */
3067 gfc_check_system_clock (gfc_expr *count, gfc_expr *count_rate,
3068 gfc_expr *count_max)
3072 if (scalar_check (count, 0) == FAILURE)
3075 if (type_check (count, 0, BT_INTEGER) == FAILURE)
3078 if (variable_check (count, 0) == FAILURE)
3082 if (count_rate != NULL)
3084 if (scalar_check (count_rate, 1) == FAILURE)
3087 if (type_check (count_rate, 1, BT_INTEGER) == FAILURE)
3090 if (variable_check (count_rate, 1) == FAILURE)
3094 && same_type_check (count, 0, count_rate, 1) == FAILURE)
3099 if (count_max != NULL)
3101 if (scalar_check (count_max, 2) == FAILURE)
3104 if (type_check (count_max, 2, BT_INTEGER) == FAILURE)
3107 if (variable_check (count_max, 2) == FAILURE)
3111 && same_type_check (count, 0, count_max, 2) == FAILURE)
3114 if (count_rate != NULL
3115 && same_type_check (count_rate, 1, count_max, 2) == FAILURE)
3124 gfc_check_irand (gfc_expr *x)
3129 if (scalar_check (x, 0) == FAILURE)
3132 if (type_check (x, 0, BT_INTEGER) == FAILURE)
3135 if (kind_value_check(x, 0, 4) == FAILURE)
3143 gfc_check_alarm_sub (gfc_expr *seconds, gfc_expr *handler, gfc_expr *status)
3145 if (scalar_check (seconds, 0) == FAILURE)
3148 if (type_check (seconds, 0, BT_INTEGER) == FAILURE)
3151 if (handler->ts.type != BT_INTEGER && handler->ts.type != BT_PROCEDURE)
3153 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
3154 "or PROCEDURE", gfc_current_intrinsic_arg[1],
3155 gfc_current_intrinsic, &handler->where);
3159 if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE)
3165 if (scalar_check (status, 2) == FAILURE)
3168 if (type_check (status, 2, BT_INTEGER) == FAILURE)
3171 if (kind_value_check (status, 2, gfc_default_integer_kind) == FAILURE)
3179 gfc_check_rand (gfc_expr *x)
3184 if (scalar_check (x, 0) == FAILURE)
3187 if (type_check (x, 0, BT_INTEGER) == FAILURE)
3190 if (kind_value_check(x, 0, 4) == FAILURE)
3198 gfc_check_srand (gfc_expr *x)
3200 if (scalar_check (x, 0) == FAILURE)
3203 if (type_check (x, 0, BT_INTEGER) == FAILURE)
3206 if (kind_value_check(x, 0, 4) == FAILURE)
3214 gfc_check_ctime_sub (gfc_expr *time, gfc_expr *result)
3216 if (scalar_check (time, 0) == FAILURE)
3219 if (type_check (time, 0, BT_INTEGER) == FAILURE)
3222 if (type_check (result, 1, BT_CHARACTER) == FAILURE)
3230 gfc_check_etime (gfc_expr *x)
3232 if (array_check (x, 0) == FAILURE)
3235 if (rank_check (x, 0, 1) == FAILURE)
3238 if (variable_check (x, 0) == FAILURE)
3241 if (type_check (x, 0, BT_REAL) == FAILURE)
3244 if (kind_value_check(x, 0, 4) == FAILURE)
3252 gfc_check_etime_sub (gfc_expr *values, gfc_expr *time)
3254 if (array_check (values, 0) == FAILURE)
3257 if (rank_check (values, 0, 1) == FAILURE)
3260 if (variable_check (values, 0) == FAILURE)
3263 if (type_check (values, 0, BT_REAL) == FAILURE)
3266 if (kind_value_check(values, 0, 4) == FAILURE)
3269 if (scalar_check (time, 1) == FAILURE)
3272 if (type_check (time, 1, BT_REAL) == FAILURE)
3275 if (kind_value_check(time, 1, 4) == FAILURE)
3283 gfc_check_fdate_sub (gfc_expr *date)
3285 if (type_check (date, 0, BT_CHARACTER) == FAILURE)
3293 gfc_check_gerror (gfc_expr *msg)
3295 if (type_check (msg, 0, BT_CHARACTER) == FAILURE)
3303 gfc_check_getcwd_sub (gfc_expr *cwd, gfc_expr *status)
3305 if (type_check (cwd, 0, BT_CHARACTER) == FAILURE)
3311 if (scalar_check (status, 1) == FAILURE)
3314 if (type_check (status, 1, BT_INTEGER) == FAILURE)
3322 gfc_check_getarg (gfc_expr *pos, gfc_expr *value)
3324 if (type_check (pos, 0, BT_INTEGER) == FAILURE)
3327 if (pos->ts.kind > gfc_default_integer_kind)
3329 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a kind "
3330 "not wider than the default kind (%d)",
3331 gfc_current_intrinsic_arg[0], gfc_current_intrinsic,
3332 &pos->where, gfc_default_integer_kind);
3336 if (type_check (value, 1, BT_CHARACTER) == FAILURE)
3344 gfc_check_getlog (gfc_expr *msg)
3346 if (type_check (msg, 0, BT_CHARACTER) == FAILURE)
3354 gfc_check_exit (gfc_expr *status)
3359 if (type_check (status, 0, BT_INTEGER) == FAILURE)
3362 if (scalar_check (status, 0) == FAILURE)
3370 gfc_check_flush (gfc_expr *unit)
3375 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3378 if (scalar_check (unit, 0) == FAILURE)
3386 gfc_check_free (gfc_expr *i)
3388 if (type_check (i, 0, BT_INTEGER) == FAILURE)
3391 if (scalar_check (i, 0) == FAILURE)
3399 gfc_check_hostnm (gfc_expr *name)
3401 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
3409 gfc_check_hostnm_sub (gfc_expr *name, gfc_expr *status)
3411 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
3417 if (scalar_check (status, 1) == FAILURE)
3420 if (type_check (status, 1, BT_INTEGER) == FAILURE)
3428 gfc_check_itime_idate (gfc_expr *values)
3430 if (array_check (values, 0) == FAILURE)
3433 if (rank_check (values, 0, 1) == FAILURE)
3436 if (variable_check (values, 0) == FAILURE)
3439 if (type_check (values, 0, BT_INTEGER) == FAILURE)
3442 if (kind_value_check(values, 0, gfc_default_integer_kind) == FAILURE)
3450 gfc_check_ltime_gmtime (gfc_expr *time, gfc_expr *values)
3452 if (type_check (time, 0, BT_INTEGER) == FAILURE)
3455 if (kind_value_check(time, 0, gfc_default_integer_kind) == FAILURE)
3458 if (scalar_check (time, 0) == FAILURE)
3461 if (array_check (values, 1) == FAILURE)
3464 if (rank_check (values, 1, 1) == FAILURE)
3467 if (variable_check (values, 1) == FAILURE)
3470 if (type_check (values, 1, BT_INTEGER) == FAILURE)
3473 if (kind_value_check(values, 1, gfc_default_integer_kind) == FAILURE)
3481 gfc_check_ttynam_sub (gfc_expr *unit, gfc_expr *name)
3483 if (scalar_check (unit, 0) == FAILURE)
3486 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3489 if (type_check (name, 1, BT_CHARACTER) == FAILURE)
3497 gfc_check_isatty (gfc_expr *unit)
3502 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3505 if (scalar_check (unit, 0) == FAILURE)
3513 gfc_check_isnan (gfc_expr *x)
3515 if (type_check (x, 0, BT_REAL) == FAILURE)
3523 gfc_check_perror (gfc_expr *string)
3525 if (type_check (string, 0, BT_CHARACTER) == FAILURE)
3533 gfc_check_umask (gfc_expr *mask)
3535 if (type_check (mask, 0, BT_INTEGER) == FAILURE)
3538 if (scalar_check (mask, 0) == FAILURE)
3546 gfc_check_umask_sub (gfc_expr *mask, gfc_expr *old)
3548 if (type_check (mask, 0, BT_INTEGER) == FAILURE)
3551 if (scalar_check (mask, 0) == FAILURE)
3557 if (scalar_check (old, 1) == FAILURE)
3560 if (type_check (old, 1, BT_INTEGER) == FAILURE)
3568 gfc_check_unlink (gfc_expr *name)
3570 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
3578 gfc_check_unlink_sub (gfc_expr *name, gfc_expr *status)
3580 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
3586 if (scalar_check (status, 1) == FAILURE)
3589 if (type_check (status, 1, BT_INTEGER) == FAILURE)
3597 gfc_check_signal (gfc_expr *number, gfc_expr *handler)
3599 if (scalar_check (number, 0) == FAILURE)
3602 if (type_check (number, 0, BT_INTEGER) == FAILURE)
3605 if (handler->ts.type != BT_INTEGER && handler->ts.type != BT_PROCEDURE)
3607 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
3608 "or PROCEDURE", gfc_current_intrinsic_arg[1],
3609 gfc_current_intrinsic, &handler->where);
3613 if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE)
3621 gfc_check_signal_sub (gfc_expr *number, gfc_expr *handler, gfc_expr *status)
3623 if (scalar_check (number, 0) == FAILURE)
3626 if (type_check (number, 0, BT_INTEGER) == FAILURE)
3629 if (handler->ts.type != BT_INTEGER && handler->ts.type != BT_PROCEDURE)
3631 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
3632 "or PROCEDURE", gfc_current_intrinsic_arg[1],
3633 gfc_current_intrinsic, &handler->where);
3637 if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE)
3643 if (type_check (status, 2, BT_INTEGER) == FAILURE)
3646 if (scalar_check (status, 2) == FAILURE)
3654 gfc_check_system_sub (gfc_expr *cmd, gfc_expr *status)
3656 if (type_check (cmd, 0, BT_CHARACTER) == FAILURE)
3659 if (scalar_check (status, 1) == FAILURE)
3662 if (type_check (status, 1, BT_INTEGER) == FAILURE)
3665 if (kind_value_check (status, 1, gfc_default_integer_kind) == FAILURE)
3672 /* This is used for the GNU intrinsics AND, OR and XOR. */
3674 gfc_check_and (gfc_expr *i, gfc_expr *j)
3676 if (i->ts.type != BT_INTEGER && i->ts.type != BT_LOGICAL)
3678 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
3679 "or LOGICAL", gfc_current_intrinsic_arg[0],
3680 gfc_current_intrinsic, &i->where);
3684 if (j->ts.type != BT_INTEGER && j->ts.type != BT_LOGICAL)
3686 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
3687 "or LOGICAL", gfc_current_intrinsic_arg[1],
3688 gfc_current_intrinsic, &j->where);
3692 if (i->ts.type != j->ts.type)
3694 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
3695 "have the same type", gfc_current_intrinsic_arg[0],
3696 gfc_current_intrinsic_arg[1], gfc_current_intrinsic,
3701 if (scalar_check (i, 0) == FAILURE)
3704 if (scalar_check (j, 1) == FAILURE)