2 Copyright (C) 2002, 2003, 2004, 2005, 2006 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)
298 if (optional && dim == NULL)
303 gfc_error ("Missing DIM parameter in intrinsic '%s' at %L",
304 gfc_current_intrinsic, gfc_current_intrinsic_where);
308 if (type_check (dim, n, BT_INTEGER) == FAILURE)
311 if (scalar_check (dim, n) == FAILURE)
314 if (nonoptional_check (dim, n) == FAILURE)
321 /* If a DIM parameter is a constant, make sure that it is greater than
322 zero and less than or equal to the rank of the given array. If
323 allow_assumed is zero then dim must be less than the rank of the array
324 for assumed size arrays. */
327 dim_rank_check (gfc_expr * dim, gfc_expr * array, int allow_assumed)
332 if (dim->expr_type != EXPR_CONSTANT || array->expr_type != EXPR_VARIABLE)
335 ar = gfc_find_array_ref (array);
337 if (ar->as->type == AS_ASSUMED_SIZE && !allow_assumed)
340 if (mpz_cmp_ui (dim->value.integer, 1) < 0
341 || mpz_cmp_ui (dim->value.integer, rank) > 0)
343 gfc_error ("'dim' argument of '%s' intrinsic at %L is not a valid "
344 "dimension index", gfc_current_intrinsic, &dim->where);
352 /* Compare the size of a along dimension ai with the size of b along
353 dimension bi, returning 0 if they are known not to be identical,
354 and 1 if they are identical, or if this cannot be determined. */
357 identical_dimen_shape (gfc_expr *a, int ai, gfc_expr *b, int bi)
359 mpz_t a_size, b_size;
362 gcc_assert (a->rank > ai);
363 gcc_assert (b->rank > bi);
367 if (gfc_array_dimen_size (a, ai, &a_size) == SUCCESS)
369 if (gfc_array_dimen_size (b, bi, &b_size) == SUCCESS)
371 if (mpz_cmp (a_size, b_size) != 0)
381 /***** Check functions *****/
383 /* Check subroutine suitable for intrinsics taking a real argument and
384 a kind argument for the result. */
387 check_a_kind (gfc_expr * a, gfc_expr * kind, bt type)
389 if (type_check (a, 0, BT_REAL) == FAILURE)
391 if (kind_check (kind, 1, type) == FAILURE)
397 /* Check subroutine suitable for ceiling, floor and nint. */
400 gfc_check_a_ikind (gfc_expr * a, gfc_expr * kind)
402 return check_a_kind (a, kind, BT_INTEGER);
405 /* Check subroutine suitable for aint, anint. */
408 gfc_check_a_xkind (gfc_expr * a, gfc_expr * kind)
410 return check_a_kind (a, kind, BT_REAL);
414 gfc_check_abs (gfc_expr * a)
416 if (numeric_check (a, 0) == FAILURE)
423 gfc_check_achar (gfc_expr * a)
426 if (type_check (a, 0, BT_INTEGER) == FAILURE)
434 gfc_check_all_any (gfc_expr * mask, gfc_expr * dim)
436 if (logical_array_check (mask, 0) == FAILURE)
439 if (dim_check (dim, 1, 1) == FAILURE)
447 gfc_check_allocated (gfc_expr * array)
449 if (variable_check (array, 0) == FAILURE)
452 if (array_check (array, 0) == FAILURE)
455 if (!array->symtree->n.sym->attr.allocatable)
457 gfc_error ("'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE",
458 gfc_current_intrinsic_arg[0], gfc_current_intrinsic,
467 /* Common check function where the first argument must be real or
468 integer and the second argument must be the same as the first. */
471 gfc_check_a_p (gfc_expr * a, gfc_expr * p)
473 if (int_or_real_check (a, 0) == FAILURE)
476 if (a->ts.type != p->ts.type)
478 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
479 "have the same type", gfc_current_intrinsic_arg[0],
480 gfc_current_intrinsic_arg[1], gfc_current_intrinsic,
485 if (a->ts.kind != p->ts.kind)
487 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
488 &p->where) == FAILURE)
497 gfc_check_associated (gfc_expr * pointer, gfc_expr * target)
499 symbol_attribute attr;
504 where = &pointer->where;
506 if (pointer->expr_type == EXPR_VARIABLE)
507 attr = gfc_variable_attr (pointer, NULL);
508 else if (pointer->expr_type == EXPR_FUNCTION)
509 attr = pointer->symtree->n.sym->attr;
510 else if (pointer->expr_type == EXPR_NULL)
513 gcc_assert (0); /* Pointer must be a variable or a function. */
517 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER",
518 gfc_current_intrinsic_arg[0], gfc_current_intrinsic,
523 /* Target argument is optional. */
527 where = &target->where;
528 if (target->expr_type == EXPR_NULL)
531 if (target->expr_type == EXPR_VARIABLE)
532 attr = gfc_variable_attr (target, NULL);
533 else if (target->expr_type == EXPR_FUNCTION)
534 attr = target->symtree->n.sym->attr;
537 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a pointer "
538 "or target VARIABLE or FUNCTION", gfc_current_intrinsic_arg[1],
539 gfc_current_intrinsic, &target->where);
543 if (!attr.pointer && !attr.target)
545 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER "
546 "or a TARGET", gfc_current_intrinsic_arg[1],
547 gfc_current_intrinsic, &target->where);
552 if (same_type_check (pointer, 0, target, 1) == FAILURE)
554 if (rank_check (target, 0, pointer->rank) == FAILURE)
556 if (target->rank > 0)
558 for (i = 0; i < target->rank; i++)
559 if (target->ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
561 gfc_error ("Array section with a vector subscript at %L shall not "
562 "be the target of a pointer",
572 gfc_error ("NULL pointer at %L is not permitted as actual argument "
573 "of '%s' intrinsic function", where, gfc_current_intrinsic);
580 gfc_check_atan2 (gfc_expr * y, gfc_expr * x)
582 if (type_check (y, 0, BT_REAL) == FAILURE)
584 if (same_type_check (y, 0, x, 1) == FAILURE)
591 /* BESJN and BESYN functions. */
594 gfc_check_besn (gfc_expr * n, gfc_expr * x)
596 if (scalar_check (n, 0) == FAILURE)
599 if (type_check (n, 0, BT_INTEGER) == FAILURE)
602 if (scalar_check (x, 1) == FAILURE)
605 if (type_check (x, 1, BT_REAL) == FAILURE)
613 gfc_check_btest (gfc_expr * i, gfc_expr * pos)
615 if (type_check (i, 0, BT_INTEGER) == FAILURE)
617 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
625 gfc_check_char (gfc_expr * i, gfc_expr * kind)
627 if (type_check (i, 0, BT_INTEGER) == FAILURE)
629 if (kind_check (kind, 1, BT_CHARACTER) == FAILURE)
637 gfc_check_chdir (gfc_expr * dir)
639 if (type_check (dir, 0, BT_CHARACTER) == FAILURE)
647 gfc_check_chdir_sub (gfc_expr * dir, gfc_expr * status)
649 if (type_check (dir, 0, BT_CHARACTER) == FAILURE)
655 if (type_check (status, 1, BT_INTEGER) == FAILURE)
658 if (scalar_check (status, 1) == FAILURE)
666 gfc_check_cmplx (gfc_expr * x, gfc_expr * y, gfc_expr * kind)
668 if (numeric_check (x, 0) == FAILURE)
673 if (numeric_check (y, 1) == FAILURE)
676 if (x->ts.type == BT_COMPLEX)
678 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
679 "present if 'x' is COMPLEX", gfc_current_intrinsic_arg[1],
680 gfc_current_intrinsic, &y->where);
685 if (kind_check (kind, 2, BT_COMPLEX) == FAILURE)
693 gfc_check_complex (gfc_expr * x, gfc_expr * y)
695 if (x->ts.type != BT_INTEGER && x->ts.type != BT_REAL)
698 "'%s' argument of '%s' intrinsic at %L must be INTEGER or REAL",
699 gfc_current_intrinsic_arg[0], gfc_current_intrinsic, &x->where);
702 if (scalar_check (x, 0) == FAILURE)
705 if (y->ts.type != BT_INTEGER && y->ts.type != BT_REAL)
708 "'%s' argument of '%s' intrinsic at %L must be INTEGER or REAL",
709 gfc_current_intrinsic_arg[1], gfc_current_intrinsic, &y->where);
712 if (scalar_check (y, 1) == FAILURE)
720 gfc_check_count (gfc_expr * mask, gfc_expr * dim)
722 if (logical_array_check (mask, 0) == FAILURE)
724 if (dim_check (dim, 1, 1) == FAILURE)
732 gfc_check_cshift (gfc_expr * array, gfc_expr * shift, gfc_expr * dim)
734 if (array_check (array, 0) == FAILURE)
737 if (array->rank == 1)
739 if (scalar_check (shift, 1) == FAILURE)
744 /* TODO: more requirements on shift parameter. */
747 if (dim_check (dim, 2, 1) == FAILURE)
755 gfc_check_ctime (gfc_expr * time)
757 if (scalar_check (time, 0) == FAILURE)
760 if (type_check (time, 0, BT_INTEGER) == FAILURE)
768 gfc_check_dcmplx (gfc_expr * x, gfc_expr * y)
770 if (numeric_check (x, 0) == FAILURE)
775 if (numeric_check (y, 1) == FAILURE)
778 if (x->ts.type == BT_COMPLEX)
780 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
781 "present if 'x' is COMPLEX", gfc_current_intrinsic_arg[1],
782 gfc_current_intrinsic, &y->where);
792 gfc_check_dble (gfc_expr * x)
794 if (numeric_check (x, 0) == FAILURE)
802 gfc_check_digits (gfc_expr * x)
804 if (int_or_real_check (x, 0) == FAILURE)
812 gfc_check_dot_product (gfc_expr * vector_a, gfc_expr * vector_b)
814 switch (vector_a->ts.type)
817 if (type_check (vector_b, 1, BT_LOGICAL) == FAILURE)
824 if (numeric_check (vector_b, 1) == FAILURE)
829 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
830 "or LOGICAL", gfc_current_intrinsic_arg[0],
831 gfc_current_intrinsic, &vector_a->where);
835 if (rank_check (vector_a, 0, 1) == FAILURE)
838 if (rank_check (vector_b, 1, 1) == FAILURE)
841 if (! identical_dimen_shape (vector_a, 0, vector_b, 0))
843 gfc_error ("different shape for arguments '%s' and '%s' "
844 "at %L for intrinsic 'dot_product'",
845 gfc_current_intrinsic_arg[0],
846 gfc_current_intrinsic_arg[1],
856 gfc_check_eoshift (gfc_expr * array, gfc_expr * shift, gfc_expr * boundary,
859 if (array_check (array, 0) == FAILURE)
862 if (type_check (shift, 1, BT_INTEGER) == FAILURE)
865 if (array->rank == 1)
867 if (scalar_check (shift, 2) == FAILURE)
872 /* TODO: more weird restrictions on shift. */
875 if (boundary != NULL)
877 if (same_type_check (array, 0, boundary, 2) == FAILURE)
880 /* TODO: more restrictions on boundary. */
883 if (dim_check (dim, 1, 1) == FAILURE)
890 /* A single complex argument. */
893 gfc_check_fn_c (gfc_expr * a)
895 if (type_check (a, 0, BT_COMPLEX) == FAILURE)
902 /* A single real argument. */
905 gfc_check_fn_r (gfc_expr * a)
907 if (type_check (a, 0, BT_REAL) == FAILURE)
914 /* A single real or complex argument. */
917 gfc_check_fn_rc (gfc_expr * a)
919 if (real_or_complex_check (a, 0) == FAILURE)
927 gfc_check_fnum (gfc_expr * unit)
929 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
932 if (scalar_check (unit, 0) == FAILURE)
939 /* This is used for the g77 one-argument Bessel functions, and the
943 gfc_check_g77_math1 (gfc_expr * x)
945 if (scalar_check (x, 0) == FAILURE)
948 if (type_check (x, 0, BT_REAL) == FAILURE)
956 gfc_check_huge (gfc_expr * x)
958 if (int_or_real_check (x, 0) == FAILURE)
965 /* Check that the single argument is an integer. */
968 gfc_check_i (gfc_expr * i)
970 if (type_check (i, 0, BT_INTEGER) == FAILURE)
978 gfc_check_iand (gfc_expr * i, gfc_expr * j)
980 if (type_check (i, 0, BT_INTEGER) == FAILURE)
983 if (type_check (j, 1, BT_INTEGER) == FAILURE)
986 if (i->ts.kind != j->ts.kind)
988 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
989 &i->where) == FAILURE)
998 gfc_check_ibclr (gfc_expr * i, gfc_expr * pos)
1000 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1003 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
1011 gfc_check_ibits (gfc_expr * i, gfc_expr * pos, gfc_expr * len)
1013 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1016 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
1019 if (type_check (len, 2, BT_INTEGER) == FAILURE)
1027 gfc_check_ibset (gfc_expr * i, gfc_expr * pos)
1029 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1032 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
1040 gfc_check_ichar_iachar (gfc_expr * c)
1044 if (type_check (c, 0, BT_CHARACTER) == FAILURE)
1047 if (c->expr_type == EXPR_VARIABLE || c->expr_type == EXPR_SUBSTRING)
1053 /* Substring references don't have the charlength set. */
1055 while (ref && ref->type != REF_SUBSTRING)
1058 gcc_assert (ref == NULL || ref->type == REF_SUBSTRING);
1062 /* Check that the argument is length one. Non-constant lengths
1063 can't be checked here, so assume they are ok. */
1064 if (c->ts.cl && c->ts.cl->length)
1066 /* If we already have a length for this expression then use it. */
1067 if (c->ts.cl->length->expr_type != EXPR_CONSTANT)
1069 i = mpz_get_si (c->ts.cl->length->value.integer);
1076 start = ref->u.ss.start;
1077 end = ref->u.ss.end;
1080 if (end == NULL || end->expr_type != EXPR_CONSTANT
1081 || start->expr_type != EXPR_CONSTANT)
1084 i = mpz_get_si (end->value.integer) + 1
1085 - mpz_get_si (start->value.integer);
1093 gfc_error ("Argument of %s at %L must be of length one",
1094 gfc_current_intrinsic, &c->where);
1103 gfc_check_idnint (gfc_expr * a)
1105 if (double_check (a, 0) == FAILURE)
1113 gfc_check_ieor (gfc_expr * i, gfc_expr * j)
1115 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1118 if (type_check (j, 1, BT_INTEGER) == FAILURE)
1121 if (i->ts.kind != j->ts.kind)
1123 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
1124 &i->where) == FAILURE)
1133 gfc_check_index (gfc_expr * string, gfc_expr * substring, gfc_expr * back)
1135 if (type_check (string, 0, BT_CHARACTER) == FAILURE
1136 || type_check (substring, 1, BT_CHARACTER) == FAILURE)
1140 if (back != NULL && type_check (back, 2, BT_LOGICAL) == FAILURE)
1143 if (string->ts.kind != substring->ts.kind)
1145 gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same "
1146 "kind as '%s'", gfc_current_intrinsic_arg[1],
1147 gfc_current_intrinsic, &substring->where,
1148 gfc_current_intrinsic_arg[0]);
1157 gfc_check_int (gfc_expr * x, gfc_expr * kind)
1159 if (numeric_check (x, 0) == FAILURE)
1164 if (type_check (kind, 1, BT_INTEGER) == FAILURE)
1167 if (scalar_check (kind, 1) == FAILURE)
1176 gfc_check_ior (gfc_expr * i, gfc_expr * j)
1178 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1181 if (type_check (j, 1, BT_INTEGER) == FAILURE)
1184 if (i->ts.kind != j->ts.kind)
1186 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
1187 &i->where) == FAILURE)
1196 gfc_check_ishft (gfc_expr * i, gfc_expr * shift)
1198 if (type_check (i, 0, BT_INTEGER) == FAILURE
1199 || type_check (shift, 1, BT_INTEGER) == FAILURE)
1207 gfc_check_ishftc (gfc_expr * i, gfc_expr * shift, gfc_expr * size)
1209 if (type_check (i, 0, BT_INTEGER) == FAILURE
1210 || type_check (shift, 1, BT_INTEGER) == FAILURE)
1213 if (size != NULL && type_check (size, 2, BT_INTEGER) == FAILURE)
1221 gfc_check_kill (gfc_expr * pid, gfc_expr * sig)
1223 if (type_check (pid, 0, BT_INTEGER) == FAILURE)
1226 if (type_check (sig, 1, BT_INTEGER) == FAILURE)
1234 gfc_check_kill_sub (gfc_expr * pid, gfc_expr * sig, gfc_expr * status)
1236 if (type_check (pid, 0, BT_INTEGER) == FAILURE)
1239 if (type_check (sig, 1, BT_INTEGER) == FAILURE)
1245 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1248 if (scalar_check (status, 2) == FAILURE)
1256 gfc_check_kind (gfc_expr * x)
1258 if (x->ts.type == BT_DERIVED)
1260 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a "
1261 "non-derived type", gfc_current_intrinsic_arg[0],
1262 gfc_current_intrinsic, &x->where);
1271 gfc_check_lbound (gfc_expr * array, gfc_expr * dim)
1273 if (array_check (array, 0) == FAILURE)
1278 if (dim_check (dim, 1, 1) == FAILURE)
1281 if (dim_rank_check (dim, array, 1) == FAILURE)
1289 gfc_check_link (gfc_expr * path1, gfc_expr * path2)
1291 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1294 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1302 gfc_check_link_sub (gfc_expr * path1, gfc_expr * path2, gfc_expr * status)
1304 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1307 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1313 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1316 if (scalar_check (status, 2) == FAILURE)
1323 gfc_check_loc (gfc_expr *expr)
1325 return variable_check (expr, 0);
1330 gfc_check_symlnk (gfc_expr * path1, gfc_expr * path2)
1332 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1335 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1343 gfc_check_symlnk_sub (gfc_expr * path1, gfc_expr * path2, gfc_expr * status)
1345 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1348 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1354 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1357 if (scalar_check (status, 2) == FAILURE)
1365 gfc_check_logical (gfc_expr * a, gfc_expr * kind)
1367 if (type_check (a, 0, BT_LOGICAL) == FAILURE)
1369 if (kind_check (kind, 1, BT_LOGICAL) == FAILURE)
1376 /* Min/max family. */
1379 min_max_args (gfc_actual_arglist * arg)
1381 if (arg == NULL || arg->next == NULL)
1383 gfc_error ("Intrinsic '%s' at %L must have at least two arguments",
1384 gfc_current_intrinsic, gfc_current_intrinsic_where);
1393 check_rest (bt type, int kind, gfc_actual_arglist * arg)
1398 if (min_max_args (arg) == FAILURE)
1403 for (; arg; arg = arg->next, n++)
1406 if (x->ts.type != type || x->ts.kind != kind)
1408 if (x->ts.type == type)
1410 if (gfc_notify_std (GFC_STD_GNU,
1411 "Extension: Different type kinds at %L", &x->where)
1417 gfc_error ("'a%d' argument of '%s' intrinsic at %L must be %s(%d)",
1418 n, gfc_current_intrinsic, &x->where,
1419 gfc_basic_typename (type), kind);
1430 gfc_check_min_max (gfc_actual_arglist * arg)
1434 if (min_max_args (arg) == FAILURE)
1439 if (x->ts.type != BT_INTEGER && x->ts.type != BT_REAL)
1442 ("'a1' argument of '%s' intrinsic at %L must be INTEGER or REAL",
1443 gfc_current_intrinsic, &x->where);
1447 return check_rest (x->ts.type, x->ts.kind, arg);
1452 gfc_check_min_max_integer (gfc_actual_arglist * arg)
1454 return check_rest (BT_INTEGER, gfc_default_integer_kind, arg);
1459 gfc_check_min_max_real (gfc_actual_arglist * arg)
1461 return check_rest (BT_REAL, gfc_default_real_kind, arg);
1466 gfc_check_min_max_double (gfc_actual_arglist * arg)
1468 return check_rest (BT_REAL, gfc_default_double_kind, arg);
1471 /* End of min/max family. */
1474 gfc_check_malloc (gfc_expr * size)
1476 if (type_check (size, 0, BT_INTEGER) == FAILURE)
1479 if (scalar_check (size, 0) == FAILURE)
1487 gfc_check_matmul (gfc_expr * matrix_a, gfc_expr * matrix_b)
1489 if ((matrix_a->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_b->ts))
1491 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1492 "or LOGICAL", gfc_current_intrinsic_arg[0],
1493 gfc_current_intrinsic, &matrix_a->where);
1497 if ((matrix_b->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_a->ts))
1499 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1500 "or LOGICAL", gfc_current_intrinsic_arg[1],
1501 gfc_current_intrinsic, &matrix_b->where);
1505 switch (matrix_a->rank)
1508 if (rank_check (matrix_b, 1, 2) == FAILURE)
1510 /* Check for case matrix_a has shape(m), matrix_b has shape (m, k). */
1511 if (! identical_dimen_shape (matrix_a, 0, matrix_b, 0))
1513 gfc_error ("different shape on dimension 1 for arguments '%s' "
1514 "and '%s' at %L for intrinsic matmul",
1515 gfc_current_intrinsic_arg[0],
1516 gfc_current_intrinsic_arg[1],
1523 if (matrix_b->rank != 2)
1525 if (rank_check (matrix_b, 1, 1) == FAILURE)
1528 /* matrix_b has rank 1 or 2 here. Common check for the cases
1529 - matrix_a has shape (n,m) and matrix_b has shape (m, k)
1530 - matrix_a has shape (n,m) and matrix_b has shape (m). */
1531 if (! identical_dimen_shape (matrix_a, 1, matrix_b, 0))
1533 gfc_error ("different shape on dimension 2 for argument '%s' and "
1534 "dimension 1 for argument '%s' at %L for intrinsic "
1535 "matmul", gfc_current_intrinsic_arg[0],
1536 gfc_current_intrinsic_arg[1], &matrix_a->where);
1542 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank "
1543 "1 or 2", gfc_current_intrinsic_arg[0],
1544 gfc_current_intrinsic, &matrix_a->where);
1552 /* Whoever came up with this interface was probably on something.
1553 The possibilities for the occupation of the second and third
1560 NULL MASK minloc(array, mask=m)
1563 I.e. in the case of minloc(array,mask), mask will be in the second
1564 position of the argument list and we'll have to fix that up. */
1567 gfc_check_minloc_maxloc (gfc_actual_arglist * ap)
1569 gfc_expr *a, *m, *d;
1572 if (int_or_real_check (a, 0) == FAILURE
1573 || array_check (a, 0) == FAILURE)
1577 m = ap->next->next->expr;
1579 if (m == NULL && d != NULL && d->ts.type == BT_LOGICAL
1580 && ap->next->name == NULL)
1585 ap->next->expr = NULL;
1586 ap->next->next->expr = m;
1589 if (dim_check (d, 1, 1) == FAILURE)
1592 if (d && dim_rank_check (d, a, 0) == FAILURE)
1595 if (m != NULL && type_check (m, 2, BT_LOGICAL) == FAILURE)
1601 snprintf(buffer, sizeof(buffer), "arguments '%s' and '%s' for intrinsic %s",
1602 gfc_current_intrinsic_arg[0], gfc_current_intrinsic_arg[2],
1603 gfc_current_intrinsic);
1604 if (gfc_check_conformance (buffer, a, m) == FAILURE)
1612 /* Similar to minloc/maxloc, the argument list might need to be
1613 reordered for the MINVAL, MAXVAL, PRODUCT, and SUM intrinsics. The
1614 difference is that MINLOC/MAXLOC take an additional KIND argument.
1615 The possibilities are:
1621 NULL MASK minval(array, mask=m)
1624 I.e. in the case of minval(array,mask), mask will be in the second
1625 position of the argument list and we'll have to fix that up. */
1628 check_reduction (gfc_actual_arglist * ap)
1630 gfc_expr *a, *m, *d;
1634 m = ap->next->next->expr;
1636 if (m == NULL && d != NULL && d->ts.type == BT_LOGICAL
1637 && ap->next->name == NULL)
1642 ap->next->expr = NULL;
1643 ap->next->next->expr = m;
1646 if (dim_check (d, 1, 1) == FAILURE)
1649 if (d && dim_rank_check (d, a, 0) == FAILURE)
1652 if (m != NULL && type_check (m, 2, BT_LOGICAL) == FAILURE)
1658 snprintf(buffer, sizeof(buffer), "arguments '%s' and '%s' for intrinsic %s",
1659 gfc_current_intrinsic_arg[0], gfc_current_intrinsic_arg[2],
1660 gfc_current_intrinsic);
1661 if (gfc_check_conformance (buffer, a, m) == FAILURE)
1670 gfc_check_minval_maxval (gfc_actual_arglist * ap)
1672 if (int_or_real_check (ap->expr, 0) == FAILURE
1673 || array_check (ap->expr, 0) == FAILURE)
1676 return check_reduction (ap);
1681 gfc_check_product_sum (gfc_actual_arglist * ap)
1683 if (numeric_check (ap->expr, 0) == FAILURE
1684 || array_check (ap->expr, 0) == FAILURE)
1687 return check_reduction (ap);
1692 gfc_check_merge (gfc_expr * tsource, gfc_expr * fsource, gfc_expr * mask)
1696 if (same_type_check (tsource, 0, fsource, 1) == FAILURE)
1699 if (type_check (mask, 2, BT_LOGICAL) == FAILURE)
1702 snprintf(buffer, sizeof(buffer), "arguments '%s' and '%s' for intrinsic '%s'",
1703 gfc_current_intrinsic_arg[0], gfc_current_intrinsic_arg[1],
1704 gfc_current_intrinsic);
1705 if (gfc_check_conformance (buffer, tsource, fsource) == FAILURE)
1708 snprintf(buffer, sizeof(buffer), "arguments '%s' and '%s' for intrinsic '%s'",
1709 gfc_current_intrinsic_arg[0], gfc_current_intrinsic_arg[2],
1710 gfc_current_intrinsic);
1711 if (gfc_check_conformance (buffer, tsource, mask) == FAILURE)
1719 gfc_check_nearest (gfc_expr * x, gfc_expr * s)
1721 if (type_check (x, 0, BT_REAL) == FAILURE)
1724 if (type_check (s, 1, BT_REAL) == FAILURE)
1732 gfc_check_null (gfc_expr * mold)
1734 symbol_attribute attr;
1739 if (variable_check (mold, 0) == FAILURE)
1742 attr = gfc_variable_attr (mold, NULL);
1746 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER",
1747 gfc_current_intrinsic_arg[0],
1748 gfc_current_intrinsic, &mold->where);
1757 gfc_check_pack (gfc_expr * array, gfc_expr * mask, gfc_expr * vector)
1761 if (array_check (array, 0) == FAILURE)
1764 if (type_check (mask, 1, BT_LOGICAL) == FAILURE)
1767 snprintf(buffer, sizeof(buffer), "arguments '%s' and '%s' for intrinsic '%s'",
1768 gfc_current_intrinsic_arg[0], gfc_current_intrinsic_arg[1],
1769 gfc_current_intrinsic);
1770 if (gfc_check_conformance (buffer, array, mask) == FAILURE)
1775 if (same_type_check (array, 0, vector, 2) == FAILURE)
1778 if (rank_check (vector, 2, 1) == FAILURE)
1781 /* TODO: More constraints here. */
1789 gfc_check_precision (gfc_expr * x)
1791 if (x->ts.type != BT_REAL && x->ts.type != BT_COMPLEX)
1793 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of type "
1794 "REAL or COMPLEX", gfc_current_intrinsic_arg[0],
1795 gfc_current_intrinsic, &x->where);
1804 gfc_check_present (gfc_expr * a)
1808 if (variable_check (a, 0) == FAILURE)
1811 sym = a->symtree->n.sym;
1812 if (!sym->attr.dummy)
1814 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a "
1815 "dummy variable", gfc_current_intrinsic_arg[0],
1816 gfc_current_intrinsic, &a->where);
1820 if (!sym->attr.optional)
1822 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of "
1823 "an OPTIONAL dummy variable", gfc_current_intrinsic_arg[0],
1824 gfc_current_intrinsic, &a->where);
1833 gfc_check_radix (gfc_expr * x)
1835 if (int_or_real_check (x, 0) == FAILURE)
1843 gfc_check_range (gfc_expr * x)
1845 if (numeric_check (x, 0) == FAILURE)
1852 /* real, float, sngl. */
1854 gfc_check_real (gfc_expr * a, gfc_expr * kind)
1856 if (numeric_check (a, 0) == FAILURE)
1859 if (kind_check (kind, 1, BT_REAL) == FAILURE)
1867 gfc_check_rename (gfc_expr * path1, gfc_expr * path2)
1869 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1872 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1880 gfc_check_rename_sub (gfc_expr * path1, gfc_expr * path2, gfc_expr * status)
1882 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1885 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1891 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1894 if (scalar_check (status, 2) == FAILURE)
1902 gfc_check_repeat (gfc_expr * x, gfc_expr * y)
1904 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
1907 if (scalar_check (x, 0) == FAILURE)
1910 if (type_check (y, 0, BT_INTEGER) == FAILURE)
1913 if (scalar_check (y, 1) == FAILURE)
1921 gfc_check_reshape (gfc_expr * source, gfc_expr * shape,
1922 gfc_expr * pad, gfc_expr * order)
1927 if (array_check (source, 0) == FAILURE)
1930 if (rank_check (shape, 1, 1) == FAILURE)
1933 if (type_check (shape, 1, BT_INTEGER) == FAILURE)
1936 if (gfc_array_size (shape, &size) != SUCCESS)
1938 gfc_error ("'shape' argument of 'reshape' intrinsic at %L must be an "
1939 "array of constant size", &shape->where);
1943 m = mpz_cmp_ui (size, GFC_MAX_DIMENSIONS);
1948 gfc_error ("'shape' argument of 'reshape' intrinsic at %L has more "
1949 "than %d elements", &shape->where, GFC_MAX_DIMENSIONS);
1955 if (same_type_check (source, 0, pad, 2) == FAILURE)
1957 if (array_check (pad, 2) == FAILURE)
1961 if (order != NULL && array_check (order, 3) == FAILURE)
1969 gfc_check_scale (gfc_expr * x, gfc_expr * i)
1971 if (type_check (x, 0, BT_REAL) == FAILURE)
1974 if (type_check (i, 1, BT_INTEGER) == FAILURE)
1982 gfc_check_scan (gfc_expr * x, gfc_expr * y, gfc_expr * z)
1984 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
1987 if (type_check (y, 1, BT_CHARACTER) == FAILURE)
1990 if (z != NULL && type_check (z, 2, BT_LOGICAL) == FAILURE)
1993 if (same_type_check (x, 0, y, 1) == FAILURE)
2001 gfc_check_secnds (gfc_expr * r)
2004 if (type_check (r, 0, BT_REAL) == FAILURE)
2007 if (kind_value_check (r, 0, 4) == FAILURE)
2010 if (scalar_check (r, 0) == FAILURE)
2018 gfc_check_selected_int_kind (gfc_expr * r)
2021 if (type_check (r, 0, BT_INTEGER) == FAILURE)
2024 if (scalar_check (r, 0) == FAILURE)
2032 gfc_check_selected_real_kind (gfc_expr * p, gfc_expr * r)
2034 if (p == NULL && r == NULL)
2036 gfc_error ("Missing arguments to %s intrinsic at %L",
2037 gfc_current_intrinsic, gfc_current_intrinsic_where);
2042 if (p != NULL && type_check (p, 0, BT_INTEGER) == FAILURE)
2045 if (r != NULL && type_check (r, 1, BT_INTEGER) == FAILURE)
2053 gfc_check_set_exponent (gfc_expr * x, gfc_expr * i)
2055 if (type_check (x, 0, BT_REAL) == FAILURE)
2058 if (type_check (i, 1, BT_INTEGER) == FAILURE)
2066 gfc_check_shape (gfc_expr * source)
2070 if (source->rank == 0 || source->expr_type != EXPR_VARIABLE)
2073 ar = gfc_find_array_ref (source);
2075 if (ar->as && ar->as->type == AS_ASSUMED_SIZE)
2077 gfc_error ("'source' argument of 'shape' intrinsic at %L must not be "
2078 "an assumed size array", &source->where);
2087 gfc_check_sign (gfc_expr * a, gfc_expr * b)
2089 if (int_or_real_check (a, 0) == FAILURE)
2092 if (same_type_check (a, 0, b, 1) == FAILURE)
2100 gfc_check_size (gfc_expr * array, gfc_expr * dim)
2102 if (array_check (array, 0) == FAILURE)
2107 if (type_check (dim, 1, BT_INTEGER) == FAILURE)
2110 if (kind_value_check (dim, 1, gfc_default_integer_kind) == FAILURE)
2113 if (dim_rank_check (dim, array, 0) == FAILURE)
2122 gfc_check_sleep_sub (gfc_expr * seconds)
2124 if (type_check (seconds, 0, BT_INTEGER) == FAILURE)
2127 if (scalar_check (seconds, 0) == FAILURE)
2135 gfc_check_spread (gfc_expr * source, gfc_expr * dim, gfc_expr * ncopies)
2137 if (source->rank >= GFC_MAX_DIMENSIONS)
2139 gfc_error ("'%s' argument of '%s' intrinsic at %L must be less "
2140 "than rank %d", gfc_current_intrinsic_arg[0],
2141 gfc_current_intrinsic, &source->where, GFC_MAX_DIMENSIONS);
2146 if (dim_check (dim, 1, 0) == FAILURE)
2149 if (type_check (ncopies, 2, BT_INTEGER) == FAILURE)
2152 if (scalar_check (ncopies, 2) == FAILURE)
2159 /* Functions for checking FGETC, FPUTC, FGET and FPUT (subroutines and
2162 gfc_check_fgetputc_sub (gfc_expr * unit, gfc_expr * c, gfc_expr * status)
2164 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2167 if (scalar_check (unit, 0) == FAILURE)
2170 if (type_check (c, 1, BT_CHARACTER) == FAILURE)
2176 if (type_check (status, 2, BT_INTEGER) == FAILURE
2177 || kind_value_check (status, 2, gfc_default_integer_kind) == FAILURE
2178 || scalar_check (status, 2) == FAILURE)
2186 gfc_check_fgetputc (gfc_expr * unit, gfc_expr * c)
2188 return gfc_check_fgetputc_sub (unit, c, NULL);
2193 gfc_check_fgetput_sub (gfc_expr * c, gfc_expr * status)
2195 if (type_check (c, 0, BT_CHARACTER) == FAILURE)
2201 if (type_check (status, 1, BT_INTEGER) == FAILURE
2202 || kind_value_check (status, 1, gfc_default_integer_kind) == FAILURE
2203 || scalar_check (status, 1) == FAILURE)
2211 gfc_check_fgetput (gfc_expr * c)
2213 return gfc_check_fgetput_sub (c, NULL);
2218 gfc_check_fstat (gfc_expr * unit, gfc_expr * array)
2220 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2223 if (scalar_check (unit, 0) == FAILURE)
2226 if (type_check (array, 1, BT_INTEGER) == FAILURE
2227 || kind_value_check (unit, 0, gfc_default_integer_kind) == FAILURE)
2230 if (array_check (array, 1) == FAILURE)
2238 gfc_check_fstat_sub (gfc_expr * unit, gfc_expr * array, gfc_expr * status)
2240 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2243 if (scalar_check (unit, 0) == FAILURE)
2246 if (type_check (array, 1, BT_INTEGER) == FAILURE
2247 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
2250 if (array_check (array, 1) == FAILURE)
2256 if (type_check (status, 2, BT_INTEGER) == FAILURE
2257 || kind_value_check (status, 2, gfc_default_integer_kind) == FAILURE)
2260 if (scalar_check (status, 2) == FAILURE)
2268 gfc_check_ftell (gfc_expr * unit)
2270 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2273 if (scalar_check (unit, 0) == FAILURE)
2281 gfc_check_ftell_sub (gfc_expr * unit, gfc_expr * offset)
2283 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2286 if (scalar_check (unit, 0) == FAILURE)
2289 if (type_check (offset, 1, BT_INTEGER) == FAILURE)
2292 if (scalar_check (offset, 1) == FAILURE)
2300 gfc_check_stat (gfc_expr * name, gfc_expr * array)
2302 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
2305 if (type_check (array, 1, BT_INTEGER) == FAILURE
2306 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
2309 if (array_check (array, 1) == FAILURE)
2317 gfc_check_stat_sub (gfc_expr * name, gfc_expr * array, gfc_expr * status)
2319 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
2322 if (type_check (array, 1, BT_INTEGER) == FAILURE
2323 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
2326 if (array_check (array, 1) == FAILURE)
2332 if (type_check (status, 2, BT_INTEGER) == FAILURE
2333 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
2336 if (scalar_check (status, 2) == FAILURE)
2344 gfc_check_transfer (gfc_expr * source ATTRIBUTE_UNUSED,
2345 gfc_expr * mold ATTRIBUTE_UNUSED,
2350 if (type_check (size, 2, BT_INTEGER) == FAILURE)
2353 if (scalar_check (size, 2) == FAILURE)
2356 if (nonoptional_check (size, 2) == FAILURE)
2365 gfc_check_transpose (gfc_expr * matrix)
2367 if (rank_check (matrix, 0, 2) == FAILURE)
2375 gfc_check_ubound (gfc_expr * array, gfc_expr * dim)
2377 if (array_check (array, 0) == FAILURE)
2382 if (dim_check (dim, 1, 1) == FAILURE)
2385 if (dim_rank_check (dim, array, 0) == FAILURE)
2394 gfc_check_unpack (gfc_expr * vector, gfc_expr * mask, gfc_expr * field)
2396 if (rank_check (vector, 0, 1) == FAILURE)
2399 if (array_check (mask, 1) == FAILURE)
2402 if (type_check (mask, 1, BT_LOGICAL) == FAILURE)
2405 if (same_type_check (vector, 0, field, 2) == FAILURE)
2413 gfc_check_verify (gfc_expr * x, gfc_expr * y, gfc_expr * z)
2415 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
2418 if (same_type_check (x, 0, y, 1) == FAILURE)
2421 if (z != NULL && type_check (z, 2, BT_LOGICAL) == FAILURE)
2429 gfc_check_trim (gfc_expr * x)
2431 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
2434 if (scalar_check (x, 0) == FAILURE)
2442 gfc_check_ttynam (gfc_expr * unit)
2444 if (scalar_check (unit, 0) == FAILURE)
2447 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2454 /* Common check function for the half a dozen intrinsics that have a
2455 single real argument. */
2458 gfc_check_x (gfc_expr * x)
2460 if (type_check (x, 0, BT_REAL) == FAILURE)
2467 /************* Check functions for intrinsic subroutines *************/
2470 gfc_check_cpu_time (gfc_expr * time)
2472 if (scalar_check (time, 0) == FAILURE)
2475 if (type_check (time, 0, BT_REAL) == FAILURE)
2478 if (variable_check (time, 0) == FAILURE)
2486 gfc_check_date_and_time (gfc_expr * date, gfc_expr * time,
2487 gfc_expr * zone, gfc_expr * values)
2491 if (type_check (date, 0, BT_CHARACTER) == FAILURE)
2493 if (scalar_check (date, 0) == FAILURE)
2495 if (variable_check (date, 0) == FAILURE)
2501 if (type_check (time, 1, BT_CHARACTER) == FAILURE)
2503 if (scalar_check (time, 1) == FAILURE)
2505 if (variable_check (time, 1) == FAILURE)
2511 if (type_check (zone, 2, BT_CHARACTER) == FAILURE)
2513 if (scalar_check (zone, 2) == FAILURE)
2515 if (variable_check (zone, 2) == FAILURE)
2521 if (type_check (values, 3, BT_INTEGER) == FAILURE)
2523 if (array_check (values, 3) == FAILURE)
2525 if (rank_check (values, 3, 1) == FAILURE)
2527 if (variable_check (values, 3) == FAILURE)
2536 gfc_check_mvbits (gfc_expr * from, gfc_expr * frompos, gfc_expr * len,
2537 gfc_expr * to, gfc_expr * topos)
2539 if (type_check (from, 0, BT_INTEGER) == FAILURE)
2542 if (type_check (frompos, 1, BT_INTEGER) == FAILURE)
2545 if (type_check (len, 2, BT_INTEGER) == FAILURE)
2548 if (same_type_check (from, 0, to, 3) == FAILURE)
2551 if (variable_check (to, 3) == FAILURE)
2554 if (type_check (topos, 4, BT_INTEGER) == FAILURE)
2562 gfc_check_random_number (gfc_expr * harvest)
2564 if (type_check (harvest, 0, BT_REAL) == FAILURE)
2567 if (variable_check (harvest, 0) == FAILURE)
2575 gfc_check_random_seed (gfc_expr * size, gfc_expr * put, gfc_expr * get)
2579 if (scalar_check (size, 0) == FAILURE)
2582 if (type_check (size, 0, BT_INTEGER) == FAILURE)
2585 if (variable_check (size, 0) == FAILURE)
2588 if (kind_value_check (size, 0, gfc_default_integer_kind) == FAILURE)
2596 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic,
2599 if (array_check (put, 1) == FAILURE)
2602 if (rank_check (put, 1, 1) == FAILURE)
2605 if (type_check (put, 1, BT_INTEGER) == FAILURE)
2608 if (kind_value_check (put, 1, gfc_default_integer_kind) == FAILURE)
2615 if (size != NULL || put != NULL)
2616 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic,
2619 if (array_check (get, 2) == FAILURE)
2622 if (rank_check (get, 2, 1) == FAILURE)
2625 if (type_check (get, 2, BT_INTEGER) == FAILURE)
2628 if (variable_check (get, 2) == FAILURE)
2631 if (kind_value_check (get, 2, gfc_default_integer_kind) == FAILURE)
2639 gfc_check_second_sub (gfc_expr * time)
2641 if (scalar_check (time, 0) == FAILURE)
2644 if (type_check (time, 0, BT_REAL) == FAILURE)
2647 if (kind_value_check(time, 0, 4) == FAILURE)
2654 /* The arguments of SYSTEM_CLOCK are scalar, integer variables. Note,
2655 count, count_rate, and count_max are all optional arguments */
2658 gfc_check_system_clock (gfc_expr * count, gfc_expr * count_rate,
2659 gfc_expr * count_max)
2663 if (scalar_check (count, 0) == FAILURE)
2666 if (type_check (count, 0, BT_INTEGER) == FAILURE)
2669 if (variable_check (count, 0) == FAILURE)
2673 if (count_rate != NULL)
2675 if (scalar_check (count_rate, 1) == FAILURE)
2678 if (type_check (count_rate, 1, BT_INTEGER) == FAILURE)
2681 if (variable_check (count_rate, 1) == FAILURE)
2685 && same_type_check (count, 0, count_rate, 1) == FAILURE)
2690 if (count_max != NULL)
2692 if (scalar_check (count_max, 2) == FAILURE)
2695 if (type_check (count_max, 2, BT_INTEGER) == FAILURE)
2698 if (variable_check (count_max, 2) == FAILURE)
2702 && same_type_check (count, 0, count_max, 2) == FAILURE)
2705 if (count_rate != NULL
2706 && same_type_check (count_rate, 1, count_max, 2) == FAILURE)
2714 gfc_check_irand (gfc_expr * x)
2719 if (scalar_check (x, 0) == FAILURE)
2722 if (type_check (x, 0, BT_INTEGER) == FAILURE)
2725 if (kind_value_check(x, 0, 4) == FAILURE)
2733 gfc_check_alarm_sub (gfc_expr * seconds, gfc_expr * handler, gfc_expr * status)
2735 if (scalar_check (seconds, 0) == FAILURE)
2738 if (type_check (seconds, 0, BT_INTEGER) == FAILURE)
2741 if (handler->ts.type != BT_INTEGER && handler->ts.type != BT_PROCEDURE)
2744 "'%s' argument of '%s' intrinsic at %L must be INTEGER or PROCEDURE",
2745 gfc_current_intrinsic_arg[1], gfc_current_intrinsic, &handler->where);
2749 if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE)
2755 if (scalar_check (status, 2) == FAILURE)
2758 if (type_check (status, 2, BT_INTEGER) == FAILURE)
2766 gfc_check_rand (gfc_expr * x)
2771 if (scalar_check (x, 0) == FAILURE)
2774 if (type_check (x, 0, BT_INTEGER) == FAILURE)
2777 if (kind_value_check(x, 0, 4) == FAILURE)
2784 gfc_check_srand (gfc_expr * x)
2786 if (scalar_check (x, 0) == FAILURE)
2789 if (type_check (x, 0, BT_INTEGER) == FAILURE)
2792 if (kind_value_check(x, 0, 4) == FAILURE)
2799 gfc_check_ctime_sub (gfc_expr * time, gfc_expr * result)
2801 if (scalar_check (time, 0) == FAILURE)
2804 if (type_check (time, 0, BT_INTEGER) == FAILURE)
2807 if (type_check (result, 1, BT_CHARACTER) == FAILURE)
2814 gfc_check_etime (gfc_expr * x)
2816 if (array_check (x, 0) == FAILURE)
2819 if (rank_check (x, 0, 1) == FAILURE)
2822 if (variable_check (x, 0) == FAILURE)
2825 if (type_check (x, 0, BT_REAL) == FAILURE)
2828 if (kind_value_check(x, 0, 4) == FAILURE)
2835 gfc_check_etime_sub (gfc_expr * values, gfc_expr * time)
2837 if (array_check (values, 0) == FAILURE)
2840 if (rank_check (values, 0, 1) == FAILURE)
2843 if (variable_check (values, 0) == FAILURE)
2846 if (type_check (values, 0, BT_REAL) == FAILURE)
2849 if (kind_value_check(values, 0, 4) == FAILURE)
2852 if (scalar_check (time, 1) == FAILURE)
2855 if (type_check (time, 1, BT_REAL) == FAILURE)
2858 if (kind_value_check(time, 1, 4) == FAILURE)
2866 gfc_check_fdate_sub (gfc_expr * date)
2868 if (type_check (date, 0, BT_CHARACTER) == FAILURE)
2876 gfc_check_gerror (gfc_expr * msg)
2878 if (type_check (msg, 0, BT_CHARACTER) == FAILURE)
2886 gfc_check_getcwd_sub (gfc_expr * cwd, gfc_expr * status)
2888 if (type_check (cwd, 0, BT_CHARACTER) == FAILURE)
2894 if (scalar_check (status, 1) == FAILURE)
2897 if (type_check (status, 1, BT_INTEGER) == FAILURE)
2905 gfc_check_getlog (gfc_expr * msg)
2907 if (type_check (msg, 0, BT_CHARACTER) == FAILURE)
2915 gfc_check_exit (gfc_expr * status)
2920 if (type_check (status, 0, BT_INTEGER) == FAILURE)
2923 if (scalar_check (status, 0) == FAILURE)
2931 gfc_check_flush (gfc_expr * unit)
2936 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2939 if (scalar_check (unit, 0) == FAILURE)
2947 gfc_check_free (gfc_expr * i)
2949 if (type_check (i, 0, BT_INTEGER) == FAILURE)
2952 if (scalar_check (i, 0) == FAILURE)
2960 gfc_check_hostnm (gfc_expr * name)
2962 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
2970 gfc_check_hostnm_sub (gfc_expr * name, gfc_expr * status)
2972 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
2978 if (scalar_check (status, 1) == FAILURE)
2981 if (type_check (status, 1, BT_INTEGER) == FAILURE)
2989 gfc_check_ttynam_sub (gfc_expr * unit, gfc_expr * name)
2991 if (scalar_check (unit, 0) == FAILURE)
2994 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2997 if (type_check (name, 1, BT_CHARACTER) == FAILURE)
3005 gfc_check_isatty (gfc_expr * unit)
3010 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3013 if (scalar_check (unit, 0) == FAILURE)
3021 gfc_check_perror (gfc_expr * string)
3023 if (type_check (string, 0, BT_CHARACTER) == FAILURE)
3031 gfc_check_umask (gfc_expr * mask)
3033 if (type_check (mask, 0, BT_INTEGER) == FAILURE)
3036 if (scalar_check (mask, 0) == FAILURE)
3044 gfc_check_umask_sub (gfc_expr * mask, gfc_expr * old)
3046 if (type_check (mask, 0, BT_INTEGER) == FAILURE)
3049 if (scalar_check (mask, 0) == FAILURE)
3055 if (scalar_check (old, 1) == FAILURE)
3058 if (type_check (old, 1, BT_INTEGER) == FAILURE)
3066 gfc_check_unlink (gfc_expr * name)
3068 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
3076 gfc_check_unlink_sub (gfc_expr * name, gfc_expr * status)
3078 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
3084 if (scalar_check (status, 1) == FAILURE)
3087 if (type_check (status, 1, BT_INTEGER) == FAILURE)
3095 gfc_check_signal (gfc_expr * number, gfc_expr * handler)
3097 if (scalar_check (number, 0) == FAILURE)
3100 if (type_check (number, 0, BT_INTEGER) == FAILURE)
3103 if (handler->ts.type != BT_INTEGER && handler->ts.type != BT_PROCEDURE)
3106 "'%s' argument of '%s' intrinsic at %L must be INTEGER or PROCEDURE",
3107 gfc_current_intrinsic_arg[1], gfc_current_intrinsic, &handler->where);
3111 if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE)
3119 gfc_check_signal_sub (gfc_expr * number, gfc_expr * handler, gfc_expr * status)
3121 if (scalar_check (number, 0) == FAILURE)
3124 if (type_check (number, 0, BT_INTEGER) == FAILURE)
3127 if (handler->ts.type != BT_INTEGER && handler->ts.type != BT_PROCEDURE)
3130 "'%s' argument of '%s' intrinsic at %L must be INTEGER or PROCEDURE",
3131 gfc_current_intrinsic_arg[1], gfc_current_intrinsic, &handler->where);
3135 if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE)
3141 if (type_check (status, 2, BT_INTEGER) == FAILURE)
3144 if (scalar_check (status, 2) == FAILURE)
3152 gfc_check_system_sub (gfc_expr * cmd, gfc_expr * status)
3154 if (type_check (cmd, 0, BT_CHARACTER) == FAILURE)
3157 if (scalar_check (status, 1) == FAILURE)
3160 if (type_check (status, 1, BT_INTEGER) == FAILURE)
3163 if (kind_value_check (status, 1, gfc_default_integer_kind) == FAILURE)
3170 /* This is used for the GNU intrinsics AND, OR and XOR. */
3172 gfc_check_and (gfc_expr * i, gfc_expr * j)
3174 if (i->ts.type != BT_INTEGER && i->ts.type != BT_LOGICAL)
3177 "'%s' argument of '%s' intrinsic at %L must be INTEGER or LOGICAL",
3178 gfc_current_intrinsic_arg[0], gfc_current_intrinsic, &i->where);
3182 if (j->ts.type != BT_INTEGER && j->ts.type != BT_LOGICAL)
3185 "'%s' argument of '%s' intrinsic at %L must be INTEGER or LOGICAL",
3186 gfc_current_intrinsic_arg[1], gfc_current_intrinsic, &j->where);
3190 if (i->ts.type != j->ts.type)
3192 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
3193 "have the same type", gfc_current_intrinsic_arg[0],
3194 gfc_current_intrinsic_arg[1], gfc_current_intrinsic,
3199 if (scalar_check (i, 0) == FAILURE)
3202 if (scalar_check (j, 1) == FAILURE)