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;
503 if (pointer->expr_type == EXPR_VARIABLE)
504 attr = gfc_variable_attr (pointer, NULL);
505 else if (pointer->expr_type == EXPR_FUNCTION)
506 attr = pointer->symtree->n.sym->attr;
508 gcc_assert (0); /* Pointer must be a variable or a function. */
512 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER",
513 gfc_current_intrinsic_arg[0], gfc_current_intrinsic,
518 /* Target argument is optional. */
522 if (target->expr_type == EXPR_NULL)
524 gfc_error ("NULL pointer at %L is not permitted as actual argument "
525 "of '%s' intrinsic function",
526 &target->where, gfc_current_intrinsic);
530 if (target->expr_type == EXPR_VARIABLE)
531 attr = gfc_variable_attr (target, NULL);
532 else if (target->expr_type == EXPR_FUNCTION)
533 attr = target->symtree->n.sym->attr;
536 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a pointer "
537 "or target VARIABLE or FUNCTION", gfc_current_intrinsic_arg[1],
538 gfc_current_intrinsic, &target->where);
542 if (!attr.pointer && !attr.target)
544 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER "
545 "or a TARGET", gfc_current_intrinsic_arg[1],
546 gfc_current_intrinsic, &target->where);
551 if (same_type_check (pointer, 0, target, 1) == FAILURE)
553 if (rank_check (target, 0, pointer->rank) == FAILURE)
555 if (target->rank > 0)
557 for (i = 0; i < target->rank; i++)
558 if (target->ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
560 gfc_error ("Array section with a vector subscript at %L shall not "
561 "be the target of a pointer",
572 gfc_check_atan2 (gfc_expr * y, gfc_expr * x)
574 if (type_check (y, 0, BT_REAL) == FAILURE)
576 if (same_type_check (y, 0, x, 1) == FAILURE)
583 /* BESJN and BESYN functions. */
586 gfc_check_besn (gfc_expr * n, gfc_expr * x)
588 if (scalar_check (n, 0) == FAILURE)
591 if (type_check (n, 0, BT_INTEGER) == FAILURE)
594 if (scalar_check (x, 1) == FAILURE)
597 if (type_check (x, 1, BT_REAL) == FAILURE)
605 gfc_check_btest (gfc_expr * i, gfc_expr * pos)
607 if (type_check (i, 0, BT_INTEGER) == FAILURE)
609 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
617 gfc_check_char (gfc_expr * i, gfc_expr * kind)
619 if (type_check (i, 0, BT_INTEGER) == FAILURE)
621 if (kind_check (kind, 1, BT_CHARACTER) == FAILURE)
629 gfc_check_chdir (gfc_expr * dir)
631 if (type_check (dir, 0, BT_CHARACTER) == FAILURE)
639 gfc_check_chdir_sub (gfc_expr * dir, gfc_expr * status)
641 if (type_check (dir, 0, BT_CHARACTER) == FAILURE)
647 if (type_check (status, 1, BT_INTEGER) == FAILURE)
650 if (scalar_check (status, 1) == FAILURE)
658 gfc_check_cmplx (gfc_expr * x, gfc_expr * y, gfc_expr * kind)
660 if (numeric_check (x, 0) == FAILURE)
665 if (numeric_check (y, 1) == FAILURE)
668 if (x->ts.type == BT_COMPLEX)
670 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
671 "present if 'x' is COMPLEX", gfc_current_intrinsic_arg[1],
672 gfc_current_intrinsic, &y->where);
677 if (kind_check (kind, 2, BT_COMPLEX) == FAILURE)
685 gfc_check_complex (gfc_expr * x, gfc_expr * y)
687 if (x->ts.type != BT_INTEGER && x->ts.type != BT_REAL)
690 "'%s' argument of '%s' intrinsic at %L must be INTEGER or REAL",
691 gfc_current_intrinsic_arg[0], gfc_current_intrinsic, &x->where);
694 if (scalar_check (x, 0) == FAILURE)
697 if (y->ts.type != BT_INTEGER && y->ts.type != BT_REAL)
700 "'%s' argument of '%s' intrinsic at %L must be INTEGER or REAL",
701 gfc_current_intrinsic_arg[1], gfc_current_intrinsic, &y->where);
704 if (scalar_check (y, 1) == FAILURE)
712 gfc_check_count (gfc_expr * mask, gfc_expr * dim)
714 if (logical_array_check (mask, 0) == FAILURE)
716 if (dim_check (dim, 1, 1) == FAILURE)
724 gfc_check_cshift (gfc_expr * array, gfc_expr * shift, gfc_expr * dim)
726 if (array_check (array, 0) == FAILURE)
729 if (array->rank == 1)
731 if (scalar_check (shift, 1) == FAILURE)
736 /* TODO: more requirements on shift parameter. */
739 if (dim_check (dim, 2, 1) == FAILURE)
747 gfc_check_ctime (gfc_expr * time)
749 if (scalar_check (time, 0) == FAILURE)
752 if (type_check (time, 0, BT_INTEGER) == FAILURE)
760 gfc_check_dcmplx (gfc_expr * x, gfc_expr * y)
762 if (numeric_check (x, 0) == FAILURE)
767 if (numeric_check (y, 1) == FAILURE)
770 if (x->ts.type == BT_COMPLEX)
772 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
773 "present if 'x' is COMPLEX", gfc_current_intrinsic_arg[1],
774 gfc_current_intrinsic, &y->where);
784 gfc_check_dble (gfc_expr * x)
786 if (numeric_check (x, 0) == FAILURE)
794 gfc_check_digits (gfc_expr * x)
796 if (int_or_real_check (x, 0) == FAILURE)
804 gfc_check_dot_product (gfc_expr * vector_a, gfc_expr * vector_b)
806 switch (vector_a->ts.type)
809 if (type_check (vector_b, 1, BT_LOGICAL) == FAILURE)
816 if (numeric_check (vector_b, 1) == FAILURE)
821 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
822 "or LOGICAL", gfc_current_intrinsic_arg[0],
823 gfc_current_intrinsic, &vector_a->where);
827 if (rank_check (vector_a, 0, 1) == FAILURE)
830 if (rank_check (vector_b, 1, 1) == FAILURE)
833 if (! identical_dimen_shape (vector_a, 0, vector_b, 0))
835 gfc_error ("different shape for arguments '%s' and '%s' "
836 "at %L for intrinsic 'dot_product'",
837 gfc_current_intrinsic_arg[0],
838 gfc_current_intrinsic_arg[1],
848 gfc_check_eoshift (gfc_expr * array, gfc_expr * shift, gfc_expr * boundary,
851 if (array_check (array, 0) == FAILURE)
854 if (type_check (shift, 1, BT_INTEGER) == FAILURE)
857 if (array->rank == 1)
859 if (scalar_check (shift, 2) == FAILURE)
864 /* TODO: more weird restrictions on shift. */
867 if (boundary != NULL)
869 if (same_type_check (array, 0, boundary, 2) == FAILURE)
872 /* TODO: more restrictions on boundary. */
875 if (dim_check (dim, 1, 1) == FAILURE)
882 /* A single complex argument. */
885 gfc_check_fn_c (gfc_expr * a)
887 if (type_check (a, 0, BT_COMPLEX) == FAILURE)
894 /* A single real argument. */
897 gfc_check_fn_r (gfc_expr * a)
899 if (type_check (a, 0, BT_REAL) == FAILURE)
906 /* A single real or complex argument. */
909 gfc_check_fn_rc (gfc_expr * a)
911 if (real_or_complex_check (a, 0) == FAILURE)
919 gfc_check_fnum (gfc_expr * unit)
921 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
924 if (scalar_check (unit, 0) == FAILURE)
931 /* This is used for the g77 one-argument Bessel functions, and the
935 gfc_check_g77_math1 (gfc_expr * x)
937 if (scalar_check (x, 0) == FAILURE)
940 if (type_check (x, 0, BT_REAL) == FAILURE)
948 gfc_check_huge (gfc_expr * x)
950 if (int_or_real_check (x, 0) == FAILURE)
957 /* Check that the single argument is an integer. */
960 gfc_check_i (gfc_expr * i)
962 if (type_check (i, 0, BT_INTEGER) == FAILURE)
970 gfc_check_iand (gfc_expr * i, gfc_expr * j)
972 if (type_check (i, 0, BT_INTEGER) == FAILURE)
975 if (type_check (j, 1, BT_INTEGER) == FAILURE)
978 if (i->ts.kind != j->ts.kind)
980 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
981 &i->where) == FAILURE)
990 gfc_check_ibclr (gfc_expr * i, gfc_expr * pos)
992 if (type_check (i, 0, BT_INTEGER) == FAILURE)
995 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
1003 gfc_check_ibits (gfc_expr * i, gfc_expr * pos, gfc_expr * len)
1005 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1008 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
1011 if (type_check (len, 2, BT_INTEGER) == FAILURE)
1019 gfc_check_ibset (gfc_expr * i, gfc_expr * pos)
1021 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1024 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
1032 gfc_check_ichar_iachar (gfc_expr * c)
1036 if (type_check (c, 0, BT_CHARACTER) == FAILURE)
1039 if (c->expr_type == EXPR_VARIABLE || c->expr_type == EXPR_SUBSTRING)
1045 /* Substring references don't have the charlength set. */
1047 while (ref && ref->type != REF_SUBSTRING)
1050 gcc_assert (ref == NULL || ref->type == REF_SUBSTRING);
1054 /* Check that the argument is length one. Non-constant lengths
1055 can't be checked here, so assume thay are ok. */
1056 if (c->ts.cl && c->ts.cl->length)
1058 /* If we already have a length for this expression then use it. */
1059 if (c->ts.cl->length->expr_type != EXPR_CONSTANT)
1061 i = mpz_get_si (c->ts.cl->length->value.integer);
1068 start = ref->u.ss.start;
1069 end = ref->u.ss.end;
1072 if (end == NULL || end->expr_type != EXPR_CONSTANT
1073 || start->expr_type != EXPR_CONSTANT)
1076 i = mpz_get_si (end->value.integer) + 1
1077 - mpz_get_si (start->value.integer);
1085 gfc_error ("Argument of %s at %L must be of length one",
1086 gfc_current_intrinsic, &c->where);
1095 gfc_check_idnint (gfc_expr * a)
1097 if (double_check (a, 0) == FAILURE)
1105 gfc_check_ieor (gfc_expr * i, gfc_expr * j)
1107 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1110 if (type_check (j, 1, BT_INTEGER) == FAILURE)
1113 if (i->ts.kind != j->ts.kind)
1115 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
1116 &i->where) == FAILURE)
1125 gfc_check_index (gfc_expr * string, gfc_expr * substring, gfc_expr * back)
1127 if (type_check (string, 0, BT_CHARACTER) == FAILURE
1128 || type_check (substring, 1, BT_CHARACTER) == FAILURE)
1132 if (back != NULL && type_check (back, 2, BT_LOGICAL) == FAILURE)
1135 if (string->ts.kind != substring->ts.kind)
1137 gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same "
1138 "kind as '%s'", gfc_current_intrinsic_arg[1],
1139 gfc_current_intrinsic, &substring->where,
1140 gfc_current_intrinsic_arg[0]);
1149 gfc_check_int (gfc_expr * x, gfc_expr * kind)
1151 if (numeric_check (x, 0) == FAILURE)
1156 if (type_check (kind, 1, BT_INTEGER) == FAILURE)
1159 if (scalar_check (kind, 1) == FAILURE)
1168 gfc_check_ior (gfc_expr * i, gfc_expr * j)
1170 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1173 if (type_check (j, 1, BT_INTEGER) == FAILURE)
1176 if (i->ts.kind != j->ts.kind)
1178 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
1179 &i->where) == FAILURE)
1188 gfc_check_ishft (gfc_expr * i, gfc_expr * shift)
1190 if (type_check (i, 0, BT_INTEGER) == FAILURE
1191 || type_check (shift, 1, BT_INTEGER) == FAILURE)
1199 gfc_check_ishftc (gfc_expr * i, gfc_expr * shift, gfc_expr * size)
1201 if (type_check (i, 0, BT_INTEGER) == FAILURE
1202 || type_check (shift, 1, BT_INTEGER) == FAILURE)
1205 if (size != NULL && type_check (size, 2, BT_INTEGER) == FAILURE)
1213 gfc_check_kill (gfc_expr * pid, gfc_expr * sig)
1215 if (type_check (pid, 0, BT_INTEGER) == FAILURE)
1218 if (type_check (sig, 1, BT_INTEGER) == FAILURE)
1226 gfc_check_kill_sub (gfc_expr * pid, gfc_expr * sig, gfc_expr * status)
1228 if (type_check (pid, 0, BT_INTEGER) == FAILURE)
1231 if (type_check (sig, 1, BT_INTEGER) == FAILURE)
1237 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1240 if (scalar_check (status, 2) == FAILURE)
1248 gfc_check_kind (gfc_expr * x)
1250 if (x->ts.type == BT_DERIVED)
1252 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a "
1253 "non-derived type", gfc_current_intrinsic_arg[0],
1254 gfc_current_intrinsic, &x->where);
1263 gfc_check_lbound (gfc_expr * array, gfc_expr * dim)
1265 if (array_check (array, 0) == FAILURE)
1270 if (dim_check (dim, 1, 1) == FAILURE)
1273 if (dim_rank_check (dim, array, 1) == FAILURE)
1281 gfc_check_link (gfc_expr * path1, gfc_expr * path2)
1283 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1286 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1294 gfc_check_link_sub (gfc_expr * path1, gfc_expr * path2, gfc_expr * status)
1296 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1299 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1305 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1308 if (scalar_check (status, 2) == FAILURE)
1315 gfc_check_loc (gfc_expr *expr)
1317 return variable_check (expr, 0);
1322 gfc_check_symlnk (gfc_expr * path1, gfc_expr * path2)
1324 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1327 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1335 gfc_check_symlnk_sub (gfc_expr * path1, gfc_expr * path2, gfc_expr * status)
1337 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1340 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1346 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1349 if (scalar_check (status, 2) == FAILURE)
1357 gfc_check_logical (gfc_expr * a, gfc_expr * kind)
1359 if (type_check (a, 0, BT_LOGICAL) == FAILURE)
1361 if (kind_check (kind, 1, BT_LOGICAL) == FAILURE)
1368 /* Min/max family. */
1371 min_max_args (gfc_actual_arglist * arg)
1373 if (arg == NULL || arg->next == NULL)
1375 gfc_error ("Intrinsic '%s' at %L must have at least two arguments",
1376 gfc_current_intrinsic, gfc_current_intrinsic_where);
1385 check_rest (bt type, int kind, gfc_actual_arglist * arg)
1390 if (min_max_args (arg) == FAILURE)
1395 for (; arg; arg = arg->next, n++)
1398 if (x->ts.type != type || x->ts.kind != kind)
1400 if (x->ts.type == type)
1402 if (gfc_notify_std (GFC_STD_GNU,
1403 "Extension: Different type kinds at %L", &x->where)
1409 gfc_error ("'a%d' argument of '%s' intrinsic at %L must be %s(%d)",
1410 n, gfc_current_intrinsic, &x->where,
1411 gfc_basic_typename (type), kind);
1422 gfc_check_min_max (gfc_actual_arglist * arg)
1426 if (min_max_args (arg) == FAILURE)
1431 if (x->ts.type != BT_INTEGER && x->ts.type != BT_REAL)
1434 ("'a1' argument of '%s' intrinsic at %L must be INTEGER or REAL",
1435 gfc_current_intrinsic, &x->where);
1439 return check_rest (x->ts.type, x->ts.kind, arg);
1444 gfc_check_min_max_integer (gfc_actual_arglist * arg)
1446 return check_rest (BT_INTEGER, gfc_default_integer_kind, arg);
1451 gfc_check_min_max_real (gfc_actual_arglist * arg)
1453 return check_rest (BT_REAL, gfc_default_real_kind, arg);
1458 gfc_check_min_max_double (gfc_actual_arglist * arg)
1460 return check_rest (BT_REAL, gfc_default_double_kind, arg);
1463 /* End of min/max family. */
1466 gfc_check_malloc (gfc_expr * size)
1468 if (type_check (size, 0, BT_INTEGER) == FAILURE)
1471 if (scalar_check (size, 0) == FAILURE)
1479 gfc_check_matmul (gfc_expr * matrix_a, gfc_expr * matrix_b)
1481 if ((matrix_a->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_b->ts))
1483 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1484 "or LOGICAL", gfc_current_intrinsic_arg[0],
1485 gfc_current_intrinsic, &matrix_a->where);
1489 if ((matrix_b->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_a->ts))
1491 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1492 "or LOGICAL", gfc_current_intrinsic_arg[1],
1493 gfc_current_intrinsic, &matrix_b->where);
1497 switch (matrix_a->rank)
1500 if (rank_check (matrix_b, 1, 2) == FAILURE)
1502 /* Check for case matrix_a has shape(m), matrix_b has shape (m, k). */
1503 if (! identical_dimen_shape (matrix_a, 0, matrix_b, 0))
1505 gfc_error ("different shape on dimension 1 for arguments '%s' "
1506 "and '%s' at %L for intrinsic matmul",
1507 gfc_current_intrinsic_arg[0],
1508 gfc_current_intrinsic_arg[1],
1515 if (matrix_b->rank != 2)
1517 if (rank_check (matrix_b, 1, 1) == FAILURE)
1520 /* matrix_b has rank 1 or 2 here. Common check for the cases
1521 - matrix_a has shape (n,m) and matrix_b has shape (m, k)
1522 - matrix_a has shape (n,m) and matrix_b has shape (m). */
1523 if (! identical_dimen_shape (matrix_a, 1, matrix_b, 0))
1525 gfc_error ("different shape on dimension 2 for argument '%s' and "
1526 "dimension 1 for argument '%s' at %L for intrinsic "
1527 "matmul", gfc_current_intrinsic_arg[0],
1528 gfc_current_intrinsic_arg[1], &matrix_a->where);
1534 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank "
1535 "1 or 2", gfc_current_intrinsic_arg[0],
1536 gfc_current_intrinsic, &matrix_a->where);
1544 /* Whoever came up with this interface was probably on something.
1545 The possibilities for the occupation of the second and third
1552 NULL MASK minloc(array, mask=m)
1555 I.e. in the case of minloc(array,mask), mask will be in the second
1556 position of the argument list and we'll have to fix that up. */
1559 gfc_check_minloc_maxloc (gfc_actual_arglist * ap)
1561 gfc_expr *a, *m, *d;
1564 if (int_or_real_check (a, 0) == FAILURE
1565 || array_check (a, 0) == FAILURE)
1569 m = ap->next->next->expr;
1571 if (m == NULL && d != NULL && d->ts.type == BT_LOGICAL
1572 && ap->next->name == NULL)
1577 ap->next->expr = NULL;
1578 ap->next->next->expr = m;
1581 if (dim_check (d, 1, 1) == FAILURE)
1584 if (d && dim_rank_check (d, a, 0) == FAILURE)
1587 if (m != NULL && type_check (m, 2, BT_LOGICAL) == FAILURE)
1593 snprintf(buffer, sizeof(buffer), "arguments '%s' and '%s' for intrinsic %s",
1594 gfc_current_intrinsic_arg[0], gfc_current_intrinsic_arg[2],
1595 gfc_current_intrinsic);
1596 if (gfc_check_conformance (buffer, a, m) == FAILURE)
1604 /* Similar to minloc/maxloc, the argument list might need to be
1605 reordered for the MINVAL, MAXVAL, PRODUCT, and SUM intrinsics. The
1606 difference is that MINLOC/MAXLOC take an additional KIND argument.
1607 The possibilities are:
1613 NULL MASK minval(array, mask=m)
1616 I.e. in the case of minval(array,mask), mask will be in the second
1617 position of the argument list and we'll have to fix that up. */
1620 check_reduction (gfc_actual_arglist * ap)
1622 gfc_expr *a, *m, *d;
1626 m = ap->next->next->expr;
1628 if (m == NULL && d != NULL && d->ts.type == BT_LOGICAL
1629 && ap->next->name == NULL)
1634 ap->next->expr = NULL;
1635 ap->next->next->expr = m;
1638 if (dim_check (d, 1, 1) == FAILURE)
1641 if (d && dim_rank_check (d, a, 0) == FAILURE)
1644 if (m != NULL && type_check (m, 2, BT_LOGICAL) == FAILURE)
1650 snprintf(buffer, sizeof(buffer), "arguments '%s' and '%s' for intrinsic %s",
1651 gfc_current_intrinsic_arg[0], gfc_current_intrinsic_arg[2],
1652 gfc_current_intrinsic);
1653 if (gfc_check_conformance (buffer, a, m) == FAILURE)
1662 gfc_check_minval_maxval (gfc_actual_arglist * ap)
1664 if (int_or_real_check (ap->expr, 0) == FAILURE
1665 || array_check (ap->expr, 0) == FAILURE)
1668 return check_reduction (ap);
1673 gfc_check_product_sum (gfc_actual_arglist * ap)
1675 if (numeric_check (ap->expr, 0) == FAILURE
1676 || array_check (ap->expr, 0) == FAILURE)
1679 return check_reduction (ap);
1684 gfc_check_merge (gfc_expr * tsource, gfc_expr * fsource, gfc_expr * mask)
1688 if (same_type_check (tsource, 0, fsource, 1) == FAILURE)
1691 if (type_check (mask, 2, BT_LOGICAL) == FAILURE)
1694 snprintf(buffer, sizeof(buffer), "arguments '%s' and '%s' for intrinsic '%s'",
1695 gfc_current_intrinsic_arg[0], gfc_current_intrinsic_arg[1],
1696 gfc_current_intrinsic);
1697 if (gfc_check_conformance (buffer, tsource, fsource) == FAILURE)
1700 snprintf(buffer, sizeof(buffer), "arguments '%s' and '%s' for intrinsic '%s'",
1701 gfc_current_intrinsic_arg[0], gfc_current_intrinsic_arg[2],
1702 gfc_current_intrinsic);
1703 if (gfc_check_conformance (buffer, tsource, mask) == FAILURE)
1711 gfc_check_nearest (gfc_expr * x, gfc_expr * s)
1713 if (type_check (x, 0, BT_REAL) == FAILURE)
1716 if (type_check (s, 1, BT_REAL) == FAILURE)
1724 gfc_check_null (gfc_expr * mold)
1726 symbol_attribute attr;
1731 if (variable_check (mold, 0) == FAILURE)
1734 attr = gfc_variable_attr (mold, NULL);
1738 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER",
1739 gfc_current_intrinsic_arg[0],
1740 gfc_current_intrinsic, &mold->where);
1749 gfc_check_pack (gfc_expr * array, gfc_expr * mask, gfc_expr * vector)
1753 if (array_check (array, 0) == FAILURE)
1756 if (type_check (mask, 1, BT_LOGICAL) == FAILURE)
1759 snprintf(buffer, sizeof(buffer), "arguments '%s' and '%s' for intrinsic '%s'",
1760 gfc_current_intrinsic_arg[0], gfc_current_intrinsic_arg[1],
1761 gfc_current_intrinsic);
1762 if (gfc_check_conformance (buffer, array, mask) == FAILURE)
1767 if (same_type_check (array, 0, vector, 2) == FAILURE)
1770 if (rank_check (vector, 2, 1) == FAILURE)
1773 /* TODO: More constraints here. */
1781 gfc_check_precision (gfc_expr * x)
1783 if (x->ts.type != BT_REAL && x->ts.type != BT_COMPLEX)
1785 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of type "
1786 "REAL or COMPLEX", gfc_current_intrinsic_arg[0],
1787 gfc_current_intrinsic, &x->where);
1796 gfc_check_present (gfc_expr * a)
1800 if (variable_check (a, 0) == FAILURE)
1803 sym = a->symtree->n.sym;
1804 if (!sym->attr.dummy)
1806 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a "
1807 "dummy variable", gfc_current_intrinsic_arg[0],
1808 gfc_current_intrinsic, &a->where);
1812 if (!sym->attr.optional)
1814 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of "
1815 "an OPTIONAL dummy variable", gfc_current_intrinsic_arg[0],
1816 gfc_current_intrinsic, &a->where);
1825 gfc_check_radix (gfc_expr * x)
1827 if (int_or_real_check (x, 0) == FAILURE)
1835 gfc_check_range (gfc_expr * x)
1837 if (numeric_check (x, 0) == FAILURE)
1844 /* real, float, sngl. */
1846 gfc_check_real (gfc_expr * a, gfc_expr * kind)
1848 if (numeric_check (a, 0) == FAILURE)
1851 if (kind_check (kind, 1, BT_REAL) == FAILURE)
1859 gfc_check_rename (gfc_expr * path1, gfc_expr * path2)
1861 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1864 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1872 gfc_check_rename_sub (gfc_expr * path1, gfc_expr * path2, gfc_expr * status)
1874 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1877 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1883 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1886 if (scalar_check (status, 2) == FAILURE)
1894 gfc_check_repeat (gfc_expr * x, gfc_expr * y)
1896 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
1899 if (scalar_check (x, 0) == FAILURE)
1902 if (type_check (y, 0, BT_INTEGER) == FAILURE)
1905 if (scalar_check (y, 1) == FAILURE)
1913 gfc_check_reshape (gfc_expr * source, gfc_expr * shape,
1914 gfc_expr * pad, gfc_expr * order)
1919 if (array_check (source, 0) == FAILURE)
1922 if (rank_check (shape, 1, 1) == FAILURE)
1925 if (type_check (shape, 1, BT_INTEGER) == FAILURE)
1928 if (gfc_array_size (shape, &size) != SUCCESS)
1930 gfc_error ("'shape' argument of 'reshape' intrinsic at %L must be an "
1931 "array of constant size", &shape->where);
1935 m = mpz_cmp_ui (size, GFC_MAX_DIMENSIONS);
1940 gfc_error ("'shape' argument of 'reshape' intrinsic at %L has more "
1941 "than %d elements", &shape->where, GFC_MAX_DIMENSIONS);
1947 if (same_type_check (source, 0, pad, 2) == FAILURE)
1949 if (array_check (pad, 2) == FAILURE)
1953 if (order != NULL && array_check (order, 3) == FAILURE)
1961 gfc_check_scale (gfc_expr * x, gfc_expr * i)
1963 if (type_check (x, 0, BT_REAL) == FAILURE)
1966 if (type_check (i, 1, BT_INTEGER) == FAILURE)
1974 gfc_check_scan (gfc_expr * x, gfc_expr * y, gfc_expr * z)
1976 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
1979 if (type_check (y, 1, BT_CHARACTER) == FAILURE)
1982 if (z != NULL && type_check (z, 2, BT_LOGICAL) == FAILURE)
1985 if (same_type_check (x, 0, y, 1) == FAILURE)
1993 gfc_check_secnds (gfc_expr * r)
1996 if (type_check (r, 0, BT_REAL) == FAILURE)
1999 if (kind_value_check (r, 0, 4) == FAILURE)
2002 if (scalar_check (r, 0) == FAILURE)
2010 gfc_check_selected_int_kind (gfc_expr * r)
2013 if (type_check (r, 0, BT_INTEGER) == FAILURE)
2016 if (scalar_check (r, 0) == FAILURE)
2024 gfc_check_selected_real_kind (gfc_expr * p, gfc_expr * r)
2026 if (p == NULL && r == NULL)
2028 gfc_error ("Missing arguments to %s intrinsic at %L",
2029 gfc_current_intrinsic, gfc_current_intrinsic_where);
2034 if (p != NULL && type_check (p, 0, BT_INTEGER) == FAILURE)
2037 if (r != NULL && type_check (r, 1, BT_INTEGER) == FAILURE)
2045 gfc_check_set_exponent (gfc_expr * x, gfc_expr * i)
2047 if (type_check (x, 0, BT_REAL) == FAILURE)
2050 if (type_check (i, 1, BT_INTEGER) == FAILURE)
2058 gfc_check_shape (gfc_expr * source)
2062 if (source->rank == 0 || source->expr_type != EXPR_VARIABLE)
2065 ar = gfc_find_array_ref (source);
2067 if (ar->as && ar->as->type == AS_ASSUMED_SIZE)
2069 gfc_error ("'source' argument of 'shape' intrinsic at %L must not be "
2070 "an assumed size array", &source->where);
2079 gfc_check_sign (gfc_expr * a, gfc_expr * b)
2081 if (int_or_real_check (a, 0) == FAILURE)
2084 if (same_type_check (a, 0, b, 1) == FAILURE)
2092 gfc_check_size (gfc_expr * array, gfc_expr * dim)
2094 if (array_check (array, 0) == FAILURE)
2099 if (type_check (dim, 1, BT_INTEGER) == FAILURE)
2102 if (kind_value_check (dim, 1, gfc_default_integer_kind) == FAILURE)
2105 if (dim_rank_check (dim, array, 0) == FAILURE)
2114 gfc_check_sleep_sub (gfc_expr * seconds)
2116 if (type_check (seconds, 0, BT_INTEGER) == FAILURE)
2119 if (scalar_check (seconds, 0) == FAILURE)
2127 gfc_check_spread (gfc_expr * source, gfc_expr * dim, gfc_expr * ncopies)
2129 if (source->rank >= GFC_MAX_DIMENSIONS)
2131 gfc_error ("'%s' argument of '%s' intrinsic at %L must be less "
2132 "than rank %d", gfc_current_intrinsic_arg[0],
2133 gfc_current_intrinsic, &source->where, GFC_MAX_DIMENSIONS);
2138 if (dim_check (dim, 1, 0) == FAILURE)
2141 if (type_check (ncopies, 2, BT_INTEGER) == FAILURE)
2144 if (scalar_check (ncopies, 2) == FAILURE)
2151 /* Functions for checking FGETC, FPUTC, FGET and FPUT (subroutines and
2154 gfc_check_fgetputc_sub (gfc_expr * unit, gfc_expr * c, gfc_expr * status)
2156 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2159 if (scalar_check (unit, 0) == FAILURE)
2162 if (type_check (c, 1, BT_CHARACTER) == FAILURE)
2168 if (type_check (status, 2, BT_INTEGER) == FAILURE
2169 || kind_value_check (status, 2, gfc_default_integer_kind) == FAILURE
2170 || scalar_check (status, 2) == FAILURE)
2178 gfc_check_fgetputc (gfc_expr * unit, gfc_expr * c)
2180 return gfc_check_fgetputc_sub (unit, c, NULL);
2185 gfc_check_fgetput_sub (gfc_expr * c, gfc_expr * status)
2187 if (type_check (c, 0, BT_CHARACTER) == FAILURE)
2193 if (type_check (status, 1, BT_INTEGER) == FAILURE
2194 || kind_value_check (status, 1, gfc_default_integer_kind) == FAILURE
2195 || scalar_check (status, 1) == FAILURE)
2203 gfc_check_fgetput (gfc_expr * c)
2205 return gfc_check_fgetput_sub (c, NULL);
2210 gfc_check_fstat (gfc_expr * unit, gfc_expr * array)
2212 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2215 if (scalar_check (unit, 0) == FAILURE)
2218 if (type_check (array, 1, BT_INTEGER) == FAILURE
2219 || kind_value_check (unit, 0, gfc_default_integer_kind) == FAILURE)
2222 if (array_check (array, 1) == FAILURE)
2230 gfc_check_fstat_sub (gfc_expr * unit, gfc_expr * array, gfc_expr * status)
2232 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2235 if (scalar_check (unit, 0) == FAILURE)
2238 if (type_check (array, 1, BT_INTEGER) == FAILURE
2239 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
2242 if (array_check (array, 1) == FAILURE)
2248 if (type_check (status, 2, BT_INTEGER) == FAILURE
2249 || kind_value_check (status, 2, gfc_default_integer_kind) == FAILURE)
2252 if (scalar_check (status, 2) == FAILURE)
2260 gfc_check_ftell (gfc_expr * unit)
2262 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2265 if (scalar_check (unit, 0) == FAILURE)
2273 gfc_check_ftell_sub (gfc_expr * unit, gfc_expr * offset)
2275 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2278 if (scalar_check (unit, 0) == FAILURE)
2281 if (type_check (offset, 1, BT_INTEGER) == FAILURE)
2284 if (scalar_check (offset, 1) == FAILURE)
2292 gfc_check_stat (gfc_expr * name, gfc_expr * array)
2294 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
2297 if (type_check (array, 1, BT_INTEGER) == FAILURE
2298 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
2301 if (array_check (array, 1) == FAILURE)
2309 gfc_check_stat_sub (gfc_expr * name, gfc_expr * array, gfc_expr * status)
2311 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
2314 if (type_check (array, 1, BT_INTEGER) == FAILURE
2315 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
2318 if (array_check (array, 1) == FAILURE)
2324 if (type_check (status, 2, BT_INTEGER) == FAILURE
2325 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
2328 if (scalar_check (status, 2) == FAILURE)
2336 gfc_check_transfer (gfc_expr * source ATTRIBUTE_UNUSED,
2337 gfc_expr * mold ATTRIBUTE_UNUSED,
2342 if (type_check (size, 2, BT_INTEGER) == FAILURE)
2345 if (scalar_check (size, 2) == FAILURE)
2348 if (nonoptional_check (size, 2) == FAILURE)
2357 gfc_check_transpose (gfc_expr * matrix)
2359 if (rank_check (matrix, 0, 2) == FAILURE)
2367 gfc_check_ubound (gfc_expr * array, gfc_expr * dim)
2369 if (array_check (array, 0) == FAILURE)
2374 if (dim_check (dim, 1, 1) == FAILURE)
2377 if (dim_rank_check (dim, array, 0) == FAILURE)
2386 gfc_check_unpack (gfc_expr * vector, gfc_expr * mask, gfc_expr * field)
2388 if (rank_check (vector, 0, 1) == FAILURE)
2391 if (array_check (mask, 1) == FAILURE)
2394 if (type_check (mask, 1, BT_LOGICAL) == FAILURE)
2397 if (same_type_check (vector, 0, field, 2) == FAILURE)
2405 gfc_check_verify (gfc_expr * x, gfc_expr * y, gfc_expr * z)
2407 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
2410 if (same_type_check (x, 0, y, 1) == FAILURE)
2413 if (z != NULL && type_check (z, 2, BT_LOGICAL) == FAILURE)
2421 gfc_check_trim (gfc_expr * x)
2423 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
2426 if (scalar_check (x, 0) == FAILURE)
2434 gfc_check_ttynam (gfc_expr * unit)
2436 if (scalar_check (unit, 0) == FAILURE)
2439 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2446 /* Common check function for the half a dozen intrinsics that have a
2447 single real argument. */
2450 gfc_check_x (gfc_expr * x)
2452 if (type_check (x, 0, BT_REAL) == FAILURE)
2459 /************* Check functions for intrinsic subroutines *************/
2462 gfc_check_cpu_time (gfc_expr * time)
2464 if (scalar_check (time, 0) == FAILURE)
2467 if (type_check (time, 0, BT_REAL) == FAILURE)
2470 if (variable_check (time, 0) == FAILURE)
2478 gfc_check_date_and_time (gfc_expr * date, gfc_expr * time,
2479 gfc_expr * zone, gfc_expr * values)
2483 if (type_check (date, 0, BT_CHARACTER) == FAILURE)
2485 if (scalar_check (date, 0) == FAILURE)
2487 if (variable_check (date, 0) == FAILURE)
2493 if (type_check (time, 1, BT_CHARACTER) == FAILURE)
2495 if (scalar_check (time, 1) == FAILURE)
2497 if (variable_check (time, 1) == FAILURE)
2503 if (type_check (zone, 2, BT_CHARACTER) == FAILURE)
2505 if (scalar_check (zone, 2) == FAILURE)
2507 if (variable_check (zone, 2) == FAILURE)
2513 if (type_check (values, 3, BT_INTEGER) == FAILURE)
2515 if (array_check (values, 3) == FAILURE)
2517 if (rank_check (values, 3, 1) == FAILURE)
2519 if (variable_check (values, 3) == FAILURE)
2528 gfc_check_mvbits (gfc_expr * from, gfc_expr * frompos, gfc_expr * len,
2529 gfc_expr * to, gfc_expr * topos)
2531 if (type_check (from, 0, BT_INTEGER) == FAILURE)
2534 if (type_check (frompos, 1, BT_INTEGER) == FAILURE)
2537 if (type_check (len, 2, BT_INTEGER) == FAILURE)
2540 if (same_type_check (from, 0, to, 3) == FAILURE)
2543 if (variable_check (to, 3) == FAILURE)
2546 if (type_check (topos, 4, BT_INTEGER) == FAILURE)
2554 gfc_check_random_number (gfc_expr * harvest)
2556 if (type_check (harvest, 0, BT_REAL) == FAILURE)
2559 if (variable_check (harvest, 0) == FAILURE)
2567 gfc_check_random_seed (gfc_expr * size, gfc_expr * put, gfc_expr * get)
2571 if (scalar_check (size, 0) == FAILURE)
2574 if (type_check (size, 0, BT_INTEGER) == FAILURE)
2577 if (variable_check (size, 0) == FAILURE)
2580 if (kind_value_check (size, 0, gfc_default_integer_kind) == FAILURE)
2588 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic,
2591 if (array_check (put, 1) == FAILURE)
2594 if (rank_check (put, 1, 1) == FAILURE)
2597 if (type_check (put, 1, BT_INTEGER) == FAILURE)
2600 if (kind_value_check (put, 1, gfc_default_integer_kind) == FAILURE)
2607 if (size != NULL || put != NULL)
2608 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic,
2611 if (array_check (get, 2) == FAILURE)
2614 if (rank_check (get, 2, 1) == FAILURE)
2617 if (type_check (get, 2, BT_INTEGER) == FAILURE)
2620 if (variable_check (get, 2) == FAILURE)
2623 if (kind_value_check (get, 2, gfc_default_integer_kind) == FAILURE)
2631 gfc_check_second_sub (gfc_expr * time)
2633 if (scalar_check (time, 0) == FAILURE)
2636 if (type_check (time, 0, BT_REAL) == FAILURE)
2639 if (kind_value_check(time, 0, 4) == FAILURE)
2646 /* The arguments of SYSTEM_CLOCK are scalar, integer variables. Note,
2647 count, count_rate, and count_max are all optional arguments */
2650 gfc_check_system_clock (gfc_expr * count, gfc_expr * count_rate,
2651 gfc_expr * count_max)
2655 if (scalar_check (count, 0) == FAILURE)
2658 if (type_check (count, 0, BT_INTEGER) == FAILURE)
2661 if (variable_check (count, 0) == FAILURE)
2665 if (count_rate != NULL)
2667 if (scalar_check (count_rate, 1) == FAILURE)
2670 if (type_check (count_rate, 1, BT_INTEGER) == FAILURE)
2673 if (variable_check (count_rate, 1) == FAILURE)
2677 && same_type_check (count, 0, count_rate, 1) == FAILURE)
2682 if (count_max != NULL)
2684 if (scalar_check (count_max, 2) == FAILURE)
2687 if (type_check (count_max, 2, BT_INTEGER) == FAILURE)
2690 if (variable_check (count_max, 2) == FAILURE)
2694 && same_type_check (count, 0, count_max, 2) == FAILURE)
2697 if (count_rate != NULL
2698 && same_type_check (count_rate, 1, count_max, 2) == FAILURE)
2706 gfc_check_irand (gfc_expr * x)
2711 if (scalar_check (x, 0) == FAILURE)
2714 if (type_check (x, 0, BT_INTEGER) == FAILURE)
2717 if (kind_value_check(x, 0, 4) == FAILURE)
2725 gfc_check_alarm_sub (gfc_expr * seconds, gfc_expr * handler, gfc_expr * status)
2727 if (scalar_check (seconds, 0) == FAILURE)
2730 if (type_check (seconds, 0, BT_INTEGER) == FAILURE)
2733 if (handler->ts.type != BT_INTEGER && handler->ts.type != BT_PROCEDURE)
2736 "'%s' argument of '%s' intrinsic at %L must be INTEGER or PROCEDURE",
2737 gfc_current_intrinsic_arg[1], gfc_current_intrinsic, &handler->where);
2741 if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE)
2747 if (scalar_check (status, 2) == FAILURE)
2750 if (type_check (status, 2, BT_INTEGER) == FAILURE)
2758 gfc_check_rand (gfc_expr * x)
2763 if (scalar_check (x, 0) == FAILURE)
2766 if (type_check (x, 0, BT_INTEGER) == FAILURE)
2769 if (kind_value_check(x, 0, 4) == FAILURE)
2776 gfc_check_srand (gfc_expr * x)
2778 if (scalar_check (x, 0) == FAILURE)
2781 if (type_check (x, 0, BT_INTEGER) == FAILURE)
2784 if (kind_value_check(x, 0, 4) == FAILURE)
2791 gfc_check_ctime_sub (gfc_expr * time, gfc_expr * result)
2793 if (scalar_check (time, 0) == FAILURE)
2796 if (type_check (time, 0, BT_INTEGER) == FAILURE)
2799 if (type_check (result, 1, BT_CHARACTER) == FAILURE)
2806 gfc_check_etime (gfc_expr * x)
2808 if (array_check (x, 0) == FAILURE)
2811 if (rank_check (x, 0, 1) == FAILURE)
2814 if (variable_check (x, 0) == FAILURE)
2817 if (type_check (x, 0, BT_REAL) == FAILURE)
2820 if (kind_value_check(x, 0, 4) == FAILURE)
2827 gfc_check_etime_sub (gfc_expr * values, gfc_expr * time)
2829 if (array_check (values, 0) == FAILURE)
2832 if (rank_check (values, 0, 1) == FAILURE)
2835 if (variable_check (values, 0) == FAILURE)
2838 if (type_check (values, 0, BT_REAL) == FAILURE)
2841 if (kind_value_check(values, 0, 4) == FAILURE)
2844 if (scalar_check (time, 1) == FAILURE)
2847 if (type_check (time, 1, BT_REAL) == FAILURE)
2850 if (kind_value_check(time, 1, 4) == FAILURE)
2858 gfc_check_fdate_sub (gfc_expr * date)
2860 if (type_check (date, 0, BT_CHARACTER) == FAILURE)
2868 gfc_check_gerror (gfc_expr * msg)
2870 if (type_check (msg, 0, BT_CHARACTER) == FAILURE)
2878 gfc_check_getcwd_sub (gfc_expr * cwd, gfc_expr * status)
2880 if (type_check (cwd, 0, BT_CHARACTER) == FAILURE)
2886 if (scalar_check (status, 1) == FAILURE)
2889 if (type_check (status, 1, BT_INTEGER) == FAILURE)
2897 gfc_check_getlog (gfc_expr * msg)
2899 if (type_check (msg, 0, BT_CHARACTER) == FAILURE)
2907 gfc_check_exit (gfc_expr * status)
2912 if (type_check (status, 0, BT_INTEGER) == FAILURE)
2915 if (scalar_check (status, 0) == FAILURE)
2923 gfc_check_flush (gfc_expr * unit)
2928 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2931 if (scalar_check (unit, 0) == FAILURE)
2939 gfc_check_free (gfc_expr * i)
2941 if (type_check (i, 0, BT_INTEGER) == FAILURE)
2944 if (scalar_check (i, 0) == FAILURE)
2952 gfc_check_hostnm (gfc_expr * name)
2954 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
2962 gfc_check_hostnm_sub (gfc_expr * name, gfc_expr * status)
2964 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
2970 if (scalar_check (status, 1) == FAILURE)
2973 if (type_check (status, 1, BT_INTEGER) == FAILURE)
2981 gfc_check_ttynam_sub (gfc_expr * unit, gfc_expr * name)
2983 if (scalar_check (unit, 0) == FAILURE)
2986 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2989 if (type_check (name, 1, BT_CHARACTER) == FAILURE)
2997 gfc_check_isatty (gfc_expr * unit)
3002 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3005 if (scalar_check (unit, 0) == FAILURE)
3013 gfc_check_perror (gfc_expr * string)
3015 if (type_check (string, 0, BT_CHARACTER) == FAILURE)
3023 gfc_check_umask (gfc_expr * mask)
3025 if (type_check (mask, 0, BT_INTEGER) == FAILURE)
3028 if (scalar_check (mask, 0) == FAILURE)
3036 gfc_check_umask_sub (gfc_expr * mask, gfc_expr * old)
3038 if (type_check (mask, 0, BT_INTEGER) == FAILURE)
3041 if (scalar_check (mask, 0) == FAILURE)
3047 if (scalar_check (old, 1) == FAILURE)
3050 if (type_check (old, 1, BT_INTEGER) == FAILURE)
3058 gfc_check_unlink (gfc_expr * name)
3060 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
3068 gfc_check_unlink_sub (gfc_expr * name, gfc_expr * status)
3070 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
3076 if (scalar_check (status, 1) == FAILURE)
3079 if (type_check (status, 1, BT_INTEGER) == FAILURE)
3087 gfc_check_signal (gfc_expr * number, gfc_expr * handler)
3089 if (scalar_check (number, 0) == FAILURE)
3092 if (type_check (number, 0, BT_INTEGER) == FAILURE)
3095 if (handler->ts.type != BT_INTEGER && handler->ts.type != BT_PROCEDURE)
3098 "'%s' argument of '%s' intrinsic at %L must be INTEGER or PROCEDURE",
3099 gfc_current_intrinsic_arg[1], gfc_current_intrinsic, &handler->where);
3103 if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE)
3111 gfc_check_signal_sub (gfc_expr * number, gfc_expr * handler, gfc_expr * status)
3113 if (scalar_check (number, 0) == FAILURE)
3116 if (type_check (number, 0, BT_INTEGER) == FAILURE)
3119 if (handler->ts.type != BT_INTEGER && handler->ts.type != BT_PROCEDURE)
3122 "'%s' argument of '%s' intrinsic at %L must be INTEGER or PROCEDURE",
3123 gfc_current_intrinsic_arg[1], gfc_current_intrinsic, &handler->where);
3127 if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE)
3133 if (type_check (status, 2, BT_INTEGER) == FAILURE)
3136 if (scalar_check (status, 2) == FAILURE)
3144 gfc_check_system_sub (gfc_expr * cmd, gfc_expr * status)
3146 if (type_check (cmd, 0, BT_CHARACTER) == FAILURE)
3149 if (scalar_check (status, 1) == FAILURE)
3152 if (type_check (status, 1, BT_INTEGER) == FAILURE)
3155 if (kind_value_check (status, 1, gfc_default_integer_kind) == FAILURE)
3162 /* This is used for the GNU intrinsics AND, OR and XOR. */
3164 gfc_check_and (gfc_expr * i, gfc_expr * j)
3166 if (i->ts.type != BT_INTEGER && i->ts.type != BT_LOGICAL)
3169 "'%s' argument of '%s' intrinsic at %L must be INTEGER or LOGICAL",
3170 gfc_current_intrinsic_arg[0], gfc_current_intrinsic, &i->where);
3174 if (j->ts.type != BT_INTEGER && j->ts.type != BT_LOGICAL)
3177 "'%s' argument of '%s' intrinsic at %L must be INTEGER or LOGICAL",
3178 gfc_current_intrinsic_arg[1], gfc_current_intrinsic, &j->where);
3182 if (i->ts.type != j->ts.type)
3184 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
3185 "have the same type", gfc_current_intrinsic_arg[0],
3186 gfc_current_intrinsic_arg[1], gfc_current_intrinsic,
3191 if (scalar_check (i, 0) == FAILURE)
3194 if (scalar_check (j, 1) == FAILURE)