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 /* Error return for transformational intrinsics not allowed in
382 initialization expressions. */
385 non_init_transformational (void)
387 gfc_error ("transformational intrinsic '%s' at %L is not permitted "
388 "in an initialization expression", gfc_current_intrinsic,
389 gfc_current_intrinsic_where);
393 /***** Check functions *****/
395 /* Check subroutine suitable for intrinsics taking a real argument and
396 a kind argument for the result. */
399 check_a_kind (gfc_expr * a, gfc_expr * kind, bt type)
401 if (type_check (a, 0, BT_REAL) == FAILURE)
403 if (kind_check (kind, 1, type) == FAILURE)
409 /* Check subroutine suitable for ceiling, floor and nint. */
412 gfc_check_a_ikind (gfc_expr * a, gfc_expr * kind)
414 return check_a_kind (a, kind, BT_INTEGER);
417 /* Check subroutine suitable for aint, anint. */
420 gfc_check_a_xkind (gfc_expr * a, gfc_expr * kind)
422 return check_a_kind (a, kind, BT_REAL);
426 gfc_check_abs (gfc_expr * a)
428 if (numeric_check (a, 0) == FAILURE)
435 gfc_check_achar (gfc_expr * a)
438 if (type_check (a, 0, BT_INTEGER) == FAILURE)
446 gfc_check_all_any (gfc_expr * mask, gfc_expr * dim)
448 if (logical_array_check (mask, 0) == FAILURE)
451 if (dim_check (dim, 1, 1) == FAILURE)
455 return non_init_transformational ();
462 gfc_check_allocated (gfc_expr * array)
464 if (variable_check (array, 0) == FAILURE)
467 if (array_check (array, 0) == FAILURE)
470 if (!array->symtree->n.sym->attr.allocatable)
472 gfc_error ("'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE",
473 gfc_current_intrinsic_arg[0], gfc_current_intrinsic,
482 /* Common check function where the first argument must be real or
483 integer and the second argument must be the same as the first. */
486 gfc_check_a_p (gfc_expr * a, gfc_expr * p)
488 if (int_or_real_check (a, 0) == FAILURE)
491 if (a->ts.type != p->ts.type)
493 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
494 "have the same type", gfc_current_intrinsic_arg[0],
495 gfc_current_intrinsic_arg[1], gfc_current_intrinsic,
500 if (a->ts.kind != p->ts.kind)
502 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
503 &p->where) == FAILURE)
512 gfc_check_associated (gfc_expr * pointer, gfc_expr * target)
514 symbol_attribute attr;
519 where = &pointer->where;
521 if (pointer->expr_type == EXPR_VARIABLE)
522 attr = gfc_variable_attr (pointer, NULL);
523 else if (pointer->expr_type == EXPR_FUNCTION)
524 attr = pointer->symtree->n.sym->attr;
525 else if (pointer->expr_type == EXPR_NULL)
528 gcc_assert (0); /* Pointer must be a variable or a function. */
532 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER",
533 gfc_current_intrinsic_arg[0], gfc_current_intrinsic,
538 /* Target argument is optional. */
542 where = &target->where;
543 if (target->expr_type == EXPR_NULL)
546 if (target->expr_type == EXPR_VARIABLE)
547 attr = gfc_variable_attr (target, NULL);
548 else if (target->expr_type == EXPR_FUNCTION)
549 attr = target->symtree->n.sym->attr;
552 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a pointer "
553 "or target VARIABLE or FUNCTION", gfc_current_intrinsic_arg[1],
554 gfc_current_intrinsic, &target->where);
558 if (!attr.pointer && !attr.target)
560 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER "
561 "or a TARGET", gfc_current_intrinsic_arg[1],
562 gfc_current_intrinsic, &target->where);
567 if (same_type_check (pointer, 0, target, 1) == FAILURE)
569 if (rank_check (target, 0, pointer->rank) == FAILURE)
571 if (target->rank > 0)
573 for (i = 0; i < target->rank; i++)
574 if (target->ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
576 gfc_error ("Array section with a vector subscript at %L shall not "
577 "be the target of a pointer",
587 gfc_error ("NULL pointer at %L is not permitted as actual argument "
588 "of '%s' intrinsic function", where, gfc_current_intrinsic);
595 gfc_check_atan2 (gfc_expr * y, gfc_expr * x)
597 if (type_check (y, 0, BT_REAL) == FAILURE)
599 if (same_type_check (y, 0, x, 1) == FAILURE)
606 /* BESJN and BESYN functions. */
609 gfc_check_besn (gfc_expr * n, gfc_expr * x)
611 if (scalar_check (n, 0) == FAILURE)
614 if (type_check (n, 0, BT_INTEGER) == FAILURE)
617 if (scalar_check (x, 1) == FAILURE)
620 if (type_check (x, 1, BT_REAL) == FAILURE)
628 gfc_check_btest (gfc_expr * i, gfc_expr * pos)
630 if (type_check (i, 0, BT_INTEGER) == FAILURE)
632 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
640 gfc_check_char (gfc_expr * i, gfc_expr * kind)
642 if (type_check (i, 0, BT_INTEGER) == FAILURE)
644 if (kind_check (kind, 1, BT_CHARACTER) == FAILURE)
652 gfc_check_chdir (gfc_expr * dir)
654 if (type_check (dir, 0, BT_CHARACTER) == FAILURE)
662 gfc_check_chdir_sub (gfc_expr * dir, gfc_expr * status)
664 if (type_check (dir, 0, BT_CHARACTER) == FAILURE)
670 if (type_check (status, 1, BT_INTEGER) == FAILURE)
673 if (scalar_check (status, 1) == FAILURE)
681 gfc_check_cmplx (gfc_expr * x, gfc_expr * y, gfc_expr * kind)
683 if (numeric_check (x, 0) == FAILURE)
688 if (numeric_check (y, 1) == FAILURE)
691 if (x->ts.type == BT_COMPLEX)
693 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
694 "present if 'x' is COMPLEX", gfc_current_intrinsic_arg[1],
695 gfc_current_intrinsic, &y->where);
700 if (kind_check (kind, 2, BT_COMPLEX) == FAILURE)
708 gfc_check_complex (gfc_expr * x, gfc_expr * y)
710 if (x->ts.type != BT_INTEGER && x->ts.type != BT_REAL)
713 "'%s' argument of '%s' intrinsic at %L must be INTEGER or REAL",
714 gfc_current_intrinsic_arg[0], gfc_current_intrinsic, &x->where);
717 if (scalar_check (x, 0) == FAILURE)
720 if (y->ts.type != BT_INTEGER && y->ts.type != BT_REAL)
723 "'%s' argument of '%s' intrinsic at %L must be INTEGER or REAL",
724 gfc_current_intrinsic_arg[1], gfc_current_intrinsic, &y->where);
727 if (scalar_check (y, 1) == FAILURE)
735 gfc_check_count (gfc_expr * mask, gfc_expr * dim)
737 if (logical_array_check (mask, 0) == FAILURE)
739 if (dim_check (dim, 1, 1) == FAILURE)
743 return non_init_transformational ();
750 gfc_check_cshift (gfc_expr * array, gfc_expr * shift, gfc_expr * dim)
752 if (array_check (array, 0) == FAILURE)
755 if (array->rank == 1)
757 if (scalar_check (shift, 1) == FAILURE)
762 /* TODO: more requirements on shift parameter. */
765 if (dim_check (dim, 2, 1) == FAILURE)
769 return non_init_transformational ();
776 gfc_check_ctime (gfc_expr * time)
778 if (scalar_check (time, 0) == FAILURE)
781 if (type_check (time, 0, BT_INTEGER) == FAILURE)
789 gfc_check_dcmplx (gfc_expr * x, gfc_expr * y)
791 if (numeric_check (x, 0) == FAILURE)
796 if (numeric_check (y, 1) == FAILURE)
799 if (x->ts.type == BT_COMPLEX)
801 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
802 "present if 'x' is COMPLEX", gfc_current_intrinsic_arg[1],
803 gfc_current_intrinsic, &y->where);
813 gfc_check_dble (gfc_expr * x)
815 if (numeric_check (x, 0) == FAILURE)
823 gfc_check_digits (gfc_expr * x)
825 if (int_or_real_check (x, 0) == FAILURE)
833 gfc_check_dot_product (gfc_expr * vector_a, gfc_expr * vector_b)
835 switch (vector_a->ts.type)
838 if (type_check (vector_b, 1, BT_LOGICAL) == FAILURE)
845 if (numeric_check (vector_b, 1) == FAILURE)
850 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
851 "or LOGICAL", gfc_current_intrinsic_arg[0],
852 gfc_current_intrinsic, &vector_a->where);
856 if (rank_check (vector_a, 0, 1) == FAILURE)
859 if (rank_check (vector_b, 1, 1) == FAILURE)
862 if (! identical_dimen_shape (vector_a, 0, vector_b, 0))
864 gfc_error ("different shape for arguments '%s' and '%s' "
865 "at %L for intrinsic 'dot_product'",
866 gfc_current_intrinsic_arg[0],
867 gfc_current_intrinsic_arg[1],
873 return non_init_transformational ();
880 gfc_check_eoshift (gfc_expr * array, gfc_expr * shift, gfc_expr * boundary,
883 if (array_check (array, 0) == FAILURE)
886 if (type_check (shift, 1, BT_INTEGER) == FAILURE)
889 if (array->rank == 1)
891 if (scalar_check (shift, 2) == FAILURE)
896 /* TODO: more weird restrictions on shift. */
899 if (boundary != NULL)
901 if (same_type_check (array, 0, boundary, 2) == FAILURE)
904 /* TODO: more restrictions on boundary. */
907 if (dim_check (dim, 1, 1) == FAILURE)
911 return non_init_transformational ();
917 /* A single complex argument. */
920 gfc_check_fn_c (gfc_expr * a)
922 if (type_check (a, 0, BT_COMPLEX) == FAILURE)
929 /* A single real argument. */
932 gfc_check_fn_r (gfc_expr * a)
934 if (type_check (a, 0, BT_REAL) == FAILURE)
941 /* A single real or complex argument. */
944 gfc_check_fn_rc (gfc_expr * a)
946 if (real_or_complex_check (a, 0) == FAILURE)
954 gfc_check_fnum (gfc_expr * unit)
956 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
959 if (scalar_check (unit, 0) == FAILURE)
966 /* This is used for the g77 one-argument Bessel functions, and the
970 gfc_check_g77_math1 (gfc_expr * x)
972 if (scalar_check (x, 0) == FAILURE)
975 if (type_check (x, 0, BT_REAL) == FAILURE)
983 gfc_check_huge (gfc_expr * x)
985 if (int_or_real_check (x, 0) == FAILURE)
992 /* Check that the single argument is an integer. */
995 gfc_check_i (gfc_expr * i)
997 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1005 gfc_check_iand (gfc_expr * i, gfc_expr * j)
1007 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1010 if (type_check (j, 1, BT_INTEGER) == FAILURE)
1013 if (i->ts.kind != j->ts.kind)
1015 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
1016 &i->where) == FAILURE)
1025 gfc_check_ibclr (gfc_expr * i, gfc_expr * pos)
1027 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1030 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
1038 gfc_check_ibits (gfc_expr * i, gfc_expr * pos, gfc_expr * len)
1040 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1043 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
1046 if (type_check (len, 2, BT_INTEGER) == FAILURE)
1054 gfc_check_ibset (gfc_expr * i, gfc_expr * pos)
1056 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1059 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
1067 gfc_check_ichar_iachar (gfc_expr * c)
1071 if (type_check (c, 0, BT_CHARACTER) == FAILURE)
1074 if (c->expr_type == EXPR_VARIABLE || c->expr_type == EXPR_SUBSTRING)
1080 /* Substring references don't have the charlength set. */
1082 while (ref && ref->type != REF_SUBSTRING)
1085 gcc_assert (ref == NULL || ref->type == REF_SUBSTRING);
1089 /* Check that the argument is length one. Non-constant lengths
1090 can't be checked here, so assume they are ok. */
1091 if (c->ts.cl && c->ts.cl->length)
1093 /* If we already have a length for this expression then use it. */
1094 if (c->ts.cl->length->expr_type != EXPR_CONSTANT)
1096 i = mpz_get_si (c->ts.cl->length->value.integer);
1103 start = ref->u.ss.start;
1104 end = ref->u.ss.end;
1107 if (end == NULL || end->expr_type != EXPR_CONSTANT
1108 || start->expr_type != EXPR_CONSTANT)
1111 i = mpz_get_si (end->value.integer) + 1
1112 - mpz_get_si (start->value.integer);
1120 gfc_error ("Argument of %s at %L must be of length one",
1121 gfc_current_intrinsic, &c->where);
1130 gfc_check_idnint (gfc_expr * a)
1132 if (double_check (a, 0) == FAILURE)
1140 gfc_check_ieor (gfc_expr * i, gfc_expr * j)
1142 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1145 if (type_check (j, 1, BT_INTEGER) == FAILURE)
1148 if (i->ts.kind != j->ts.kind)
1150 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
1151 &i->where) == FAILURE)
1160 gfc_check_index (gfc_expr * string, gfc_expr * substring, gfc_expr * back)
1162 if (type_check (string, 0, BT_CHARACTER) == FAILURE
1163 || type_check (substring, 1, BT_CHARACTER) == FAILURE)
1167 if (back != NULL && type_check (back, 2, BT_LOGICAL) == FAILURE)
1170 if (string->ts.kind != substring->ts.kind)
1172 gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same "
1173 "kind as '%s'", gfc_current_intrinsic_arg[1],
1174 gfc_current_intrinsic, &substring->where,
1175 gfc_current_intrinsic_arg[0]);
1184 gfc_check_int (gfc_expr * x, gfc_expr * kind)
1186 if (numeric_check (x, 0) == FAILURE)
1191 if (type_check (kind, 1, BT_INTEGER) == FAILURE)
1194 if (scalar_check (kind, 1) == FAILURE)
1203 gfc_check_intconv (gfc_expr * x)
1205 if (numeric_check (x, 0) == FAILURE)
1213 gfc_check_ior (gfc_expr * i, gfc_expr * j)
1215 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1218 if (type_check (j, 1, BT_INTEGER) == FAILURE)
1221 if (i->ts.kind != j->ts.kind)
1223 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
1224 &i->where) == FAILURE)
1233 gfc_check_ishft (gfc_expr * i, gfc_expr * shift)
1235 if (type_check (i, 0, BT_INTEGER) == FAILURE
1236 || type_check (shift, 1, BT_INTEGER) == FAILURE)
1244 gfc_check_ishftc (gfc_expr * i, gfc_expr * shift, gfc_expr * size)
1246 if (type_check (i, 0, BT_INTEGER) == FAILURE
1247 || type_check (shift, 1, BT_INTEGER) == FAILURE)
1250 if (size != NULL && type_check (size, 2, BT_INTEGER) == FAILURE)
1258 gfc_check_kill (gfc_expr * pid, gfc_expr * sig)
1260 if (type_check (pid, 0, BT_INTEGER) == FAILURE)
1263 if (type_check (sig, 1, BT_INTEGER) == FAILURE)
1271 gfc_check_kill_sub (gfc_expr * pid, gfc_expr * sig, gfc_expr * status)
1273 if (type_check (pid, 0, BT_INTEGER) == FAILURE)
1276 if (type_check (sig, 1, BT_INTEGER) == FAILURE)
1282 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1285 if (scalar_check (status, 2) == FAILURE)
1293 gfc_check_kind (gfc_expr * x)
1295 if (x->ts.type == BT_DERIVED)
1297 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a "
1298 "non-derived type", gfc_current_intrinsic_arg[0],
1299 gfc_current_intrinsic, &x->where);
1308 gfc_check_lbound (gfc_expr * array, gfc_expr * dim)
1310 if (array_check (array, 0) == FAILURE)
1315 if (dim_check (dim, 1, 1) == FAILURE)
1318 if (dim_rank_check (dim, array, 1) == FAILURE)
1326 gfc_check_link (gfc_expr * path1, gfc_expr * path2)
1328 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1331 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1339 gfc_check_link_sub (gfc_expr * path1, gfc_expr * path2, gfc_expr * status)
1341 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1344 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1350 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1353 if (scalar_check (status, 2) == FAILURE)
1360 gfc_check_loc (gfc_expr *expr)
1362 return variable_check (expr, 0);
1367 gfc_check_symlnk (gfc_expr * path1, gfc_expr * path2)
1369 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1372 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1380 gfc_check_symlnk_sub (gfc_expr * path1, gfc_expr * path2, gfc_expr * status)
1382 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1385 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1391 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1394 if (scalar_check (status, 2) == FAILURE)
1402 gfc_check_logical (gfc_expr * a, gfc_expr * kind)
1404 if (type_check (a, 0, BT_LOGICAL) == FAILURE)
1406 if (kind_check (kind, 1, BT_LOGICAL) == FAILURE)
1413 /* Min/max family. */
1416 min_max_args (gfc_actual_arglist * arg)
1418 if (arg == NULL || arg->next == NULL)
1420 gfc_error ("Intrinsic '%s' at %L must have at least two arguments",
1421 gfc_current_intrinsic, gfc_current_intrinsic_where);
1430 check_rest (bt type, int kind, gfc_actual_arglist * arg)
1435 if (min_max_args (arg) == FAILURE)
1440 for (; arg; arg = arg->next, n++)
1443 if (x->ts.type != type || x->ts.kind != kind)
1445 if (x->ts.type == type)
1447 if (gfc_notify_std (GFC_STD_GNU,
1448 "Extension: Different type kinds at %L", &x->where)
1454 gfc_error ("'a%d' argument of '%s' intrinsic at %L must be %s(%d)",
1455 n, gfc_current_intrinsic, &x->where,
1456 gfc_basic_typename (type), kind);
1467 gfc_check_min_max (gfc_actual_arglist * arg)
1471 if (min_max_args (arg) == FAILURE)
1476 if (x->ts.type != BT_INTEGER && x->ts.type != BT_REAL)
1479 ("'a1' argument of '%s' intrinsic at %L must be INTEGER or REAL",
1480 gfc_current_intrinsic, &x->where);
1484 return check_rest (x->ts.type, x->ts.kind, arg);
1489 gfc_check_min_max_integer (gfc_actual_arglist * arg)
1491 return check_rest (BT_INTEGER, gfc_default_integer_kind, arg);
1496 gfc_check_min_max_real (gfc_actual_arglist * arg)
1498 return check_rest (BT_REAL, gfc_default_real_kind, arg);
1503 gfc_check_min_max_double (gfc_actual_arglist * arg)
1505 return check_rest (BT_REAL, gfc_default_double_kind, arg);
1508 /* End of min/max family. */
1511 gfc_check_malloc (gfc_expr * size)
1513 if (type_check (size, 0, BT_INTEGER) == FAILURE)
1516 if (scalar_check (size, 0) == FAILURE)
1524 gfc_check_matmul (gfc_expr * matrix_a, gfc_expr * matrix_b)
1526 if ((matrix_a->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_b->ts))
1528 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1529 "or LOGICAL", gfc_current_intrinsic_arg[0],
1530 gfc_current_intrinsic, &matrix_a->where);
1534 if ((matrix_b->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_a->ts))
1536 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1537 "or LOGICAL", gfc_current_intrinsic_arg[1],
1538 gfc_current_intrinsic, &matrix_b->where);
1542 switch (matrix_a->rank)
1545 if (rank_check (matrix_b, 1, 2) == FAILURE)
1547 /* Check for case matrix_a has shape(m), matrix_b has shape (m, k). */
1548 if (! identical_dimen_shape (matrix_a, 0, matrix_b, 0))
1550 gfc_error ("different shape on dimension 1 for arguments '%s' "
1551 "and '%s' at %L for intrinsic matmul",
1552 gfc_current_intrinsic_arg[0],
1553 gfc_current_intrinsic_arg[1],
1560 if (matrix_b->rank != 2)
1562 if (rank_check (matrix_b, 1, 1) == FAILURE)
1565 /* matrix_b has rank 1 or 2 here. Common check for the cases
1566 - matrix_a has shape (n,m) and matrix_b has shape (m, k)
1567 - matrix_a has shape (n,m) and matrix_b has shape (m). */
1568 if (! identical_dimen_shape (matrix_a, 1, matrix_b, 0))
1570 gfc_error ("different shape on dimension 2 for argument '%s' and "
1571 "dimension 1 for argument '%s' at %L for intrinsic "
1572 "matmul", gfc_current_intrinsic_arg[0],
1573 gfc_current_intrinsic_arg[1], &matrix_a->where);
1579 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank "
1580 "1 or 2", gfc_current_intrinsic_arg[0],
1581 gfc_current_intrinsic, &matrix_a->where);
1586 return non_init_transformational ();
1592 /* Whoever came up with this interface was probably on something.
1593 The possibilities for the occupation of the second and third
1600 NULL MASK minloc(array, mask=m)
1603 I.e. in the case of minloc(array,mask), mask will be in the second
1604 position of the argument list and we'll have to fix that up. */
1607 gfc_check_minloc_maxloc (gfc_actual_arglist * ap)
1609 gfc_expr *a, *m, *d;
1612 if (int_or_real_check (a, 0) == FAILURE
1613 || array_check (a, 0) == FAILURE)
1617 m = ap->next->next->expr;
1619 if (m == NULL && d != NULL && d->ts.type == BT_LOGICAL
1620 && ap->next->name == NULL)
1625 ap->next->expr = NULL;
1626 ap->next->next->expr = m;
1629 if (dim_check (d, 1, 1) == FAILURE)
1632 if (d && dim_rank_check (d, a, 0) == FAILURE)
1635 if (m != NULL && type_check (m, 2, BT_LOGICAL) == FAILURE)
1641 snprintf(buffer, sizeof(buffer), "arguments '%s' and '%s' for intrinsic %s",
1642 gfc_current_intrinsic_arg[0], gfc_current_intrinsic_arg[2],
1643 gfc_current_intrinsic);
1644 if (gfc_check_conformance (buffer, a, m) == FAILURE)
1649 return non_init_transformational ();
1655 /* Similar to minloc/maxloc, the argument list might need to be
1656 reordered for the MINVAL, MAXVAL, PRODUCT, and SUM intrinsics. The
1657 difference is that MINLOC/MAXLOC take an additional KIND argument.
1658 The possibilities are:
1664 NULL MASK minval(array, mask=m)
1667 I.e. in the case of minval(array,mask), mask will be in the second
1668 position of the argument list and we'll have to fix that up. */
1671 check_reduction (gfc_actual_arglist * ap)
1673 gfc_expr *a, *m, *d;
1677 m = ap->next->next->expr;
1679 if (m == NULL && d != NULL && d->ts.type == BT_LOGICAL
1680 && ap->next->name == NULL)
1685 ap->next->expr = NULL;
1686 ap->next->next->expr = m;
1689 if (dim_check (d, 1, 1) == FAILURE)
1692 if (d && dim_rank_check (d, a, 0) == FAILURE)
1695 if (m != NULL && type_check (m, 2, BT_LOGICAL) == FAILURE)
1701 snprintf(buffer, sizeof(buffer), "arguments '%s' and '%s' for intrinsic %s",
1702 gfc_current_intrinsic_arg[0], gfc_current_intrinsic_arg[2],
1703 gfc_current_intrinsic);
1704 if (gfc_check_conformance (buffer, a, m) == FAILURE)
1713 gfc_check_minval_maxval (gfc_actual_arglist * ap)
1715 if (int_or_real_check (ap->expr, 0) == FAILURE
1716 || array_check (ap->expr, 0) == FAILURE)
1720 return non_init_transformational ();
1722 return check_reduction (ap);
1727 gfc_check_product_sum (gfc_actual_arglist * ap)
1729 if (numeric_check (ap->expr, 0) == FAILURE
1730 || array_check (ap->expr, 0) == FAILURE)
1734 return non_init_transformational ();
1736 return check_reduction (ap);
1741 gfc_check_merge (gfc_expr * tsource, gfc_expr * fsource, gfc_expr * mask)
1745 if (same_type_check (tsource, 0, fsource, 1) == FAILURE)
1748 if (type_check (mask, 2, BT_LOGICAL) == FAILURE)
1751 snprintf(buffer, sizeof(buffer), "arguments '%s' and '%s' for intrinsic '%s'",
1752 gfc_current_intrinsic_arg[0], gfc_current_intrinsic_arg[1],
1753 gfc_current_intrinsic);
1754 if (gfc_check_conformance (buffer, tsource, fsource) == FAILURE)
1757 snprintf(buffer, sizeof(buffer), "arguments '%s' and '%s' for intrinsic '%s'",
1758 gfc_current_intrinsic_arg[0], gfc_current_intrinsic_arg[2],
1759 gfc_current_intrinsic);
1760 if (gfc_check_conformance (buffer, tsource, mask) == FAILURE)
1768 gfc_check_nearest (gfc_expr * x, gfc_expr * s)
1770 if (type_check (x, 0, BT_REAL) == FAILURE)
1773 if (type_check (s, 1, BT_REAL) == FAILURE)
1781 gfc_check_null (gfc_expr * mold)
1783 symbol_attribute attr;
1788 if (variable_check (mold, 0) == FAILURE)
1791 attr = gfc_variable_attr (mold, NULL);
1795 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER",
1796 gfc_current_intrinsic_arg[0],
1797 gfc_current_intrinsic, &mold->where);
1806 gfc_check_pack (gfc_expr * array, gfc_expr * mask, gfc_expr * vector)
1810 if (array_check (array, 0) == FAILURE)
1813 if (type_check (mask, 1, BT_LOGICAL) == FAILURE)
1816 snprintf(buffer, sizeof(buffer), "arguments '%s' and '%s' for intrinsic '%s'",
1817 gfc_current_intrinsic_arg[0], gfc_current_intrinsic_arg[1],
1818 gfc_current_intrinsic);
1819 if (gfc_check_conformance (buffer, array, mask) == FAILURE)
1824 if (same_type_check (array, 0, vector, 2) == FAILURE)
1827 if (rank_check (vector, 2, 1) == FAILURE)
1830 /* TODO: More constraints here. */
1834 return non_init_transformational ();
1841 gfc_check_precision (gfc_expr * x)
1843 if (x->ts.type != BT_REAL && x->ts.type != BT_COMPLEX)
1845 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of type "
1846 "REAL or COMPLEX", gfc_current_intrinsic_arg[0],
1847 gfc_current_intrinsic, &x->where);
1856 gfc_check_present (gfc_expr * a)
1860 if (variable_check (a, 0) == FAILURE)
1863 sym = a->symtree->n.sym;
1864 if (!sym->attr.dummy)
1866 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a "
1867 "dummy variable", gfc_current_intrinsic_arg[0],
1868 gfc_current_intrinsic, &a->where);
1872 if (!sym->attr.optional)
1874 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of "
1875 "an OPTIONAL dummy variable", gfc_current_intrinsic_arg[0],
1876 gfc_current_intrinsic, &a->where);
1880 /* 13.14.82 PRESENT(A)
1882 Argument. A shall be the name of an optional dummy argument that is accessible
1883 in the subprogram in which the PRESENT function reference appears... */
1886 && !(a->ref->next == NULL
1887 && a->ref->type == REF_ARRAY
1888 && a->ref->u.ar.type == AR_FULL))
1890 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be a sub-"
1891 "object of '%s'", gfc_current_intrinsic_arg[0],
1892 gfc_current_intrinsic, &a->where, sym->name);
1901 gfc_check_radix (gfc_expr * x)
1903 if (int_or_real_check (x, 0) == FAILURE)
1911 gfc_check_range (gfc_expr * x)
1913 if (numeric_check (x, 0) == FAILURE)
1920 /* real, float, sngl. */
1922 gfc_check_real (gfc_expr * a, gfc_expr * kind)
1924 if (numeric_check (a, 0) == FAILURE)
1927 if (kind_check (kind, 1, BT_REAL) == FAILURE)
1935 gfc_check_rename (gfc_expr * path1, gfc_expr * path2)
1937 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1940 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1948 gfc_check_rename_sub (gfc_expr * path1, gfc_expr * path2, gfc_expr * status)
1950 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1953 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1959 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1962 if (scalar_check (status, 2) == FAILURE)
1970 gfc_check_repeat (gfc_expr * x, gfc_expr * y)
1972 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
1975 if (scalar_check (x, 0) == FAILURE)
1978 if (type_check (y, 0, BT_INTEGER) == FAILURE)
1981 if (scalar_check (y, 1) == FAILURE)
1989 gfc_check_reshape (gfc_expr * source, gfc_expr * shape,
1990 gfc_expr * pad, gfc_expr * order)
1995 if (array_check (source, 0) == FAILURE)
1998 if (rank_check (shape, 1, 1) == FAILURE)
2001 if (type_check (shape, 1, BT_INTEGER) == FAILURE)
2004 if (gfc_array_size (shape, &size) != SUCCESS)
2006 gfc_error ("'shape' argument of 'reshape' intrinsic at %L must be an "
2007 "array of constant size", &shape->where);
2011 m = mpz_cmp_ui (size, GFC_MAX_DIMENSIONS);
2016 gfc_error ("'shape' argument of 'reshape' intrinsic at %L has more "
2017 "than %d elements", &shape->where, GFC_MAX_DIMENSIONS);
2023 if (same_type_check (source, 0, pad, 2) == FAILURE)
2025 if (array_check (pad, 2) == FAILURE)
2029 if (order != NULL && array_check (order, 3) == FAILURE)
2037 gfc_check_scale (gfc_expr * x, gfc_expr * i)
2039 if (type_check (x, 0, BT_REAL) == FAILURE)
2042 if (type_check (i, 1, BT_INTEGER) == FAILURE)
2050 gfc_check_scan (gfc_expr * x, gfc_expr * y, gfc_expr * z)
2052 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
2055 if (type_check (y, 1, BT_CHARACTER) == FAILURE)
2058 if (z != NULL && type_check (z, 2, BT_LOGICAL) == FAILURE)
2061 if (same_type_check (x, 0, y, 1) == FAILURE)
2069 gfc_check_secnds (gfc_expr * r)
2072 if (type_check (r, 0, BT_REAL) == FAILURE)
2075 if (kind_value_check (r, 0, 4) == FAILURE)
2078 if (scalar_check (r, 0) == FAILURE)
2086 gfc_check_selected_int_kind (gfc_expr * r)
2089 if (type_check (r, 0, BT_INTEGER) == FAILURE)
2092 if (scalar_check (r, 0) == FAILURE)
2100 gfc_check_selected_real_kind (gfc_expr * p, gfc_expr * r)
2102 if (p == NULL && r == NULL)
2104 gfc_error ("Missing arguments to %s intrinsic at %L",
2105 gfc_current_intrinsic, gfc_current_intrinsic_where);
2110 if (p != NULL && type_check (p, 0, BT_INTEGER) == FAILURE)
2113 if (r != NULL && type_check (r, 1, BT_INTEGER) == FAILURE)
2121 gfc_check_set_exponent (gfc_expr * x, gfc_expr * i)
2123 if (type_check (x, 0, BT_REAL) == FAILURE)
2126 if (type_check (i, 1, BT_INTEGER) == FAILURE)
2134 gfc_check_shape (gfc_expr * source)
2138 if (source->rank == 0 || source->expr_type != EXPR_VARIABLE)
2141 ar = gfc_find_array_ref (source);
2143 if (ar->as && ar->as->type == AS_ASSUMED_SIZE)
2145 gfc_error ("'source' argument of 'shape' intrinsic at %L must not be "
2146 "an assumed size array", &source->where);
2155 gfc_check_sign (gfc_expr * a, gfc_expr * b)
2157 if (int_or_real_check (a, 0) == FAILURE)
2160 if (same_type_check (a, 0, b, 1) == FAILURE)
2168 gfc_check_size (gfc_expr * array, gfc_expr * dim)
2170 if (array_check (array, 0) == FAILURE)
2175 if (type_check (dim, 1, BT_INTEGER) == FAILURE)
2178 if (kind_value_check (dim, 1, gfc_default_integer_kind) == FAILURE)
2181 if (dim_rank_check (dim, array, 0) == FAILURE)
2190 gfc_check_sleep_sub (gfc_expr * seconds)
2192 if (type_check (seconds, 0, BT_INTEGER) == FAILURE)
2195 if (scalar_check (seconds, 0) == FAILURE)
2203 gfc_check_spread (gfc_expr * source, gfc_expr * dim, gfc_expr * ncopies)
2205 if (source->rank >= GFC_MAX_DIMENSIONS)
2207 gfc_error ("'%s' argument of '%s' intrinsic at %L must be less "
2208 "than rank %d", gfc_current_intrinsic_arg[0],
2209 gfc_current_intrinsic, &source->where, GFC_MAX_DIMENSIONS);
2214 if (dim_check (dim, 1, 0) == FAILURE)
2217 if (type_check (ncopies, 2, BT_INTEGER) == FAILURE)
2220 if (scalar_check (ncopies, 2) == FAILURE)
2224 return non_init_transformational ();
2230 /* Functions for checking FGETC, FPUTC, FGET and FPUT (subroutines and
2233 gfc_check_fgetputc_sub (gfc_expr * unit, gfc_expr * c, gfc_expr * status)
2235 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2238 if (scalar_check (unit, 0) == FAILURE)
2241 if (type_check (c, 1, BT_CHARACTER) == FAILURE)
2247 if (type_check (status, 2, BT_INTEGER) == FAILURE
2248 || kind_value_check (status, 2, gfc_default_integer_kind) == FAILURE
2249 || scalar_check (status, 2) == FAILURE)
2257 gfc_check_fgetputc (gfc_expr * unit, gfc_expr * c)
2259 return gfc_check_fgetputc_sub (unit, c, NULL);
2264 gfc_check_fgetput_sub (gfc_expr * c, gfc_expr * status)
2266 if (type_check (c, 0, BT_CHARACTER) == FAILURE)
2272 if (type_check (status, 1, BT_INTEGER) == FAILURE
2273 || kind_value_check (status, 1, gfc_default_integer_kind) == FAILURE
2274 || scalar_check (status, 1) == FAILURE)
2282 gfc_check_fgetput (gfc_expr * c)
2284 return gfc_check_fgetput_sub (c, NULL);
2289 gfc_check_fstat (gfc_expr * unit, gfc_expr * array)
2291 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2294 if (scalar_check (unit, 0) == FAILURE)
2297 if (type_check (array, 1, BT_INTEGER) == FAILURE
2298 || kind_value_check (unit, 0, gfc_default_integer_kind) == FAILURE)
2301 if (array_check (array, 1) == FAILURE)
2309 gfc_check_fstat_sub (gfc_expr * unit, gfc_expr * array, gfc_expr * status)
2311 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2314 if (scalar_check (unit, 0) == FAILURE)
2317 if (type_check (array, 1, BT_INTEGER) == FAILURE
2318 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
2321 if (array_check (array, 1) == FAILURE)
2327 if (type_check (status, 2, BT_INTEGER) == FAILURE
2328 || kind_value_check (status, 2, gfc_default_integer_kind) == FAILURE)
2331 if (scalar_check (status, 2) == FAILURE)
2339 gfc_check_ftell (gfc_expr * unit)
2341 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2344 if (scalar_check (unit, 0) == FAILURE)
2352 gfc_check_ftell_sub (gfc_expr * unit, gfc_expr * offset)
2354 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2357 if (scalar_check (unit, 0) == FAILURE)
2360 if (type_check (offset, 1, BT_INTEGER) == FAILURE)
2363 if (scalar_check (offset, 1) == FAILURE)
2371 gfc_check_stat (gfc_expr * name, gfc_expr * array)
2373 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
2376 if (type_check (array, 1, BT_INTEGER) == FAILURE
2377 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
2380 if (array_check (array, 1) == FAILURE)
2388 gfc_check_stat_sub (gfc_expr * name, gfc_expr * array, gfc_expr * status)
2390 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
2393 if (type_check (array, 1, BT_INTEGER) == FAILURE
2394 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
2397 if (array_check (array, 1) == FAILURE)
2403 if (type_check (status, 2, BT_INTEGER) == FAILURE
2404 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
2407 if (scalar_check (status, 2) == FAILURE)
2415 gfc_check_transfer (gfc_expr * source ATTRIBUTE_UNUSED,
2416 gfc_expr * mold ATTRIBUTE_UNUSED,
2421 if (type_check (size, 2, BT_INTEGER) == FAILURE)
2424 if (scalar_check (size, 2) == FAILURE)
2427 if (nonoptional_check (size, 2) == FAILURE)
2436 gfc_check_transpose (gfc_expr * matrix)
2438 if (rank_check (matrix, 0, 2) == FAILURE)
2442 return non_init_transformational ();
2449 gfc_check_ubound (gfc_expr * array, gfc_expr * dim)
2451 if (array_check (array, 0) == FAILURE)
2456 if (dim_check (dim, 1, 1) == FAILURE)
2459 if (dim_rank_check (dim, array, 0) == FAILURE)
2468 gfc_check_unpack (gfc_expr * vector, gfc_expr * mask, gfc_expr * field)
2470 if (rank_check (vector, 0, 1) == FAILURE)
2473 if (array_check (mask, 1) == FAILURE)
2476 if (type_check (mask, 1, BT_LOGICAL) == FAILURE)
2479 if (same_type_check (vector, 0, field, 2) == FAILURE)
2483 return non_init_transformational ();
2490 gfc_check_verify (gfc_expr * x, gfc_expr * y, gfc_expr * z)
2492 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
2495 if (same_type_check (x, 0, y, 1) == FAILURE)
2498 if (z != NULL && type_check (z, 2, BT_LOGICAL) == FAILURE)
2506 gfc_check_trim (gfc_expr * x)
2508 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
2511 if (scalar_check (x, 0) == FAILURE)
2519 gfc_check_ttynam (gfc_expr * unit)
2521 if (scalar_check (unit, 0) == FAILURE)
2524 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2531 /* Common check function for the half a dozen intrinsics that have a
2532 single real argument. */
2535 gfc_check_x (gfc_expr * x)
2537 if (type_check (x, 0, BT_REAL) == FAILURE)
2544 /************* Check functions for intrinsic subroutines *************/
2547 gfc_check_cpu_time (gfc_expr * time)
2549 if (scalar_check (time, 0) == FAILURE)
2552 if (type_check (time, 0, BT_REAL) == FAILURE)
2555 if (variable_check (time, 0) == FAILURE)
2563 gfc_check_date_and_time (gfc_expr * date, gfc_expr * time,
2564 gfc_expr * zone, gfc_expr * values)
2568 if (type_check (date, 0, BT_CHARACTER) == FAILURE)
2570 if (scalar_check (date, 0) == FAILURE)
2572 if (variable_check (date, 0) == FAILURE)
2578 if (type_check (time, 1, BT_CHARACTER) == FAILURE)
2580 if (scalar_check (time, 1) == FAILURE)
2582 if (variable_check (time, 1) == FAILURE)
2588 if (type_check (zone, 2, BT_CHARACTER) == FAILURE)
2590 if (scalar_check (zone, 2) == FAILURE)
2592 if (variable_check (zone, 2) == FAILURE)
2598 if (type_check (values, 3, BT_INTEGER) == FAILURE)
2600 if (array_check (values, 3) == FAILURE)
2602 if (rank_check (values, 3, 1) == FAILURE)
2604 if (variable_check (values, 3) == FAILURE)
2613 gfc_check_mvbits (gfc_expr * from, gfc_expr * frompos, gfc_expr * len,
2614 gfc_expr * to, gfc_expr * topos)
2616 if (type_check (from, 0, BT_INTEGER) == FAILURE)
2619 if (type_check (frompos, 1, BT_INTEGER) == FAILURE)
2622 if (type_check (len, 2, BT_INTEGER) == FAILURE)
2625 if (same_type_check (from, 0, to, 3) == FAILURE)
2628 if (variable_check (to, 3) == FAILURE)
2631 if (type_check (topos, 4, BT_INTEGER) == FAILURE)
2639 gfc_check_random_number (gfc_expr * harvest)
2641 if (type_check (harvest, 0, BT_REAL) == FAILURE)
2644 if (variable_check (harvest, 0) == FAILURE)
2652 gfc_check_random_seed (gfc_expr * size, gfc_expr * put, gfc_expr * get)
2656 if (scalar_check (size, 0) == FAILURE)
2659 if (type_check (size, 0, BT_INTEGER) == FAILURE)
2662 if (variable_check (size, 0) == FAILURE)
2665 if (kind_value_check (size, 0, gfc_default_integer_kind) == FAILURE)
2673 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic,
2676 if (array_check (put, 1) == FAILURE)
2679 if (rank_check (put, 1, 1) == FAILURE)
2682 if (type_check (put, 1, BT_INTEGER) == FAILURE)
2685 if (kind_value_check (put, 1, gfc_default_integer_kind) == FAILURE)
2692 if (size != NULL || put != NULL)
2693 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic,
2696 if (array_check (get, 2) == FAILURE)
2699 if (rank_check (get, 2, 1) == FAILURE)
2702 if (type_check (get, 2, BT_INTEGER) == FAILURE)
2705 if (variable_check (get, 2) == FAILURE)
2708 if (kind_value_check (get, 2, gfc_default_integer_kind) == FAILURE)
2716 gfc_check_second_sub (gfc_expr * time)
2718 if (scalar_check (time, 0) == FAILURE)
2721 if (type_check (time, 0, BT_REAL) == FAILURE)
2724 if (kind_value_check(time, 0, 4) == FAILURE)
2731 /* The arguments of SYSTEM_CLOCK are scalar, integer variables. Note,
2732 count, count_rate, and count_max are all optional arguments */
2735 gfc_check_system_clock (gfc_expr * count, gfc_expr * count_rate,
2736 gfc_expr * count_max)
2740 if (scalar_check (count, 0) == FAILURE)
2743 if (type_check (count, 0, BT_INTEGER) == FAILURE)
2746 if (variable_check (count, 0) == FAILURE)
2750 if (count_rate != NULL)
2752 if (scalar_check (count_rate, 1) == FAILURE)
2755 if (type_check (count_rate, 1, BT_INTEGER) == FAILURE)
2758 if (variable_check (count_rate, 1) == FAILURE)
2762 && same_type_check (count, 0, count_rate, 1) == FAILURE)
2767 if (count_max != NULL)
2769 if (scalar_check (count_max, 2) == FAILURE)
2772 if (type_check (count_max, 2, BT_INTEGER) == FAILURE)
2775 if (variable_check (count_max, 2) == FAILURE)
2779 && same_type_check (count, 0, count_max, 2) == FAILURE)
2782 if (count_rate != NULL
2783 && same_type_check (count_rate, 1, count_max, 2) == FAILURE)
2791 gfc_check_irand (gfc_expr * x)
2796 if (scalar_check (x, 0) == FAILURE)
2799 if (type_check (x, 0, BT_INTEGER) == FAILURE)
2802 if (kind_value_check(x, 0, 4) == FAILURE)
2810 gfc_check_alarm_sub (gfc_expr * seconds, gfc_expr * handler, gfc_expr * status)
2812 if (scalar_check (seconds, 0) == FAILURE)
2815 if (type_check (seconds, 0, BT_INTEGER) == FAILURE)
2818 if (handler->ts.type != BT_INTEGER && handler->ts.type != BT_PROCEDURE)
2821 "'%s' argument of '%s' intrinsic at %L must be INTEGER or PROCEDURE",
2822 gfc_current_intrinsic_arg[1], gfc_current_intrinsic, &handler->where);
2826 if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE)
2832 if (scalar_check (status, 2) == FAILURE)
2835 if (type_check (status, 2, BT_INTEGER) == FAILURE)
2843 gfc_check_rand (gfc_expr * x)
2848 if (scalar_check (x, 0) == FAILURE)
2851 if (type_check (x, 0, BT_INTEGER) == FAILURE)
2854 if (kind_value_check(x, 0, 4) == FAILURE)
2861 gfc_check_srand (gfc_expr * x)
2863 if (scalar_check (x, 0) == FAILURE)
2866 if (type_check (x, 0, BT_INTEGER) == FAILURE)
2869 if (kind_value_check(x, 0, 4) == FAILURE)
2876 gfc_check_ctime_sub (gfc_expr * time, gfc_expr * result)
2878 if (scalar_check (time, 0) == FAILURE)
2881 if (type_check (time, 0, BT_INTEGER) == FAILURE)
2884 if (type_check (result, 1, BT_CHARACTER) == FAILURE)
2891 gfc_check_etime (gfc_expr * x)
2893 if (array_check (x, 0) == FAILURE)
2896 if (rank_check (x, 0, 1) == FAILURE)
2899 if (variable_check (x, 0) == FAILURE)
2902 if (type_check (x, 0, BT_REAL) == FAILURE)
2905 if (kind_value_check(x, 0, 4) == FAILURE)
2912 gfc_check_etime_sub (gfc_expr * values, gfc_expr * time)
2914 if (array_check (values, 0) == FAILURE)
2917 if (rank_check (values, 0, 1) == FAILURE)
2920 if (variable_check (values, 0) == FAILURE)
2923 if (type_check (values, 0, BT_REAL) == FAILURE)
2926 if (kind_value_check(values, 0, 4) == FAILURE)
2929 if (scalar_check (time, 1) == FAILURE)
2932 if (type_check (time, 1, BT_REAL) == FAILURE)
2935 if (kind_value_check(time, 1, 4) == FAILURE)
2943 gfc_check_fdate_sub (gfc_expr * date)
2945 if (type_check (date, 0, BT_CHARACTER) == FAILURE)
2953 gfc_check_gerror (gfc_expr * msg)
2955 if (type_check (msg, 0, BT_CHARACTER) == FAILURE)
2963 gfc_check_getcwd_sub (gfc_expr * cwd, gfc_expr * status)
2965 if (type_check (cwd, 0, BT_CHARACTER) == FAILURE)
2971 if (scalar_check (status, 1) == FAILURE)
2974 if (type_check (status, 1, BT_INTEGER) == FAILURE)
2982 gfc_check_getlog (gfc_expr * msg)
2984 if (type_check (msg, 0, BT_CHARACTER) == FAILURE)
2992 gfc_check_exit (gfc_expr * status)
2997 if (type_check (status, 0, BT_INTEGER) == FAILURE)
3000 if (scalar_check (status, 0) == FAILURE)
3008 gfc_check_flush (gfc_expr * unit)
3013 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3016 if (scalar_check (unit, 0) == FAILURE)
3024 gfc_check_free (gfc_expr * i)
3026 if (type_check (i, 0, BT_INTEGER) == FAILURE)
3029 if (scalar_check (i, 0) == FAILURE)
3037 gfc_check_hostnm (gfc_expr * name)
3039 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
3047 gfc_check_hostnm_sub (gfc_expr * name, gfc_expr * status)
3049 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
3055 if (scalar_check (status, 1) == FAILURE)
3058 if (type_check (status, 1, BT_INTEGER) == FAILURE)
3066 gfc_check_itime_idate (gfc_expr * values)
3068 if (array_check (values, 0) == FAILURE)
3071 if (rank_check (values, 0, 1) == FAILURE)
3074 if (variable_check (values, 0) == FAILURE)
3077 if (type_check (values, 0, BT_INTEGER) == FAILURE)
3080 if (kind_value_check(values, 0, gfc_default_integer_kind) == FAILURE)
3088 gfc_check_ttynam_sub (gfc_expr * unit, gfc_expr * name)
3090 if (scalar_check (unit, 0) == FAILURE)
3093 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3096 if (type_check (name, 1, BT_CHARACTER) == FAILURE)
3104 gfc_check_isatty (gfc_expr * unit)
3109 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3112 if (scalar_check (unit, 0) == FAILURE)
3120 gfc_check_perror (gfc_expr * string)
3122 if (type_check (string, 0, BT_CHARACTER) == FAILURE)
3130 gfc_check_umask (gfc_expr * mask)
3132 if (type_check (mask, 0, BT_INTEGER) == FAILURE)
3135 if (scalar_check (mask, 0) == FAILURE)
3143 gfc_check_umask_sub (gfc_expr * mask, gfc_expr * old)
3145 if (type_check (mask, 0, BT_INTEGER) == FAILURE)
3148 if (scalar_check (mask, 0) == FAILURE)
3154 if (scalar_check (old, 1) == FAILURE)
3157 if (type_check (old, 1, BT_INTEGER) == FAILURE)
3165 gfc_check_unlink (gfc_expr * name)
3167 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
3175 gfc_check_unlink_sub (gfc_expr * name, gfc_expr * status)
3177 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
3183 if (scalar_check (status, 1) == FAILURE)
3186 if (type_check (status, 1, BT_INTEGER) == FAILURE)
3194 gfc_check_signal (gfc_expr * number, gfc_expr * handler)
3196 if (scalar_check (number, 0) == FAILURE)
3199 if (type_check (number, 0, BT_INTEGER) == FAILURE)
3202 if (handler->ts.type != BT_INTEGER && handler->ts.type != BT_PROCEDURE)
3205 "'%s' argument of '%s' intrinsic at %L must be INTEGER or PROCEDURE",
3206 gfc_current_intrinsic_arg[1], gfc_current_intrinsic, &handler->where);
3210 if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE)
3218 gfc_check_signal_sub (gfc_expr * number, gfc_expr * handler, gfc_expr * status)
3220 if (scalar_check (number, 0) == FAILURE)
3223 if (type_check (number, 0, BT_INTEGER) == FAILURE)
3226 if (handler->ts.type != BT_INTEGER && handler->ts.type != BT_PROCEDURE)
3229 "'%s' argument of '%s' intrinsic at %L must be INTEGER or PROCEDURE",
3230 gfc_current_intrinsic_arg[1], gfc_current_intrinsic, &handler->where);
3234 if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE)
3240 if (type_check (status, 2, BT_INTEGER) == FAILURE)
3243 if (scalar_check (status, 2) == FAILURE)
3251 gfc_check_system_sub (gfc_expr * cmd, gfc_expr * status)
3253 if (type_check (cmd, 0, BT_CHARACTER) == FAILURE)
3256 if (scalar_check (status, 1) == FAILURE)
3259 if (type_check (status, 1, BT_INTEGER) == FAILURE)
3262 if (kind_value_check (status, 1, gfc_default_integer_kind) == FAILURE)
3269 /* This is used for the GNU intrinsics AND, OR and XOR. */
3271 gfc_check_and (gfc_expr * i, gfc_expr * j)
3273 if (i->ts.type != BT_INTEGER && i->ts.type != BT_LOGICAL)
3276 "'%s' argument of '%s' intrinsic at %L must be INTEGER or LOGICAL",
3277 gfc_current_intrinsic_arg[0], gfc_current_intrinsic, &i->where);
3281 if (j->ts.type != BT_INTEGER && j->ts.type != BT_LOGICAL)
3284 "'%s' argument of '%s' intrinsic at %L must be INTEGER or LOGICAL",
3285 gfc_current_intrinsic_arg[1], gfc_current_intrinsic, &j->where);
3289 if (i->ts.type != j->ts.type)
3291 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
3292 "have the same type", gfc_current_intrinsic_arg[0],
3293 gfc_current_intrinsic_arg[1], gfc_current_intrinsic,
3298 if (scalar_check (i, 0) == FAILURE)
3301 if (scalar_check (j, 1) == FAILURE)