2 Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
3 Contributed by Andy Vaught & Katherine Holcomb
5 This file is part of GCC.
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 2, or (at your option) any later
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING. If not, write to the Free
19 Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
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 /* Check the type of an expression. */
39 type_check (gfc_expr * e, int n, bt type)
41 if (e->ts.type == type)
44 gfc_error ("'%s' argument of '%s' intrinsic at %L must be %s",
45 gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &e->where,
46 gfc_basic_typename (type));
52 /* Check that the expression is a numeric type. */
55 numeric_check (gfc_expr * e, int n)
57 if (gfc_numeric_ts (&e->ts))
60 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a numeric type",
61 gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &e->where);
67 /* Check that an expression is integer or real. */
70 int_or_real_check (gfc_expr * e, int n)
72 if (e->ts.type != BT_INTEGER && e->ts.type != BT_REAL)
75 "'%s' argument of '%s' intrinsic at %L must be INTEGER or REAL",
76 gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &e->where);
84 /* Check that an expression is real or complex. */
87 real_or_complex_check (gfc_expr * e, int n)
89 if (e->ts.type != BT_REAL && e->ts.type != BT_COMPLEX)
92 "'%s' argument of '%s' intrinsic at %L must be REAL or COMPLEX",
93 gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &e->where);
101 /* Check that the expression is an optional constant integer
102 and that it specifies a valid kind for that type. */
105 kind_check (gfc_expr * k, int n, bt type)
112 if (type_check (k, n, BT_INTEGER) == FAILURE)
115 if (k->expr_type != EXPR_CONSTANT)
118 "'%s' argument of '%s' intrinsic at %L must be a constant",
119 gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &k->where);
123 if (gfc_extract_int (k, &kind) != NULL
124 || gfc_validate_kind (type, kind, true) < 0)
126 gfc_error ("Invalid kind for %s at %L", gfc_basic_typename (type),
135 /* Make sure the expression is a double precision real. */
138 double_check (gfc_expr * d, int n)
140 if (type_check (d, n, BT_REAL) == FAILURE)
143 if (d->ts.kind != gfc_default_double_kind)
146 "'%s' argument of '%s' intrinsic at %L must be double precision",
147 gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &d->where);
155 /* Make sure the expression is a logical array. */
158 logical_array_check (gfc_expr * array, int n)
160 if (array->ts.type != BT_LOGICAL || array->rank == 0)
163 "'%s' argument of '%s' intrinsic at %L must be a logical array",
164 gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &array->where);
172 /* Make sure an expression is an array. */
175 array_check (gfc_expr * e, int n)
180 gfc_error ("'%s' argument of '%s' intrinsic at %L must be an array",
181 gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &e->where);
187 /* Make sure an expression is a scalar. */
190 scalar_check (gfc_expr * e, int n)
195 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a scalar",
196 gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &e->where);
202 /* Make sure two expression have the same type. */
205 same_type_check (gfc_expr * e, int n, gfc_expr * f, int m)
207 if (gfc_compare_types (&e->ts, &f->ts))
210 gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same type "
211 "and kind as '%s'", gfc_current_intrinsic_arg[m],
212 gfc_current_intrinsic, &f->where, gfc_current_intrinsic_arg[n]);
217 /* Make sure that an expression has a certain (nonzero) rank. */
220 rank_check (gfc_expr * e, int n, int rank)
225 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank %d",
226 gfc_current_intrinsic_arg[n], gfc_current_intrinsic,
232 /* Make sure a variable expression is not an optional dummy argument. */
235 nonoptional_check (gfc_expr * e, int n)
237 if (e->expr_type == EXPR_VARIABLE && e->symtree->n.sym->attr.optional)
239 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be OPTIONAL",
240 gfc_current_intrinsic_arg[n], gfc_current_intrinsic,
245 /* TODO: Recursive check on nonoptional variables? */
251 /* Check that an expression has a particular kind. */
254 kind_value_check (gfc_expr * e, int n, int k)
259 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of kind %d",
260 gfc_current_intrinsic_arg[n], gfc_current_intrinsic,
266 /* Make sure an expression is a variable. */
269 variable_check (gfc_expr * e, int n)
271 if ((e->expr_type == EXPR_VARIABLE
272 && e->symtree->n.sym->attr.flavor != FL_PARAMETER)
273 || (e->expr_type == EXPR_FUNCTION
274 && e->symtree->n.sym->result == e->symtree->n.sym))
277 if (e->expr_type == EXPR_VARIABLE
278 && e->symtree->n.sym->attr.intent == INTENT_IN)
280 gfc_error ("'%s' argument of '%s' intrinsic at %L cannot be INTENT(IN)",
281 gfc_current_intrinsic_arg[n], gfc_current_intrinsic,
286 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a variable",
287 gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &e->where);
293 /* Check the common DIM parameter for correctness. */
296 dim_check (gfc_expr * dim, int n, int optional)
303 if (nonoptional_check (dim, n) == FAILURE)
311 gfc_error ("Missing DIM parameter in intrinsic '%s' at %L",
312 gfc_current_intrinsic, gfc_current_intrinsic_where);
316 if (type_check (dim, n, BT_INTEGER) == FAILURE)
319 if (scalar_check (dim, n) == FAILURE)
326 /* If a DIM parameter is a constant, make sure that it is greater than
327 zero and less than or equal to the rank of the given array. If
328 allow_assumed is zero then dim must be less than the rank of the array
329 for assumed size arrays. */
332 dim_rank_check (gfc_expr * dim, gfc_expr * array, int allow_assumed)
337 if (dim->expr_type != EXPR_CONSTANT || array->expr_type != EXPR_VARIABLE)
340 ar = gfc_find_array_ref (array);
342 if (ar->as->type == AS_ASSUMED_SIZE && !allow_assumed)
345 if (mpz_cmp_ui (dim->value.integer, 1) < 0
346 || mpz_cmp_ui (dim->value.integer, rank) > 0)
348 gfc_error ("'dim' argument of '%s' intrinsic at %L is not a valid "
349 "dimension index", gfc_current_intrinsic, &dim->where);
358 /***** Check functions *****/
360 /* Check subroutine suitable for intrinsics taking a real argument and
361 a kind argument for the result. */
364 check_a_kind (gfc_expr * a, gfc_expr * kind, bt type)
366 if (type_check (a, 0, BT_REAL) == FAILURE)
368 if (kind_check (kind, 1, type) == FAILURE)
374 /* Check subroutine suitable for ceiling, floor and nint. */
377 gfc_check_a_ikind (gfc_expr * a, gfc_expr * kind)
379 return check_a_kind (a, kind, BT_INTEGER);
382 /* Check subroutine suitable for aint, anint. */
385 gfc_check_a_xkind (gfc_expr * a, gfc_expr * kind)
387 return check_a_kind (a, kind, BT_REAL);
391 gfc_check_abs (gfc_expr * a)
393 if (numeric_check (a, 0) == FAILURE)
400 gfc_check_achar (gfc_expr * a)
403 if (type_check (a, 0, BT_INTEGER) == FAILURE)
411 gfc_check_all_any (gfc_expr * mask, gfc_expr * dim)
413 if (logical_array_check (mask, 0) == FAILURE)
416 if (dim_check (dim, 1, 1) == FAILURE)
424 gfc_check_allocated (gfc_expr * array)
426 if (variable_check (array, 0) == FAILURE)
429 if (array_check (array, 0) == FAILURE)
432 if (!array->symtree->n.sym->attr.allocatable)
434 gfc_error ("'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE",
435 gfc_current_intrinsic_arg[0], gfc_current_intrinsic,
444 /* Common check function where the first argument must be real or
445 integer and the second argument must be the same as the first. */
448 gfc_check_a_p (gfc_expr * a, gfc_expr * p)
450 if (int_or_real_check (a, 0) == FAILURE)
453 if (same_type_check (a, 0, p, 1) == FAILURE)
461 gfc_check_associated (gfc_expr * pointer, gfc_expr * target)
463 symbol_attribute attr;
467 if (variable_check (pointer, 0) == FAILURE)
470 attr = gfc_variable_attr (pointer, NULL);
473 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER",
474 gfc_current_intrinsic_arg[0], gfc_current_intrinsic,
482 /* Target argument is optional. */
483 if (target->expr_type == EXPR_NULL)
485 gfc_error ("NULL pointer at %L is not permitted as actual argument "
486 "of '%s' intrinsic function",
487 &target->where, gfc_current_intrinsic);
491 attr = gfc_variable_attr (target, NULL);
492 if (!attr.pointer && !attr.target)
494 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER "
495 "or a TARGET", gfc_current_intrinsic_arg[1],
496 gfc_current_intrinsic, &target->where);
501 if (same_type_check (pointer, 0, target, 1) == FAILURE)
503 if (rank_check (target, 0, pointer->rank) == FAILURE)
505 if (target->rank > 0)
507 for (i = 0; i < target->rank; i++)
508 if (target->ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
510 gfc_error ("Array section with a vector subscript at %L shall not "
511 "be the target of a pointer",
522 gfc_check_atan2 (gfc_expr * y, gfc_expr * x)
524 if (type_check (y, 0, BT_REAL) == FAILURE)
526 if (same_type_check (y, 0, x, 1) == FAILURE)
533 /* BESJN and BESYN functions. */
536 gfc_check_besn (gfc_expr * n, gfc_expr * x)
538 if (scalar_check (n, 0) == FAILURE)
541 if (type_check (n, 0, BT_INTEGER) == FAILURE)
544 if (scalar_check (x, 1) == FAILURE)
547 if (type_check (x, 1, BT_REAL) == FAILURE)
555 gfc_check_btest (gfc_expr * i, gfc_expr * pos)
557 if (type_check (i, 0, BT_INTEGER) == FAILURE)
559 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
567 gfc_check_char (gfc_expr * i, gfc_expr * kind)
569 if (type_check (i, 0, BT_INTEGER) == FAILURE)
571 if (kind_check (kind, 1, BT_CHARACTER) == FAILURE)
579 gfc_check_chdir (gfc_expr * dir)
581 if (type_check (dir, 0, BT_CHARACTER) == FAILURE)
589 gfc_check_chdir_sub (gfc_expr * dir, gfc_expr * status)
591 if (type_check (dir, 0, BT_CHARACTER) == FAILURE)
597 if (type_check (status, 1, BT_INTEGER) == FAILURE)
600 if (scalar_check (status, 1) == FAILURE)
608 gfc_check_cmplx (gfc_expr * x, gfc_expr * y, gfc_expr * kind)
610 if (numeric_check (x, 0) == FAILURE)
615 if (numeric_check (y, 1) == FAILURE)
618 if (x->ts.type == BT_COMPLEX)
620 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
621 "present if 'x' is COMPLEX", gfc_current_intrinsic_arg[1],
622 gfc_current_intrinsic, &y->where);
627 if (kind_check (kind, 2, BT_COMPLEX) == FAILURE)
635 gfc_check_count (gfc_expr * mask, gfc_expr * dim)
637 if (logical_array_check (mask, 0) == FAILURE)
639 if (dim_check (dim, 1, 1) == FAILURE)
647 gfc_check_cshift (gfc_expr * array, gfc_expr * shift, gfc_expr * dim)
649 if (array_check (array, 0) == FAILURE)
652 if (array->rank == 1)
654 if (scalar_check (shift, 1) == FAILURE)
659 /* TODO: more requirements on shift parameter. */
662 if (dim_check (dim, 2, 1) == FAILURE)
670 gfc_check_ctime (gfc_expr * time)
672 if (scalar_check (time, 0) == FAILURE)
675 if (type_check (time, 0, BT_INTEGER) == FAILURE)
683 gfc_check_dcmplx (gfc_expr * x, gfc_expr * y)
685 if (numeric_check (x, 0) == FAILURE)
690 if (numeric_check (y, 1) == FAILURE)
693 if (x->ts.type == BT_COMPLEX)
695 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
696 "present if 'x' is COMPLEX", gfc_current_intrinsic_arg[1],
697 gfc_current_intrinsic, &y->where);
707 gfc_check_dble (gfc_expr * x)
709 if (numeric_check (x, 0) == FAILURE)
717 gfc_check_digits (gfc_expr * x)
719 if (int_or_real_check (x, 0) == FAILURE)
727 gfc_check_dot_product (gfc_expr * vector_a, gfc_expr * vector_b)
729 switch (vector_a->ts.type)
732 if (type_check (vector_b, 1, BT_LOGICAL) == FAILURE)
739 if (numeric_check (vector_b, 1) == FAILURE)
744 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
745 "or LOGICAL", gfc_current_intrinsic_arg[0],
746 gfc_current_intrinsic, &vector_a->where);
750 if (rank_check (vector_a, 0, 1) == FAILURE)
753 if (rank_check (vector_b, 1, 1) == FAILURE)
761 gfc_check_eoshift (gfc_expr * array, gfc_expr * shift, gfc_expr * boundary,
764 if (array_check (array, 0) == FAILURE)
767 if (type_check (shift, 1, BT_INTEGER) == FAILURE)
770 if (array->rank == 1)
772 if (scalar_check (shift, 2) == FAILURE)
777 /* TODO: more weird restrictions on shift. */
780 if (boundary != NULL)
782 if (same_type_check (array, 0, boundary, 2) == FAILURE)
785 /* TODO: more restrictions on boundary. */
788 if (dim_check (dim, 1, 1) == FAILURE)
795 /* A single complex argument. */
798 gfc_check_fn_c (gfc_expr * a)
800 if (type_check (a, 0, BT_COMPLEX) == FAILURE)
807 /* A single real argument. */
810 gfc_check_fn_r (gfc_expr * a)
812 if (type_check (a, 0, BT_REAL) == FAILURE)
819 /* A single real or complex argument. */
822 gfc_check_fn_rc (gfc_expr * a)
824 if (real_or_complex_check (a, 0) == FAILURE)
832 gfc_check_fnum (gfc_expr * unit)
834 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
837 if (scalar_check (unit, 0) == FAILURE)
844 /* This is used for the g77 one-argument Bessel functions, and the
848 gfc_check_g77_math1 (gfc_expr * x)
850 if (scalar_check (x, 0) == FAILURE)
853 if (type_check (x, 0, BT_REAL) == FAILURE)
861 gfc_check_huge (gfc_expr * x)
863 if (int_or_real_check (x, 0) == FAILURE)
870 /* Check that the single argument is an integer. */
873 gfc_check_i (gfc_expr * i)
875 if (type_check (i, 0, BT_INTEGER) == FAILURE)
883 gfc_check_iand (gfc_expr * i, gfc_expr * j)
885 if (type_check (i, 0, BT_INTEGER) == FAILURE)
888 if (type_check (j, 1, BT_INTEGER) == FAILURE)
891 if (i->ts.kind != j->ts.kind)
893 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
894 &i->where) == FAILURE)
903 gfc_check_ibclr (gfc_expr * i, gfc_expr * pos)
905 if (type_check (i, 0, BT_INTEGER) == FAILURE)
908 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
916 gfc_check_ibits (gfc_expr * i, gfc_expr * pos, gfc_expr * len)
918 if (type_check (i, 0, BT_INTEGER) == FAILURE)
921 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
924 if (type_check (len, 2, BT_INTEGER) == FAILURE)
932 gfc_check_ibset (gfc_expr * i, gfc_expr * pos)
934 if (type_check (i, 0, BT_INTEGER) == FAILURE)
937 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
945 gfc_check_ichar_iachar (gfc_expr * c)
949 if (type_check (c, 0, BT_CHARACTER) == FAILURE)
952 if (c->expr_type == EXPR_VARIABLE || c->expr_type == EXPR_SUBSTRING)
958 /* Substring references don't have the charlength set. */
960 while (ref && ref->type != REF_SUBSTRING)
963 gcc_assert (ref == NULL || ref->type == REF_SUBSTRING);
967 /* Check that the argument is length one. Non-constant lengths
968 can't be checked here, so assume thay are ok. */
969 if (c->ts.cl && c->ts.cl->length)
971 /* If we already have a length for this expression then use it. */
972 if (c->ts.cl->length->expr_type != EXPR_CONSTANT)
974 i = mpz_get_si (c->ts.cl->length->value.integer);
981 start = ref->u.ss.start;
985 if (end == NULL || end->expr_type != EXPR_CONSTANT
986 || start->expr_type != EXPR_CONSTANT)
989 i = mpz_get_si (end->value.integer) + 1
990 - mpz_get_si (start->value.integer);
998 gfc_error ("Argument of %s at %L must be of length one",
999 gfc_current_intrinsic, &c->where);
1008 gfc_check_idnint (gfc_expr * a)
1010 if (double_check (a, 0) == FAILURE)
1018 gfc_check_ieor (gfc_expr * i, gfc_expr * j)
1020 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1023 if (type_check (j, 1, BT_INTEGER) == FAILURE)
1026 if (i->ts.kind != j->ts.kind)
1028 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
1029 &i->where) == FAILURE)
1038 gfc_check_index (gfc_expr * string, gfc_expr * substring, gfc_expr * back)
1040 if (type_check (string, 0, BT_CHARACTER) == FAILURE
1041 || type_check (substring, 1, BT_CHARACTER) == FAILURE)
1045 if (back != NULL && type_check (back, 2, BT_LOGICAL) == FAILURE)
1048 if (string->ts.kind != substring->ts.kind)
1050 gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same "
1051 "kind as '%s'", gfc_current_intrinsic_arg[1],
1052 gfc_current_intrinsic, &substring->where,
1053 gfc_current_intrinsic_arg[0]);
1062 gfc_check_int (gfc_expr * x, gfc_expr * kind)
1064 if (numeric_check (x, 0) == FAILURE)
1069 if (type_check (kind, 1, BT_INTEGER) == FAILURE)
1072 if (scalar_check (kind, 1) == FAILURE)
1081 gfc_check_ior (gfc_expr * i, gfc_expr * j)
1083 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1086 if (type_check (j, 1, BT_INTEGER) == FAILURE)
1089 if (i->ts.kind != j->ts.kind)
1091 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
1092 &i->where) == FAILURE)
1101 gfc_check_ishft (gfc_expr * i, gfc_expr * shift)
1103 if (type_check (i, 0, BT_INTEGER) == FAILURE
1104 || type_check (shift, 1, BT_INTEGER) == FAILURE)
1112 gfc_check_ishftc (gfc_expr * i, gfc_expr * shift, gfc_expr * size)
1114 if (type_check (i, 0, BT_INTEGER) == FAILURE
1115 || type_check (shift, 1, BT_INTEGER) == FAILURE)
1118 if (size != NULL && type_check (size, 2, BT_INTEGER) == FAILURE)
1126 gfc_check_kill (gfc_expr * pid, gfc_expr * sig)
1128 if (type_check (pid, 0, BT_INTEGER) == FAILURE)
1131 if (type_check (sig, 1, BT_INTEGER) == FAILURE)
1139 gfc_check_kill_sub (gfc_expr * pid, gfc_expr * sig, gfc_expr * status)
1141 if (type_check (pid, 0, BT_INTEGER) == FAILURE)
1144 if (type_check (sig, 1, BT_INTEGER) == FAILURE)
1150 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1153 if (scalar_check (status, 2) == FAILURE)
1161 gfc_check_kind (gfc_expr * x)
1163 if (x->ts.type == BT_DERIVED)
1165 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a "
1166 "non-derived type", gfc_current_intrinsic_arg[0],
1167 gfc_current_intrinsic, &x->where);
1176 gfc_check_lbound (gfc_expr * array, gfc_expr * dim)
1178 if (array_check (array, 0) == FAILURE)
1183 if (dim_check (dim, 1, 1) == FAILURE)
1186 if (dim_rank_check (dim, array, 1) == FAILURE)
1194 gfc_check_link (gfc_expr * path1, gfc_expr * path2)
1196 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1199 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1207 gfc_check_link_sub (gfc_expr * path1, gfc_expr * path2, gfc_expr * status)
1209 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1212 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1218 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1221 if (scalar_check (status, 2) == FAILURE)
1228 gfc_check_loc (gfc_expr *expr)
1230 return variable_check (expr, 0);
1235 gfc_check_symlnk (gfc_expr * path1, gfc_expr * path2)
1237 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1240 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1248 gfc_check_symlnk_sub (gfc_expr * path1, gfc_expr * path2, gfc_expr * status)
1250 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1253 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1259 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1262 if (scalar_check (status, 2) == FAILURE)
1270 gfc_check_logical (gfc_expr * a, gfc_expr * kind)
1272 if (type_check (a, 0, BT_LOGICAL) == FAILURE)
1274 if (kind_check (kind, 1, BT_LOGICAL) == FAILURE)
1281 /* Min/max family. */
1284 min_max_args (gfc_actual_arglist * arg)
1286 if (arg == NULL || arg->next == NULL)
1288 gfc_error ("Intrinsic '%s' at %L must have at least two arguments",
1289 gfc_current_intrinsic, gfc_current_intrinsic_where);
1298 check_rest (bt type, int kind, gfc_actual_arglist * arg)
1303 if (min_max_args (arg) == FAILURE)
1308 for (; arg; arg = arg->next, n++)
1311 if (x->ts.type != type || x->ts.kind != kind)
1313 if (x->ts.type == type)
1315 if (gfc_notify_std (GFC_STD_GNU,
1316 "Extension: Different type kinds at %L", &x->where)
1322 gfc_error ("'a%d' argument of '%s' intrinsic at %L must be %s(%d)",
1323 n, gfc_current_intrinsic, &x->where,
1324 gfc_basic_typename (type), kind);
1335 gfc_check_min_max (gfc_actual_arglist * arg)
1339 if (min_max_args (arg) == FAILURE)
1344 if (x->ts.type != BT_INTEGER && x->ts.type != BT_REAL)
1347 ("'a1' argument of '%s' intrinsic at %L must be INTEGER or REAL",
1348 gfc_current_intrinsic, &x->where);
1352 return check_rest (x->ts.type, x->ts.kind, arg);
1357 gfc_check_min_max_integer (gfc_actual_arglist * arg)
1359 return check_rest (BT_INTEGER, gfc_default_integer_kind, arg);
1364 gfc_check_min_max_real (gfc_actual_arglist * arg)
1366 return check_rest (BT_REAL, gfc_default_real_kind, arg);
1371 gfc_check_min_max_double (gfc_actual_arglist * arg)
1373 return check_rest (BT_REAL, gfc_default_double_kind, arg);
1376 /* End of min/max family. */
1379 gfc_check_malloc (gfc_expr * size)
1381 if (type_check (size, 0, BT_INTEGER) == FAILURE)
1384 if (scalar_check (size, 0) == FAILURE)
1392 gfc_check_matmul (gfc_expr * matrix_a, gfc_expr * matrix_b)
1394 if ((matrix_a->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_b->ts))
1396 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1397 "or LOGICAL", gfc_current_intrinsic_arg[0],
1398 gfc_current_intrinsic, &matrix_a->where);
1402 if ((matrix_b->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_a->ts))
1404 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1405 "or LOGICAL", gfc_current_intrinsic_arg[1],
1406 gfc_current_intrinsic, &matrix_b->where);
1410 switch (matrix_a->rank)
1413 if (rank_check (matrix_b, 1, 2) == FAILURE)
1418 if (matrix_b->rank == 2)
1420 if (rank_check (matrix_b, 1, 1) == FAILURE)
1425 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank "
1426 "1 or 2", gfc_current_intrinsic_arg[0],
1427 gfc_current_intrinsic, &matrix_a->where);
1435 /* Whoever came up with this interface was probably on something.
1436 The possibilities for the occupation of the second and third
1443 NULL MASK minloc(array, mask=m)
1446 I.e. in the case of minloc(array,mask), mask will be in the second
1447 position of the argument list and we'll have to fix that up. */
1450 gfc_check_minloc_maxloc (gfc_actual_arglist * ap)
1452 gfc_expr *a, *m, *d;
1455 if (int_or_real_check (a, 0) == FAILURE
1456 || array_check (a, 0) == FAILURE)
1460 m = ap->next->next->expr;
1462 if (m == NULL && d != NULL && d->ts.type == BT_LOGICAL
1463 && ap->next->name == NULL)
1468 ap->next->expr = NULL;
1469 ap->next->next->expr = m;
1473 && (scalar_check (d, 1) == FAILURE
1474 || type_check (d, 1, BT_INTEGER) == FAILURE))
1477 if (m != NULL && type_check (m, 2, BT_LOGICAL) == FAILURE)
1484 /* Similar to minloc/maxloc, the argument list might need to be
1485 reordered for the MINVAL, MAXVAL, PRODUCT, and SUM intrinsics. The
1486 difference is that MINLOC/MAXLOC take an additional KIND argument.
1487 The possibilities are:
1493 NULL MASK minval(array, mask=m)
1496 I.e. in the case of minval(array,mask), mask will be in the second
1497 position of the argument list and we'll have to fix that up. */
1500 check_reduction (gfc_actual_arglist * ap)
1505 m = ap->next->next->expr;
1507 if (m == NULL && d != NULL && d->ts.type == BT_LOGICAL
1508 && ap->next->name == NULL)
1513 ap->next->expr = NULL;
1514 ap->next->next->expr = m;
1518 && (scalar_check (d, 1) == FAILURE
1519 || type_check (d, 1, BT_INTEGER) == FAILURE))
1522 if (m != NULL && type_check (m, 2, BT_LOGICAL) == FAILURE)
1530 gfc_check_minval_maxval (gfc_actual_arglist * ap)
1532 if (int_or_real_check (ap->expr, 0) == FAILURE
1533 || array_check (ap->expr, 0) == FAILURE)
1536 return check_reduction (ap);
1541 gfc_check_product_sum (gfc_actual_arglist * ap)
1543 if (numeric_check (ap->expr, 0) == FAILURE
1544 || array_check (ap->expr, 0) == FAILURE)
1547 return check_reduction (ap);
1552 gfc_check_merge (gfc_expr * tsource, gfc_expr * fsource, gfc_expr * mask)
1554 if (same_type_check (tsource, 0, fsource, 1) == FAILURE)
1557 if (type_check (mask, 2, BT_LOGICAL) == FAILURE)
1565 gfc_check_nearest (gfc_expr * x, gfc_expr * s)
1567 if (type_check (x, 0, BT_REAL) == FAILURE)
1570 if (type_check (s, 1, BT_REAL) == FAILURE)
1578 gfc_check_null (gfc_expr * mold)
1580 symbol_attribute attr;
1585 if (variable_check (mold, 0) == FAILURE)
1588 attr = gfc_variable_attr (mold, NULL);
1592 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER",
1593 gfc_current_intrinsic_arg[0],
1594 gfc_current_intrinsic, &mold->where);
1603 gfc_check_pack (gfc_expr * array, gfc_expr * mask, gfc_expr * vector)
1605 if (array_check (array, 0) == FAILURE)
1608 if (type_check (mask, 1, BT_LOGICAL) == FAILURE)
1611 if (mask->rank != 0 && mask->rank != array->rank)
1613 gfc_error ("'%s' argument of '%s' intrinsic at %L must be conformable "
1614 "with '%s' argument", gfc_current_intrinsic_arg[0],
1615 gfc_current_intrinsic, &array->where,
1616 gfc_current_intrinsic_arg[1]);
1622 if (same_type_check (array, 0, vector, 2) == FAILURE)
1625 if (rank_check (vector, 2, 1) == FAILURE)
1628 /* TODO: More constraints here. */
1636 gfc_check_precision (gfc_expr * x)
1638 if (x->ts.type != BT_REAL && x->ts.type != BT_COMPLEX)
1640 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of type "
1641 "REAL or COMPLEX", gfc_current_intrinsic_arg[0],
1642 gfc_current_intrinsic, &x->where);
1651 gfc_check_present (gfc_expr * a)
1655 if (variable_check (a, 0) == FAILURE)
1658 sym = a->symtree->n.sym;
1659 if (!sym->attr.dummy)
1661 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a "
1662 "dummy variable", gfc_current_intrinsic_arg[0],
1663 gfc_current_intrinsic, &a->where);
1667 if (!sym->attr.optional)
1669 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of "
1670 "an OPTIONAL dummy variable", gfc_current_intrinsic_arg[0],
1671 gfc_current_intrinsic, &a->where);
1680 gfc_check_radix (gfc_expr * x)
1682 if (int_or_real_check (x, 0) == FAILURE)
1690 gfc_check_range (gfc_expr * x)
1692 if (numeric_check (x, 0) == FAILURE)
1699 /* real, float, sngl. */
1701 gfc_check_real (gfc_expr * a, gfc_expr * kind)
1703 if (numeric_check (a, 0) == FAILURE)
1706 if (kind_check (kind, 1, BT_REAL) == FAILURE)
1714 gfc_check_rename (gfc_expr * path1, gfc_expr * path2)
1716 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1719 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1727 gfc_check_rename_sub (gfc_expr * path1, gfc_expr * path2, gfc_expr * status)
1729 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1732 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1738 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1741 if (scalar_check (status, 2) == FAILURE)
1749 gfc_check_repeat (gfc_expr * x, gfc_expr * y)
1751 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
1754 if (scalar_check (x, 0) == FAILURE)
1757 if (type_check (y, 0, BT_INTEGER) == FAILURE)
1760 if (scalar_check (y, 1) == FAILURE)
1768 gfc_check_reshape (gfc_expr * source, gfc_expr * shape,
1769 gfc_expr * pad, gfc_expr * order)
1774 if (array_check (source, 0) == FAILURE)
1777 if (rank_check (shape, 1, 1) == FAILURE)
1780 if (type_check (shape, 1, BT_INTEGER) == FAILURE)
1783 if (gfc_array_size (shape, &size) != SUCCESS)
1785 gfc_error ("'shape' argument of 'reshape' intrinsic at %L must be an "
1786 "array of constant size", &shape->where);
1790 m = mpz_cmp_ui (size, GFC_MAX_DIMENSIONS);
1795 gfc_error ("'shape' argument of 'reshape' intrinsic at %L has more "
1796 "than %d elements", &shape->where, GFC_MAX_DIMENSIONS);
1802 if (same_type_check (source, 0, pad, 2) == FAILURE)
1804 if (array_check (pad, 2) == FAILURE)
1808 if (order != NULL && array_check (order, 3) == FAILURE)
1816 gfc_check_scale (gfc_expr * x, gfc_expr * i)
1818 if (type_check (x, 0, BT_REAL) == FAILURE)
1821 if (type_check (i, 1, BT_INTEGER) == FAILURE)
1829 gfc_check_scan (gfc_expr * x, gfc_expr * y, gfc_expr * z)
1831 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
1834 if (type_check (y, 1, BT_CHARACTER) == FAILURE)
1837 if (z != NULL && type_check (z, 2, BT_LOGICAL) == FAILURE)
1840 if (same_type_check (x, 0, y, 1) == FAILURE)
1848 gfc_check_secnds (gfc_expr * r)
1851 if (type_check (r, 0, BT_REAL) == FAILURE)
1854 if (kind_value_check (r, 0, 4) == FAILURE)
1857 if (scalar_check (r, 0) == FAILURE)
1865 gfc_check_selected_int_kind (gfc_expr * r)
1868 if (type_check (r, 0, BT_INTEGER) == FAILURE)
1871 if (scalar_check (r, 0) == FAILURE)
1879 gfc_check_selected_real_kind (gfc_expr * p, gfc_expr * r)
1881 if (p == NULL && r == NULL)
1883 gfc_error ("Missing arguments to %s intrinsic at %L",
1884 gfc_current_intrinsic, gfc_current_intrinsic_where);
1889 if (p != NULL && type_check (p, 0, BT_INTEGER) == FAILURE)
1892 if (r != NULL && type_check (r, 1, BT_INTEGER) == FAILURE)
1900 gfc_check_set_exponent (gfc_expr * x, gfc_expr * i)
1902 if (type_check (x, 0, BT_REAL) == FAILURE)
1905 if (type_check (i, 1, BT_INTEGER) == FAILURE)
1913 gfc_check_shape (gfc_expr * source)
1917 if (source->rank == 0 || source->expr_type != EXPR_VARIABLE)
1920 ar = gfc_find_array_ref (source);
1922 if (ar->as && ar->as->type == AS_ASSUMED_SIZE)
1924 gfc_error ("'source' argument of 'shape' intrinsic at %L must not be "
1925 "an assumed size array", &source->where);
1934 gfc_check_sign (gfc_expr * a, gfc_expr * b)
1936 if (int_or_real_check (a, 0) == FAILURE)
1939 if (same_type_check (a, 0, b, 1) == FAILURE)
1947 gfc_check_size (gfc_expr * array, gfc_expr * dim)
1949 if (array_check (array, 0) == FAILURE)
1954 if (type_check (dim, 1, BT_INTEGER) == FAILURE)
1957 if (kind_value_check (dim, 1, gfc_default_integer_kind) == FAILURE)
1960 if (dim_rank_check (dim, array, 0) == FAILURE)
1969 gfc_check_sleep_sub (gfc_expr * seconds)
1971 if (type_check (seconds, 0, BT_INTEGER) == FAILURE)
1974 if (scalar_check (seconds, 0) == FAILURE)
1982 gfc_check_spread (gfc_expr * source, gfc_expr * dim, gfc_expr * ncopies)
1984 if (source->rank >= GFC_MAX_DIMENSIONS)
1986 gfc_error ("'%s' argument of '%s' intrinsic at %L must be less "
1987 "than rank %d", gfc_current_intrinsic_arg[0],
1988 gfc_current_intrinsic, &source->where, GFC_MAX_DIMENSIONS);
1993 if (dim_check (dim, 1, 0) == FAILURE)
1996 if (type_check (ncopies, 2, BT_INTEGER) == FAILURE)
1999 if (scalar_check (ncopies, 2) == FAILURE)
2007 gfc_check_fstat (gfc_expr * unit, gfc_expr * array)
2009 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2012 if (scalar_check (unit, 0) == FAILURE)
2015 if (type_check (array, 1, BT_INTEGER) == FAILURE
2016 || kind_value_check (unit, 0, gfc_default_integer_kind) == FAILURE)
2019 if (array_check (array, 1) == FAILURE)
2027 gfc_check_fstat_sub (gfc_expr * unit, gfc_expr * array, gfc_expr * status)
2029 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2032 if (scalar_check (unit, 0) == FAILURE)
2035 if (type_check (array, 1, BT_INTEGER) == FAILURE
2036 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
2039 if (array_check (array, 1) == FAILURE)
2045 if (type_check (status, 2, BT_INTEGER) == FAILURE
2046 || kind_value_check (status, 2, gfc_default_integer_kind) == FAILURE)
2049 if (scalar_check (status, 2) == FAILURE)
2057 gfc_check_stat (gfc_expr * name, gfc_expr * array)
2059 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
2062 if (type_check (array, 1, BT_INTEGER) == FAILURE
2063 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
2066 if (array_check (array, 1) == FAILURE)
2074 gfc_check_stat_sub (gfc_expr * name, gfc_expr * array, gfc_expr * status)
2076 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
2079 if (type_check (array, 1, BT_INTEGER) == FAILURE
2080 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
2083 if (array_check (array, 1) == FAILURE)
2089 if (type_check (status, 2, BT_INTEGER) == FAILURE
2090 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
2093 if (scalar_check (status, 2) == FAILURE)
2101 gfc_check_transfer (gfc_expr * source ATTRIBUTE_UNUSED,
2102 gfc_expr * mold ATTRIBUTE_UNUSED,
2107 if (type_check (size, 2, BT_INTEGER) == FAILURE)
2110 if (scalar_check (size, 2) == FAILURE)
2113 if (nonoptional_check (size, 2) == FAILURE)
2122 gfc_check_transpose (gfc_expr * matrix)
2124 if (rank_check (matrix, 0, 2) == FAILURE)
2132 gfc_check_ubound (gfc_expr * array, gfc_expr * dim)
2134 if (array_check (array, 0) == FAILURE)
2139 if (dim_check (dim, 1, 1) == FAILURE)
2142 if (dim_rank_check (dim, array, 0) == FAILURE)
2151 gfc_check_unpack (gfc_expr * vector, gfc_expr * mask, gfc_expr * field)
2153 if (rank_check (vector, 0, 1) == FAILURE)
2156 if (array_check (mask, 1) == FAILURE)
2159 if (type_check (mask, 1, BT_LOGICAL) == FAILURE)
2162 if (same_type_check (vector, 0, field, 2) == FAILURE)
2170 gfc_check_verify (gfc_expr * x, gfc_expr * y, gfc_expr * z)
2172 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
2175 if (same_type_check (x, 0, y, 1) == FAILURE)
2178 if (z != NULL && type_check (z, 2, BT_LOGICAL) == FAILURE)
2186 gfc_check_trim (gfc_expr * x)
2188 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
2191 if (scalar_check (x, 0) == FAILURE)
2199 gfc_check_ttynam (gfc_expr * unit)
2201 if (scalar_check (unit, 0) == FAILURE)
2204 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2211 /* Common check function for the half a dozen intrinsics that have a
2212 single real argument. */
2215 gfc_check_x (gfc_expr * x)
2217 if (type_check (x, 0, BT_REAL) == FAILURE)
2224 /************* Check functions for intrinsic subroutines *************/
2227 gfc_check_cpu_time (gfc_expr * time)
2229 if (scalar_check (time, 0) == FAILURE)
2232 if (type_check (time, 0, BT_REAL) == FAILURE)
2235 if (variable_check (time, 0) == FAILURE)
2243 gfc_check_date_and_time (gfc_expr * date, gfc_expr * time,
2244 gfc_expr * zone, gfc_expr * values)
2248 if (type_check (date, 0, BT_CHARACTER) == FAILURE)
2250 if (scalar_check (date, 0) == FAILURE)
2252 if (variable_check (date, 0) == FAILURE)
2258 if (type_check (time, 1, BT_CHARACTER) == FAILURE)
2260 if (scalar_check (time, 1) == FAILURE)
2262 if (variable_check (time, 1) == FAILURE)
2268 if (type_check (zone, 2, BT_CHARACTER) == FAILURE)
2270 if (scalar_check (zone, 2) == FAILURE)
2272 if (variable_check (zone, 2) == FAILURE)
2278 if (type_check (values, 3, BT_INTEGER) == FAILURE)
2280 if (array_check (values, 3) == FAILURE)
2282 if (rank_check (values, 3, 1) == FAILURE)
2284 if (variable_check (values, 3) == FAILURE)
2293 gfc_check_mvbits (gfc_expr * from, gfc_expr * frompos, gfc_expr * len,
2294 gfc_expr * to, gfc_expr * topos)
2296 if (type_check (from, 0, BT_INTEGER) == FAILURE)
2299 if (type_check (frompos, 1, BT_INTEGER) == FAILURE)
2302 if (type_check (len, 2, BT_INTEGER) == FAILURE)
2305 if (same_type_check (from, 0, to, 3) == FAILURE)
2308 if (variable_check (to, 3) == FAILURE)
2311 if (type_check (topos, 4, BT_INTEGER) == FAILURE)
2319 gfc_check_random_number (gfc_expr * harvest)
2321 if (type_check (harvest, 0, BT_REAL) == FAILURE)
2324 if (variable_check (harvest, 0) == FAILURE)
2332 gfc_check_random_seed (gfc_expr * size, gfc_expr * put, gfc_expr * get)
2336 if (scalar_check (size, 0) == FAILURE)
2339 if (type_check (size, 0, BT_INTEGER) == FAILURE)
2342 if (variable_check (size, 0) == FAILURE)
2345 if (kind_value_check (size, 0, gfc_default_integer_kind) == FAILURE)
2353 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic,
2356 if (array_check (put, 1) == FAILURE)
2359 if (rank_check (put, 1, 1) == FAILURE)
2362 if (type_check (put, 1, BT_INTEGER) == FAILURE)
2365 if (kind_value_check (put, 1, gfc_default_integer_kind) == FAILURE)
2372 if (size != NULL || put != NULL)
2373 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic,
2376 if (array_check (get, 2) == FAILURE)
2379 if (rank_check (get, 2, 1) == FAILURE)
2382 if (type_check (get, 2, BT_INTEGER) == FAILURE)
2385 if (variable_check (get, 2) == FAILURE)
2388 if (kind_value_check (get, 2, gfc_default_integer_kind) == FAILURE)
2396 gfc_check_second_sub (gfc_expr * time)
2398 if (scalar_check (time, 0) == FAILURE)
2401 if (type_check (time, 0, BT_REAL) == FAILURE)
2404 if (kind_value_check(time, 0, 4) == FAILURE)
2411 /* The arguments of SYSTEM_CLOCK are scalar, integer variables. Note,
2412 count, count_rate, and count_max are all optional arguments */
2415 gfc_check_system_clock (gfc_expr * count, gfc_expr * count_rate,
2416 gfc_expr * count_max)
2420 if (scalar_check (count, 0) == FAILURE)
2423 if (type_check (count, 0, BT_INTEGER) == FAILURE)
2426 if (variable_check (count, 0) == FAILURE)
2430 if (count_rate != NULL)
2432 if (scalar_check (count_rate, 1) == FAILURE)
2435 if (type_check (count_rate, 1, BT_INTEGER) == FAILURE)
2438 if (variable_check (count_rate, 1) == FAILURE)
2442 && same_type_check (count, 0, count_rate, 1) == FAILURE)
2447 if (count_max != NULL)
2449 if (scalar_check (count_max, 2) == FAILURE)
2452 if (type_check (count_max, 2, BT_INTEGER) == FAILURE)
2455 if (variable_check (count_max, 2) == FAILURE)
2459 && same_type_check (count, 0, count_max, 2) == FAILURE)
2462 if (count_rate != NULL
2463 && same_type_check (count_rate, 1, count_max, 2) == FAILURE)
2471 gfc_check_irand (gfc_expr * x)
2476 if (scalar_check (x, 0) == FAILURE)
2479 if (type_check (x, 0, BT_INTEGER) == FAILURE)
2482 if (kind_value_check(x, 0, 4) == FAILURE)
2490 gfc_check_alarm_sub (gfc_expr * seconds, gfc_expr * handler, gfc_expr * status)
2492 if (scalar_check (seconds, 0) == FAILURE)
2495 if (type_check (seconds, 0, BT_INTEGER) == FAILURE)
2498 if (handler->ts.type != BT_INTEGER && handler->ts.type != BT_PROCEDURE)
2501 "'%s' argument of '%s' intrinsic at %L must be INTEGER or PROCEDURE",
2502 gfc_current_intrinsic_arg[1], gfc_current_intrinsic, &handler->where);
2506 if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE)
2512 if (scalar_check (status, 2) == FAILURE)
2515 if (type_check (status, 2, BT_INTEGER) == FAILURE)
2523 gfc_check_rand (gfc_expr * x)
2528 if (scalar_check (x, 0) == FAILURE)
2531 if (type_check (x, 0, BT_INTEGER) == FAILURE)
2534 if (kind_value_check(x, 0, 4) == FAILURE)
2541 gfc_check_srand (gfc_expr * x)
2543 if (scalar_check (x, 0) == FAILURE)
2546 if (type_check (x, 0, BT_INTEGER) == FAILURE)
2549 if (kind_value_check(x, 0, 4) == FAILURE)
2556 gfc_check_ctime_sub (gfc_expr * time, gfc_expr * result)
2558 if (scalar_check (time, 0) == FAILURE)
2561 if (type_check (time, 0, BT_INTEGER) == FAILURE)
2564 if (type_check (result, 1, BT_CHARACTER) == FAILURE)
2571 gfc_check_etime (gfc_expr * x)
2573 if (array_check (x, 0) == FAILURE)
2576 if (rank_check (x, 0, 1) == FAILURE)
2579 if (variable_check (x, 0) == FAILURE)
2582 if (type_check (x, 0, BT_REAL) == FAILURE)
2585 if (kind_value_check(x, 0, 4) == FAILURE)
2592 gfc_check_etime_sub (gfc_expr * values, gfc_expr * time)
2594 if (array_check (values, 0) == FAILURE)
2597 if (rank_check (values, 0, 1) == FAILURE)
2600 if (variable_check (values, 0) == FAILURE)
2603 if (type_check (values, 0, BT_REAL) == FAILURE)
2606 if (kind_value_check(values, 0, 4) == FAILURE)
2609 if (scalar_check (time, 1) == FAILURE)
2612 if (type_check (time, 1, BT_REAL) == FAILURE)
2615 if (kind_value_check(time, 1, 4) == FAILURE)
2623 gfc_check_fdate_sub (gfc_expr * date)
2625 if (type_check (date, 0, BT_CHARACTER) == FAILURE)
2633 gfc_check_gerror (gfc_expr * msg)
2635 if (type_check (msg, 0, BT_CHARACTER) == FAILURE)
2643 gfc_check_getcwd_sub (gfc_expr * cwd, gfc_expr * status)
2645 if (type_check (cwd, 0, BT_CHARACTER) == FAILURE)
2651 if (scalar_check (status, 1) == FAILURE)
2654 if (type_check (status, 1, BT_INTEGER) == FAILURE)
2662 gfc_check_getlog (gfc_expr * msg)
2664 if (type_check (msg, 0, BT_CHARACTER) == FAILURE)
2672 gfc_check_exit (gfc_expr * status)
2677 if (type_check (status, 0, BT_INTEGER) == FAILURE)
2680 if (scalar_check (status, 0) == FAILURE)
2688 gfc_check_flush (gfc_expr * unit)
2693 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2696 if (scalar_check (unit, 0) == FAILURE)
2704 gfc_check_free (gfc_expr * i)
2706 if (type_check (i, 0, BT_INTEGER) == FAILURE)
2709 if (scalar_check (i, 0) == FAILURE)
2717 gfc_check_hostnm (gfc_expr * name)
2719 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
2727 gfc_check_hostnm_sub (gfc_expr * name, gfc_expr * status)
2729 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
2735 if (scalar_check (status, 1) == FAILURE)
2738 if (type_check (status, 1, BT_INTEGER) == FAILURE)
2746 gfc_check_ttynam_sub (gfc_expr * unit, gfc_expr * name)
2748 if (scalar_check (unit, 0) == FAILURE)
2751 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2754 if (type_check (name, 1, BT_CHARACTER) == FAILURE)
2762 gfc_check_isatty (gfc_expr * unit)
2767 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2770 if (scalar_check (unit, 0) == FAILURE)
2778 gfc_check_perror (gfc_expr * string)
2780 if (type_check (string, 0, BT_CHARACTER) == FAILURE)
2788 gfc_check_umask (gfc_expr * mask)
2790 if (type_check (mask, 0, BT_INTEGER) == FAILURE)
2793 if (scalar_check (mask, 0) == FAILURE)
2801 gfc_check_umask_sub (gfc_expr * mask, gfc_expr * old)
2803 if (type_check (mask, 0, BT_INTEGER) == FAILURE)
2806 if (scalar_check (mask, 0) == FAILURE)
2812 if (scalar_check (old, 1) == FAILURE)
2815 if (type_check (old, 1, BT_INTEGER) == FAILURE)
2823 gfc_check_unlink (gfc_expr * name)
2825 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
2833 gfc_check_unlink_sub (gfc_expr * name, gfc_expr * status)
2835 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
2841 if (scalar_check (status, 1) == FAILURE)
2844 if (type_check (status, 1, BT_INTEGER) == FAILURE)
2852 gfc_check_signal (gfc_expr * number, gfc_expr * handler)
2854 if (scalar_check (number, 0) == FAILURE)
2857 if (type_check (number, 0, BT_INTEGER) == FAILURE)
2860 if (handler->ts.type != BT_INTEGER && handler->ts.type != BT_PROCEDURE)
2863 "'%s' argument of '%s' intrinsic at %L must be INTEGER or PROCEDURE",
2864 gfc_current_intrinsic_arg[1], gfc_current_intrinsic, &handler->where);
2868 if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE)
2876 gfc_check_signal_sub (gfc_expr * number, gfc_expr * handler, gfc_expr * status)
2878 if (scalar_check (number, 0) == FAILURE)
2881 if (type_check (number, 0, BT_INTEGER) == FAILURE)
2884 if (handler->ts.type != BT_INTEGER && handler->ts.type != BT_PROCEDURE)
2887 "'%s' argument of '%s' intrinsic at %L must be INTEGER or PROCEDURE",
2888 gfc_current_intrinsic_arg[1], gfc_current_intrinsic, &handler->where);
2892 if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE)
2898 if (type_check (status, 2, BT_INTEGER) == FAILURE)
2901 if (scalar_check (status, 2) == FAILURE)
2909 gfc_check_system_sub (gfc_expr * cmd, gfc_expr * status)
2911 if (type_check (cmd, 0, BT_CHARACTER) == FAILURE)
2914 if (scalar_check (status, 1) == FAILURE)
2917 if (type_check (status, 1, BT_INTEGER) == FAILURE)
2920 if (kind_value_check (status, 1, gfc_default_integer_kind) == FAILURE)