2 Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008
3 Free Software Foundation, Inc.
4 Contributed by Andy Vaught & Katherine Holcomb
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 3, or (at your option) any later
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3. If not see
20 <http://www.gnu.org/licenses/>. */
23 /* These functions check to see if an argument list is compatible with
24 a particular intrinsic function or subroutine. Presence of
25 required arguments has already been established, the argument list
26 has been sorted into the right order and has NULL arguments in the
27 correct places for missing optional arguments. */
33 #include "intrinsic.h"
36 /* Make sure an expression is a scalar. */
39 scalar_check (gfc_expr *e, int n)
44 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a scalar",
45 gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &e->where);
51 /* Check the type of an expression. */
54 type_check (gfc_expr *e, int n, bt type)
56 if (e->ts.type == type)
59 gfc_error ("'%s' argument of '%s' intrinsic at %L must be %s",
60 gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &e->where,
61 gfc_basic_typename (type));
67 /* Check that the expression is a numeric type. */
70 numeric_check (gfc_expr *e, int n)
72 if (gfc_numeric_ts (&e->ts))
75 /* If the expression has not got a type, check if its namespace can
76 offer a default type. */
77 if ((e->expr_type == EXPR_VARIABLE || e->expr_type == EXPR_VARIABLE)
78 && e->symtree->n.sym->ts.type == BT_UNKNOWN
79 && gfc_set_default_type (e->symtree->n.sym, 0,
80 e->symtree->n.sym->ns) == SUCCESS
81 && gfc_numeric_ts (&e->symtree->n.sym->ts))
83 e->ts = e->symtree->n.sym->ts;
87 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a numeric type",
88 gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &e->where);
94 /* Check that an expression is integer or real. */
97 int_or_real_check (gfc_expr *e, int n)
99 if (e->ts.type != BT_INTEGER && e->ts.type != BT_REAL)
101 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
102 "or REAL", gfc_current_intrinsic_arg[n],
103 gfc_current_intrinsic, &e->where);
111 /* Check that an expression is real or complex. */
114 real_or_complex_check (gfc_expr *e, int n)
116 if (e->ts.type != BT_REAL && e->ts.type != BT_COMPLEX)
118 gfc_error ("'%s' argument of '%s' intrinsic at %L must be REAL "
119 "or COMPLEX", gfc_current_intrinsic_arg[n],
120 gfc_current_intrinsic, &e->where);
128 /* Check that the expression is an optional constant integer
129 and that it specifies a valid kind for that type. */
132 kind_check (gfc_expr *k, int n, bt type)
139 if (type_check (k, n, BT_INTEGER) == FAILURE)
142 if (scalar_check (k, n) == FAILURE)
145 if (k->expr_type != EXPR_CONSTANT)
147 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a constant",
148 gfc_current_intrinsic_arg[n], gfc_current_intrinsic,
153 if (gfc_extract_int (k, &kind) != NULL
154 || gfc_validate_kind (type, kind, true) < 0)
156 gfc_error ("Invalid kind for %s at %L", gfc_basic_typename (type),
165 /* Make sure the expression is a double precision real. */
168 double_check (gfc_expr *d, int n)
170 if (type_check (d, n, BT_REAL) == FAILURE)
173 if (d->ts.kind != gfc_default_double_kind)
175 gfc_error ("'%s' argument of '%s' intrinsic at %L must be double "
176 "precision", gfc_current_intrinsic_arg[n],
177 gfc_current_intrinsic, &d->where);
185 /* Make sure the expression is a logical array. */
188 logical_array_check (gfc_expr *array, int n)
190 if (array->ts.type != BT_LOGICAL || array->rank == 0)
192 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a logical "
193 "array", gfc_current_intrinsic_arg[n], gfc_current_intrinsic,
202 /* Make sure an expression is an array. */
205 array_check (gfc_expr *e, int n)
210 gfc_error ("'%s' argument of '%s' intrinsic at %L must be an array",
211 gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &e->where);
217 /* Make sure two expressions have the same type. */
220 same_type_check (gfc_expr *e, int n, gfc_expr *f, int m)
222 if (gfc_compare_types (&e->ts, &f->ts))
225 gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same type "
226 "and kind as '%s'", gfc_current_intrinsic_arg[m],
227 gfc_current_intrinsic, &f->where, gfc_current_intrinsic_arg[n]);
233 /* Make sure that an expression has a certain (nonzero) rank. */
236 rank_check (gfc_expr *e, int n, int rank)
241 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank %d",
242 gfc_current_intrinsic_arg[n], gfc_current_intrinsic,
249 /* Make sure a variable expression is not an optional dummy argument. */
252 nonoptional_check (gfc_expr *e, int n)
254 if (e->expr_type == EXPR_VARIABLE && e->symtree->n.sym->attr.optional)
256 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be OPTIONAL",
257 gfc_current_intrinsic_arg[n], gfc_current_intrinsic,
261 /* TODO: Recursive check on nonoptional variables? */
267 /* Check that an expression has a particular kind. */
270 kind_value_check (gfc_expr *e, int n, int k)
275 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of kind %d",
276 gfc_current_intrinsic_arg[n], gfc_current_intrinsic,
283 /* Make sure an expression is a variable. */
286 variable_check (gfc_expr *e, int n)
288 if ((e->expr_type == EXPR_VARIABLE
289 && e->symtree->n.sym->attr.flavor != FL_PARAMETER)
290 || (e->expr_type == EXPR_FUNCTION
291 && e->symtree->n.sym->result == e->symtree->n.sym))
294 if (e->expr_type == EXPR_VARIABLE
295 && e->symtree->n.sym->attr.intent == INTENT_IN)
297 gfc_error ("'%s' argument of '%s' intrinsic at %L cannot be INTENT(IN)",
298 gfc_current_intrinsic_arg[n], gfc_current_intrinsic,
303 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a variable",
304 gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &e->where);
310 /* Check the common DIM parameter for correctness. */
313 dim_check (gfc_expr *dim, int n, bool optional)
318 if (type_check (dim, n, BT_INTEGER) == FAILURE)
321 if (scalar_check (dim, n) == FAILURE)
324 if (!optional && nonoptional_check (dim, n) == FAILURE)
331 /* If a DIM parameter is a constant, make sure that it is greater than
332 zero and less than or equal to the rank of the given array. If
333 allow_assumed is zero then dim must be less than the rank of the array
334 for assumed size arrays. */
337 dim_rank_check (gfc_expr *dim, gfc_expr *array, int allow_assumed)
342 if (dim->expr_type != EXPR_CONSTANT || array->expr_type != EXPR_VARIABLE)
345 ar = gfc_find_array_ref (array);
347 if (ar->as->type == AS_ASSUMED_SIZE
349 && ar->type != AR_ELEMENT
350 && ar->type != AR_SECTION)
353 if (mpz_cmp_ui (dim->value.integer, 1) < 0
354 || mpz_cmp_ui (dim->value.integer, rank) > 0)
356 gfc_error ("'dim' argument of '%s' intrinsic at %L is not a valid "
357 "dimension index", gfc_current_intrinsic, &dim->where);
366 /* Compare the size of a along dimension ai with the size of b along
367 dimension bi, returning 0 if they are known not to be identical,
368 and 1 if they are identical, or if this cannot be determined. */
371 identical_dimen_shape (gfc_expr *a, int ai, gfc_expr *b, int bi)
373 mpz_t a_size, b_size;
376 gcc_assert (a->rank > ai);
377 gcc_assert (b->rank > bi);
381 if (gfc_array_dimen_size (a, ai, &a_size) == SUCCESS)
383 if (gfc_array_dimen_size (b, bi, &b_size) == SUCCESS)
385 if (mpz_cmp (a_size, b_size) != 0)
396 /* Check whether two character expressions have the same length;
397 returns SUCCESS if they have or if the length cannot be determined. */
400 check_same_strlen (const gfc_expr *a, const gfc_expr *b, const char *name)
405 if (a->ts.cl && a->ts.cl->length
406 && a->ts.cl->length->expr_type == EXPR_CONSTANT)
407 len_a = mpz_get_si (a->ts.cl->length->value.integer);
408 else if (a->expr_type == EXPR_CONSTANT
409 && (a->ts.cl == NULL || a->ts.cl->length == NULL))
410 len_a = a->value.character.length;
414 if (b->ts.cl && b->ts.cl->length
415 && b->ts.cl->length->expr_type == EXPR_CONSTANT)
416 len_b = mpz_get_si (b->ts.cl->length->value.integer);
417 else if (b->expr_type == EXPR_CONSTANT
418 && (b->ts.cl == NULL || b->ts.cl->length == NULL))
419 len_b = b->value.character.length;
426 gfc_error ("Unequal character lengths (%ld and %ld) in %s intrinsic "
427 "at %L", len_a, len_b, name, &a->where);
432 /***** Check functions *****/
434 /* Check subroutine suitable for intrinsics taking a real argument and
435 a kind argument for the result. */
438 check_a_kind (gfc_expr *a, gfc_expr *kind, bt type)
440 if (type_check (a, 0, BT_REAL) == FAILURE)
442 if (kind_check (kind, 1, type) == FAILURE)
449 /* Check subroutine suitable for ceiling, floor and nint. */
452 gfc_check_a_ikind (gfc_expr *a, gfc_expr *kind)
454 return check_a_kind (a, kind, BT_INTEGER);
458 /* Check subroutine suitable for aint, anint. */
461 gfc_check_a_xkind (gfc_expr *a, gfc_expr *kind)
463 return check_a_kind (a, kind, BT_REAL);
468 gfc_check_abs (gfc_expr *a)
470 if (numeric_check (a, 0) == FAILURE)
478 gfc_check_achar (gfc_expr *a, gfc_expr *kind)
480 if (type_check (a, 0, BT_INTEGER) == FAILURE)
482 if (kind_check (kind, 1, BT_CHARACTER) == FAILURE)
490 gfc_check_access_func (gfc_expr *name, gfc_expr *mode)
492 if (type_check (name, 0, BT_CHARACTER) == FAILURE
493 || scalar_check (name, 0) == FAILURE)
496 if (type_check (mode, 1, BT_CHARACTER) == FAILURE
497 || scalar_check (mode, 1) == FAILURE)
505 gfc_check_all_any (gfc_expr *mask, gfc_expr *dim)
507 if (logical_array_check (mask, 0) == FAILURE)
510 if (dim_check (dim, 1, false) == FAILURE)
518 gfc_check_allocated (gfc_expr *array)
520 symbol_attribute attr;
522 if (variable_check (array, 0) == FAILURE)
525 attr = gfc_variable_attr (array, NULL);
526 if (!attr.allocatable)
528 gfc_error ("'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE",
529 gfc_current_intrinsic_arg[0], gfc_current_intrinsic,
534 if (array_check (array, 0) == FAILURE)
541 /* Common check function where the first argument must be real or
542 integer and the second argument must be the same as the first. */
545 gfc_check_a_p (gfc_expr *a, gfc_expr *p)
547 if (int_or_real_check (a, 0) == FAILURE)
550 if (a->ts.type != p->ts.type)
552 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
553 "have the same type", gfc_current_intrinsic_arg[0],
554 gfc_current_intrinsic_arg[1], gfc_current_intrinsic,
559 if (a->ts.kind != p->ts.kind)
561 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
562 &p->where) == FAILURE)
571 gfc_check_x_yd (gfc_expr *x, gfc_expr *y)
573 if (double_check (x, 0) == FAILURE || double_check (y, 1) == FAILURE)
581 gfc_check_associated (gfc_expr *pointer, gfc_expr *target)
583 symbol_attribute attr;
588 where = &pointer->where;
590 if (pointer->expr_type == EXPR_VARIABLE)
591 attr = gfc_variable_attr (pointer, NULL);
592 else if (pointer->expr_type == EXPR_FUNCTION)
593 attr = pointer->symtree->n.sym->attr;
594 else if (pointer->expr_type == EXPR_NULL)
597 gcc_assert (0); /* Pointer must be a variable or a function. */
601 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER",
602 gfc_current_intrinsic_arg[0], gfc_current_intrinsic,
607 /* Target argument is optional. */
611 where = &target->where;
612 if (target->expr_type == EXPR_NULL)
615 if (target->expr_type == EXPR_VARIABLE)
616 attr = gfc_variable_attr (target, NULL);
617 else if (target->expr_type == EXPR_FUNCTION)
618 attr = target->symtree->n.sym->attr;
621 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a pointer "
622 "or target VARIABLE or FUNCTION", gfc_current_intrinsic_arg[1],
623 gfc_current_intrinsic, &target->where);
627 if (!attr.pointer && !attr.target)
629 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER "
630 "or a TARGET", gfc_current_intrinsic_arg[1],
631 gfc_current_intrinsic, &target->where);
636 if (same_type_check (pointer, 0, target, 1) == FAILURE)
638 if (rank_check (target, 0, pointer->rank) == FAILURE)
640 if (target->rank > 0)
642 for (i = 0; i < target->rank; i++)
643 if (target->ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
645 gfc_error ("Array section with a vector subscript at %L shall not "
646 "be the target of a pointer",
656 gfc_error ("NULL pointer at %L is not permitted as actual argument "
657 "of '%s' intrinsic function", where, gfc_current_intrinsic);
664 gfc_check_atan2 (gfc_expr *y, gfc_expr *x)
666 if (type_check (y, 0, BT_REAL) == FAILURE)
668 if (same_type_check (y, 0, x, 1) == FAILURE)
675 /* BESJN and BESYN functions. */
678 gfc_check_besn (gfc_expr *n, gfc_expr *x)
680 if (type_check (n, 0, BT_INTEGER) == FAILURE)
683 if (type_check (x, 1, BT_REAL) == FAILURE)
691 gfc_check_btest (gfc_expr *i, gfc_expr *pos)
693 if (type_check (i, 0, BT_INTEGER) == FAILURE)
695 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
703 gfc_check_char (gfc_expr *i, gfc_expr *kind)
705 if (type_check (i, 0, BT_INTEGER) == FAILURE)
707 if (kind_check (kind, 1, BT_CHARACTER) == FAILURE)
715 gfc_check_chdir (gfc_expr *dir)
717 if (type_check (dir, 0, BT_CHARACTER) == FAILURE)
725 gfc_check_chdir_sub (gfc_expr *dir, gfc_expr *status)
727 if (type_check (dir, 0, BT_CHARACTER) == FAILURE)
733 if (type_check (status, 1, BT_INTEGER) == FAILURE)
736 if (scalar_check (status, 1) == FAILURE)
744 gfc_check_chmod (gfc_expr *name, gfc_expr *mode)
746 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
749 if (type_check (mode, 1, BT_CHARACTER) == FAILURE)
757 gfc_check_chmod_sub (gfc_expr *name, gfc_expr *mode, gfc_expr *status)
759 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
762 if (type_check (mode, 1, BT_CHARACTER) == FAILURE)
768 if (type_check (status, 2, BT_INTEGER) == FAILURE)
771 if (scalar_check (status, 2) == FAILURE)
779 gfc_check_cmplx (gfc_expr *x, gfc_expr *y, gfc_expr *kind)
781 if (numeric_check (x, 0) == FAILURE)
786 if (numeric_check (y, 1) == FAILURE)
789 if (x->ts.type == BT_COMPLEX)
791 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
792 "present if 'x' is COMPLEX", gfc_current_intrinsic_arg[1],
793 gfc_current_intrinsic, &y->where);
798 if (kind_check (kind, 2, BT_COMPLEX) == FAILURE)
806 gfc_check_complex (gfc_expr *x, gfc_expr *y)
808 if (x->ts.type != BT_INTEGER && x->ts.type != BT_REAL)
810 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
811 "or REAL", gfc_current_intrinsic_arg[0],
812 gfc_current_intrinsic, &x->where);
815 if (scalar_check (x, 0) == FAILURE)
818 if (y->ts.type != BT_INTEGER && y->ts.type != BT_REAL)
820 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
821 "or REAL", gfc_current_intrinsic_arg[1],
822 gfc_current_intrinsic, &y->where);
825 if (scalar_check (y, 1) == FAILURE)
833 gfc_check_count (gfc_expr *mask, gfc_expr *dim, gfc_expr *kind)
835 if (logical_array_check (mask, 0) == FAILURE)
837 if (dim_check (dim, 1, false) == FAILURE)
839 if (kind_check (kind, 2, BT_INTEGER) == FAILURE)
841 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
842 "with KIND argument at %L",
843 gfc_current_intrinsic, &kind->where) == FAILURE)
851 gfc_check_cshift (gfc_expr *array, gfc_expr *shift, gfc_expr *dim)
853 if (array_check (array, 0) == FAILURE)
856 if (type_check (shift, 1, BT_INTEGER) == FAILURE)
859 if (array->rank == 1)
861 if (scalar_check (shift, 1) == FAILURE)
866 /* TODO: more requirements on shift parameter. */
869 if (dim_check (dim, 2, true) == FAILURE)
877 gfc_check_ctime (gfc_expr *time)
879 if (scalar_check (time, 0) == FAILURE)
882 if (type_check (time, 0, BT_INTEGER) == FAILURE)
889 try gfc_check_datan2 (gfc_expr *y, gfc_expr *x)
891 if (double_check (y, 0) == FAILURE || double_check (x, 1) == FAILURE)
898 gfc_check_dcmplx (gfc_expr *x, gfc_expr *y)
900 if (numeric_check (x, 0) == FAILURE)
905 if (numeric_check (y, 1) == FAILURE)
908 if (x->ts.type == BT_COMPLEX)
910 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
911 "present if 'x' is COMPLEX", gfc_current_intrinsic_arg[1],
912 gfc_current_intrinsic, &y->where);
922 gfc_check_dble (gfc_expr *x)
924 if (numeric_check (x, 0) == FAILURE)
932 gfc_check_digits (gfc_expr *x)
934 if (int_or_real_check (x, 0) == FAILURE)
942 gfc_check_dot_product (gfc_expr *vector_a, gfc_expr *vector_b)
944 switch (vector_a->ts.type)
947 if (type_check (vector_b, 1, BT_LOGICAL) == FAILURE)
954 if (numeric_check (vector_b, 1) == FAILURE)
959 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
960 "or LOGICAL", gfc_current_intrinsic_arg[0],
961 gfc_current_intrinsic, &vector_a->where);
965 if (rank_check (vector_a, 0, 1) == FAILURE)
968 if (rank_check (vector_b, 1, 1) == FAILURE)
971 if (! identical_dimen_shape (vector_a, 0, vector_b, 0))
973 gfc_error ("Different shape for arguments '%s' and '%s' at %L for "
974 "intrinsic 'dot_product'", gfc_current_intrinsic_arg[0],
975 gfc_current_intrinsic_arg[1], &vector_a->where);
984 gfc_check_dprod (gfc_expr *x, gfc_expr *y)
986 if (type_check (x, 0, BT_REAL) == FAILURE
987 || type_check (y, 1, BT_REAL) == FAILURE)
990 if (x->ts.kind != gfc_default_real_kind)
992 gfc_error ("'%s' argument of '%s' intrinsic at %L must be default "
993 "real", gfc_current_intrinsic_arg[0],
994 gfc_current_intrinsic, &x->where);
998 if (y->ts.kind != gfc_default_real_kind)
1000 gfc_error ("'%s' argument of '%s' intrinsic at %L must be default "
1001 "real", gfc_current_intrinsic_arg[1],
1002 gfc_current_intrinsic, &y->where);
1011 gfc_check_eoshift (gfc_expr *array, gfc_expr *shift, gfc_expr *boundary,
1014 if (array_check (array, 0) == FAILURE)
1017 if (type_check (shift, 1, BT_INTEGER) == FAILURE)
1020 if (array->rank == 1)
1022 if (scalar_check (shift, 2) == FAILURE)
1027 /* TODO: more weird restrictions on shift. */
1030 if (boundary != NULL)
1032 if (same_type_check (array, 0, boundary, 2) == FAILURE)
1035 /* TODO: more restrictions on boundary. */
1038 if (dim_check (dim, 4, true) == FAILURE)
1045 /* A single complex argument. */
1048 gfc_check_fn_c (gfc_expr *a)
1050 if (type_check (a, 0, BT_COMPLEX) == FAILURE)
1057 /* A single real argument. */
1060 gfc_check_fn_r (gfc_expr *a)
1062 if (type_check (a, 0, BT_REAL) == FAILURE)
1068 /* A single double argument. */
1071 gfc_check_fn_d (gfc_expr *a)
1073 if (double_check (a, 0) == FAILURE)
1079 /* A single real or complex argument. */
1082 gfc_check_fn_rc (gfc_expr *a)
1084 if (real_or_complex_check (a, 0) == FAILURE)
1092 gfc_check_fnum (gfc_expr *unit)
1094 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
1097 if (scalar_check (unit, 0) == FAILURE)
1105 gfc_check_huge (gfc_expr *x)
1107 if (int_or_real_check (x, 0) == FAILURE)
1114 /* Check that the single argument is an integer. */
1117 gfc_check_i (gfc_expr *i)
1119 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1127 gfc_check_iand (gfc_expr *i, gfc_expr *j)
1129 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1132 if (type_check (j, 1, BT_INTEGER) == FAILURE)
1135 if (i->ts.kind != j->ts.kind)
1137 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
1138 &i->where) == FAILURE)
1147 gfc_check_ibclr (gfc_expr *i, gfc_expr *pos)
1149 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1152 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
1160 gfc_check_ibits (gfc_expr *i, gfc_expr *pos, gfc_expr *len)
1162 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1165 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
1168 if (type_check (len, 2, BT_INTEGER) == FAILURE)
1176 gfc_check_ibset (gfc_expr *i, gfc_expr *pos)
1178 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1181 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
1189 gfc_check_ichar_iachar (gfc_expr *c, gfc_expr *kind)
1193 if (type_check (c, 0, BT_CHARACTER) == FAILURE)
1196 if (kind_check (kind, 1, BT_INTEGER) == FAILURE)
1199 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
1200 "with KIND argument at %L",
1201 gfc_current_intrinsic, &kind->where) == FAILURE)
1204 if (c->expr_type == EXPR_VARIABLE || c->expr_type == EXPR_SUBSTRING)
1210 /* Substring references don't have the charlength set. */
1212 while (ref && ref->type != REF_SUBSTRING)
1215 gcc_assert (ref == NULL || ref->type == REF_SUBSTRING);
1219 /* Check that the argument is length one. Non-constant lengths
1220 can't be checked here, so assume they are ok. */
1221 if (c->ts.cl && c->ts.cl->length)
1223 /* If we already have a length for this expression then use it. */
1224 if (c->ts.cl->length->expr_type != EXPR_CONSTANT)
1226 i = mpz_get_si (c->ts.cl->length->value.integer);
1233 start = ref->u.ss.start;
1234 end = ref->u.ss.end;
1237 if (end == NULL || end->expr_type != EXPR_CONSTANT
1238 || start->expr_type != EXPR_CONSTANT)
1241 i = mpz_get_si (end->value.integer) + 1
1242 - mpz_get_si (start->value.integer);
1250 gfc_error ("Argument of %s at %L must be of length one",
1251 gfc_current_intrinsic, &c->where);
1260 gfc_check_idnint (gfc_expr *a)
1262 if (double_check (a, 0) == FAILURE)
1270 gfc_check_ieor (gfc_expr *i, gfc_expr *j)
1272 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1275 if (type_check (j, 1, BT_INTEGER) == FAILURE)
1278 if (i->ts.kind != j->ts.kind)
1280 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
1281 &i->where) == FAILURE)
1290 gfc_check_index (gfc_expr *string, gfc_expr *substring, gfc_expr *back,
1293 if (type_check (string, 0, BT_CHARACTER) == FAILURE
1294 || type_check (substring, 1, BT_CHARACTER) == FAILURE)
1297 if (back != NULL && type_check (back, 2, BT_LOGICAL) == FAILURE)
1300 if (kind_check (kind, 3, BT_INTEGER) == FAILURE)
1302 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
1303 "with KIND argument at %L",
1304 gfc_current_intrinsic, &kind->where) == FAILURE)
1307 if (string->ts.kind != substring->ts.kind)
1309 gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same "
1310 "kind as '%s'", gfc_current_intrinsic_arg[1],
1311 gfc_current_intrinsic, &substring->where,
1312 gfc_current_intrinsic_arg[0]);
1321 gfc_check_int (gfc_expr *x, gfc_expr *kind)
1323 if (numeric_check (x, 0) == FAILURE)
1326 if (kind_check (kind, 1, BT_INTEGER) == FAILURE)
1334 gfc_check_intconv (gfc_expr *x)
1336 if (numeric_check (x, 0) == FAILURE)
1344 gfc_check_ior (gfc_expr *i, gfc_expr *j)
1346 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1349 if (type_check (j, 1, BT_INTEGER) == FAILURE)
1352 if (i->ts.kind != j->ts.kind)
1354 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
1355 &i->where) == FAILURE)
1364 gfc_check_ishft (gfc_expr *i, gfc_expr *shift)
1366 if (type_check (i, 0, BT_INTEGER) == FAILURE
1367 || type_check (shift, 1, BT_INTEGER) == FAILURE)
1375 gfc_check_ishftc (gfc_expr *i, gfc_expr *shift, gfc_expr *size)
1377 if (type_check (i, 0, BT_INTEGER) == FAILURE
1378 || type_check (shift, 1, BT_INTEGER) == FAILURE)
1381 if (size != NULL && type_check (size, 2, BT_INTEGER) == FAILURE)
1389 gfc_check_kill (gfc_expr *pid, gfc_expr *sig)
1391 if (type_check (pid, 0, BT_INTEGER) == FAILURE)
1394 if (type_check (sig, 1, BT_INTEGER) == FAILURE)
1402 gfc_check_kill_sub (gfc_expr *pid, gfc_expr *sig, gfc_expr *status)
1404 if (type_check (pid, 0, BT_INTEGER) == FAILURE)
1407 if (scalar_check (pid, 0) == FAILURE)
1410 if (type_check (sig, 1, BT_INTEGER) == FAILURE)
1413 if (scalar_check (sig, 1) == FAILURE)
1419 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1422 if (scalar_check (status, 2) == FAILURE)
1430 gfc_check_kind (gfc_expr *x)
1432 if (x->ts.type == BT_DERIVED)
1434 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a "
1435 "non-derived type", gfc_current_intrinsic_arg[0],
1436 gfc_current_intrinsic, &x->where);
1445 gfc_check_lbound (gfc_expr *array, gfc_expr *dim, gfc_expr *kind)
1447 if (array_check (array, 0) == FAILURE)
1452 if (dim_check (dim, 1, false) == FAILURE)
1455 if (dim_rank_check (dim, array, 1) == FAILURE)
1459 if (kind_check (kind, 2, BT_INTEGER) == FAILURE)
1461 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
1462 "with KIND argument at %L",
1463 gfc_current_intrinsic, &kind->where) == FAILURE)
1471 gfc_check_len_lentrim (gfc_expr *s, gfc_expr *kind)
1473 if (type_check (s, 0, BT_CHARACTER) == FAILURE)
1476 if (kind_check (kind, 1, BT_INTEGER) == FAILURE)
1478 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
1479 "with KIND argument at %L",
1480 gfc_current_intrinsic, &kind->where) == FAILURE)
1488 gfc_check_link (gfc_expr *path1, gfc_expr *path2)
1490 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1493 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1501 gfc_check_link_sub (gfc_expr *path1, gfc_expr *path2, gfc_expr *status)
1503 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1506 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1512 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1515 if (scalar_check (status, 2) == FAILURE)
1523 gfc_check_loc (gfc_expr *expr)
1525 return variable_check (expr, 0);
1530 gfc_check_symlnk (gfc_expr *path1, gfc_expr *path2)
1532 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1535 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1543 gfc_check_symlnk_sub (gfc_expr *path1, gfc_expr *path2, gfc_expr *status)
1545 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1548 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1554 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1557 if (scalar_check (status, 2) == FAILURE)
1565 gfc_check_logical (gfc_expr *a, gfc_expr *kind)
1567 if (type_check (a, 0, BT_LOGICAL) == FAILURE)
1569 if (kind_check (kind, 1, BT_LOGICAL) == FAILURE)
1576 /* Min/max family. */
1579 min_max_args (gfc_actual_arglist *arg)
1581 if (arg == NULL || arg->next == NULL)
1583 gfc_error ("Intrinsic '%s' at %L must have at least two arguments",
1584 gfc_current_intrinsic, gfc_current_intrinsic_where);
1593 check_rest (bt type, int kind, gfc_actual_arglist *arglist)
1595 gfc_actual_arglist *arg, *tmp;
1600 if (min_max_args (arglist) == FAILURE)
1603 for (arg = arglist, n=1; arg; arg = arg->next, n++)
1606 if (x->ts.type != type || x->ts.kind != kind)
1608 if (x->ts.type == type)
1610 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type "
1611 "kinds at %L", &x->where) == FAILURE)
1616 gfc_error ("'a%d' argument of '%s' intrinsic at %L must be "
1617 "%s(%d)", n, gfc_current_intrinsic, &x->where,
1618 gfc_basic_typename (type), kind);
1623 for (tmp = arglist, m=1; tmp != arg; tmp = tmp->next, m++)
1626 snprintf (buffer, 80, "arguments 'a%d' and 'a%d' for intrinsic '%s'",
1627 m, n, gfc_current_intrinsic);
1628 if (gfc_check_conformance (buffer, tmp->expr, x) == FAILURE)
1638 gfc_check_min_max (gfc_actual_arglist *arg)
1642 if (min_max_args (arg) == FAILURE)
1647 if (x->ts.type == BT_CHARACTER)
1649 if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
1650 "with CHARACTER argument at %L",
1651 gfc_current_intrinsic, &x->where) == FAILURE)
1654 else if (x->ts.type != BT_INTEGER && x->ts.type != BT_REAL)
1656 gfc_error ("'a1' argument of '%s' intrinsic at %L must be INTEGER, "
1657 "REAL or CHARACTER", gfc_current_intrinsic, &x->where);
1661 return check_rest (x->ts.type, x->ts.kind, arg);
1666 gfc_check_min_max_integer (gfc_actual_arglist *arg)
1668 return check_rest (BT_INTEGER, gfc_default_integer_kind, arg);
1673 gfc_check_min_max_real (gfc_actual_arglist *arg)
1675 return check_rest (BT_REAL, gfc_default_real_kind, arg);
1680 gfc_check_min_max_double (gfc_actual_arglist *arg)
1682 return check_rest (BT_REAL, gfc_default_double_kind, arg);
1686 /* End of min/max family. */
1689 gfc_check_malloc (gfc_expr *size)
1691 if (type_check (size, 0, BT_INTEGER) == FAILURE)
1694 if (scalar_check (size, 0) == FAILURE)
1702 gfc_check_matmul (gfc_expr *matrix_a, gfc_expr *matrix_b)
1704 if ((matrix_a->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_b->ts))
1706 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1707 "or LOGICAL", gfc_current_intrinsic_arg[0],
1708 gfc_current_intrinsic, &matrix_a->where);
1712 if ((matrix_b->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_a->ts))
1714 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1715 "or LOGICAL", gfc_current_intrinsic_arg[1],
1716 gfc_current_intrinsic, &matrix_b->where);
1720 switch (matrix_a->rank)
1723 if (rank_check (matrix_b, 1, 2) == FAILURE)
1725 /* Check for case matrix_a has shape(m), matrix_b has shape (m, k). */
1726 if (!identical_dimen_shape (matrix_a, 0, matrix_b, 0))
1728 gfc_error ("Different shape on dimension 1 for arguments '%s' "
1729 "and '%s' at %L for intrinsic matmul",
1730 gfc_current_intrinsic_arg[0],
1731 gfc_current_intrinsic_arg[1], &matrix_a->where);
1737 if (matrix_b->rank != 2)
1739 if (rank_check (matrix_b, 1, 1) == FAILURE)
1742 /* matrix_b has rank 1 or 2 here. Common check for the cases
1743 - matrix_a has shape (n,m) and matrix_b has shape (m, k)
1744 - matrix_a has shape (n,m) and matrix_b has shape (m). */
1745 if (!identical_dimen_shape (matrix_a, 1, matrix_b, 0))
1747 gfc_error ("Different shape on dimension 2 for argument '%s' and "
1748 "dimension 1 for argument '%s' at %L for intrinsic "
1749 "matmul", gfc_current_intrinsic_arg[0],
1750 gfc_current_intrinsic_arg[1], &matrix_a->where);
1756 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank "
1757 "1 or 2", gfc_current_intrinsic_arg[0],
1758 gfc_current_intrinsic, &matrix_a->where);
1766 /* Whoever came up with this interface was probably on something.
1767 The possibilities for the occupation of the second and third
1774 NULL MASK minloc(array, mask=m)
1777 I.e. in the case of minloc(array,mask), mask will be in the second
1778 position of the argument list and we'll have to fix that up. */
1781 gfc_check_minloc_maxloc (gfc_actual_arglist *ap)
1783 gfc_expr *a, *m, *d;
1786 if (int_or_real_check (a, 0) == FAILURE || array_check (a, 0) == FAILURE)
1790 m = ap->next->next->expr;
1792 if (m == NULL && d != NULL && d->ts.type == BT_LOGICAL
1793 && ap->next->name == NULL)
1797 ap->next->expr = NULL;
1798 ap->next->next->expr = m;
1801 if (d && dim_check (d, 1, false) == FAILURE)
1804 if (d && dim_rank_check (d, a, 0) == FAILURE)
1807 if (m != NULL && type_check (m, 2, BT_LOGICAL) == FAILURE)
1813 snprintf (buffer, 80, "arguments '%s' and '%s' for intrinsic %s",
1814 gfc_current_intrinsic_arg[0], gfc_current_intrinsic_arg[2],
1815 gfc_current_intrinsic);
1816 if (gfc_check_conformance (buffer, a, m) == FAILURE)
1824 /* Similar to minloc/maxloc, the argument list might need to be
1825 reordered for the MINVAL, MAXVAL, PRODUCT, and SUM intrinsics. The
1826 difference is that MINLOC/MAXLOC take an additional KIND argument.
1827 The possibilities are:
1833 NULL MASK minval(array, mask=m)
1836 I.e. in the case of minval(array,mask), mask will be in the second
1837 position of the argument list and we'll have to fix that up. */
1840 check_reduction (gfc_actual_arglist *ap)
1842 gfc_expr *a, *m, *d;
1846 m = ap->next->next->expr;
1848 if (m == NULL && d != NULL && d->ts.type == BT_LOGICAL
1849 && ap->next->name == NULL)
1853 ap->next->expr = NULL;
1854 ap->next->next->expr = m;
1857 if (d && dim_check (d, 1, false) == FAILURE)
1860 if (d && dim_rank_check (d, a, 0) == FAILURE)
1863 if (m != NULL && type_check (m, 2, BT_LOGICAL) == FAILURE)
1869 snprintf (buffer, 80, "arguments '%s' and '%s' for intrinsic %s",
1870 gfc_current_intrinsic_arg[0], gfc_current_intrinsic_arg[2],
1871 gfc_current_intrinsic);
1872 if (gfc_check_conformance (buffer, a, m) == FAILURE)
1881 gfc_check_minval_maxval (gfc_actual_arglist *ap)
1883 if (int_or_real_check (ap->expr, 0) == FAILURE
1884 || array_check (ap->expr, 0) == FAILURE)
1887 return check_reduction (ap);
1892 gfc_check_product_sum (gfc_actual_arglist *ap)
1894 if (numeric_check (ap->expr, 0) == FAILURE
1895 || array_check (ap->expr, 0) == FAILURE)
1898 return check_reduction (ap);
1903 gfc_check_merge (gfc_expr *tsource, gfc_expr *fsource, gfc_expr *mask)
1905 if (same_type_check (tsource, 0, fsource, 1) == FAILURE)
1908 if (type_check (mask, 2, BT_LOGICAL) == FAILURE)
1911 if (tsource->ts.type == BT_CHARACTER)
1912 return check_same_strlen (tsource, fsource, "MERGE");
1919 gfc_check_move_alloc (gfc_expr *from, gfc_expr *to)
1921 symbol_attribute attr;
1923 if (variable_check (from, 0) == FAILURE)
1926 if (array_check (from, 0) == FAILURE)
1929 attr = gfc_variable_attr (from, NULL);
1930 if (!attr.allocatable)
1932 gfc_error ("'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE",
1933 gfc_current_intrinsic_arg[0], gfc_current_intrinsic,
1938 if (variable_check (to, 0) == FAILURE)
1941 if (array_check (to, 0) == FAILURE)
1944 attr = gfc_variable_attr (to, NULL);
1945 if (!attr.allocatable)
1947 gfc_error ("'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE",
1948 gfc_current_intrinsic_arg[0], gfc_current_intrinsic,
1953 if (same_type_check (from, 0, to, 1) == FAILURE)
1956 if (to->rank != from->rank)
1958 gfc_error ("the '%s' and '%s' arguments of '%s' intrinsic at %L must "
1959 "have the same rank %d/%d", gfc_current_intrinsic_arg[0],
1960 gfc_current_intrinsic_arg[1], gfc_current_intrinsic,
1961 &to->where, from->rank, to->rank);
1965 if (to->ts.kind != from->ts.kind)
1967 gfc_error ("the '%s' and '%s' arguments of '%s' intrinsic at %L must "
1968 "be of the same kind %d/%d", gfc_current_intrinsic_arg[0],
1969 gfc_current_intrinsic_arg[1], gfc_current_intrinsic,
1970 &to->where, from->ts.kind, to->ts.kind);
1979 gfc_check_nearest (gfc_expr *x, gfc_expr *s)
1981 if (type_check (x, 0, BT_REAL) == FAILURE)
1984 if (type_check (s, 1, BT_REAL) == FAILURE)
1992 gfc_check_new_line (gfc_expr *a)
1994 if (type_check (a, 0, BT_CHARACTER) == FAILURE)
2002 gfc_check_null (gfc_expr *mold)
2004 symbol_attribute attr;
2009 if (variable_check (mold, 0) == FAILURE)
2012 attr = gfc_variable_attr (mold, NULL);
2016 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER",
2017 gfc_current_intrinsic_arg[0],
2018 gfc_current_intrinsic, &mold->where);
2027 gfc_check_pack (gfc_expr *array, gfc_expr *mask, gfc_expr *vector)
2031 if (array_check (array, 0) == FAILURE)
2034 if (type_check (mask, 1, BT_LOGICAL) == FAILURE)
2037 snprintf (buffer, 80, "arguments '%s' and '%s' for intrinsic '%s'",
2038 gfc_current_intrinsic_arg[0], gfc_current_intrinsic_arg[1],
2039 gfc_current_intrinsic);
2040 if (gfc_check_conformance (buffer, array, mask) == FAILURE)
2045 if (same_type_check (array, 0, vector, 2) == FAILURE)
2048 if (rank_check (vector, 2, 1) == FAILURE)
2051 /* TODO: More constraints here. */
2059 gfc_check_precision (gfc_expr *x)
2061 if (x->ts.type != BT_REAL && x->ts.type != BT_COMPLEX)
2063 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of type "
2064 "REAL or COMPLEX", gfc_current_intrinsic_arg[0],
2065 gfc_current_intrinsic, &x->where);
2074 gfc_check_present (gfc_expr *a)
2078 if (variable_check (a, 0) == FAILURE)
2081 sym = a->symtree->n.sym;
2082 if (!sym->attr.dummy)
2084 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a "
2085 "dummy variable", gfc_current_intrinsic_arg[0],
2086 gfc_current_intrinsic, &a->where);
2090 if (!sym->attr.optional)
2092 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of "
2093 "an OPTIONAL dummy variable", gfc_current_intrinsic_arg[0],
2094 gfc_current_intrinsic, &a->where);
2098 /* 13.14.82 PRESENT(A)
2100 Argument. A shall be the name of an optional dummy argument that is
2101 accessible in the subprogram in which the PRESENT function reference
2105 && !(a->ref->next == NULL && a->ref->type == REF_ARRAY
2106 && a->ref->u.ar.type == AR_FULL))
2108 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be a "
2109 "subobject of '%s'", gfc_current_intrinsic_arg[0],
2110 gfc_current_intrinsic, &a->where, sym->name);
2119 gfc_check_radix (gfc_expr *x)
2121 if (int_or_real_check (x, 0) == FAILURE)
2129 gfc_check_range (gfc_expr *x)
2131 if (numeric_check (x, 0) == FAILURE)
2138 /* real, float, sngl. */
2140 gfc_check_real (gfc_expr *a, gfc_expr *kind)
2142 if (numeric_check (a, 0) == FAILURE)
2145 if (kind_check (kind, 1, BT_REAL) == FAILURE)
2153 gfc_check_rename (gfc_expr *path1, gfc_expr *path2)
2155 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
2158 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
2166 gfc_check_rename_sub (gfc_expr *path1, gfc_expr *path2, gfc_expr *status)
2168 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
2171 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
2177 if (type_check (status, 2, BT_INTEGER) == FAILURE)
2180 if (scalar_check (status, 2) == FAILURE)
2188 gfc_check_repeat (gfc_expr *x, gfc_expr *y)
2190 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
2193 if (scalar_check (x, 0) == FAILURE)
2196 if (type_check (y, 0, BT_INTEGER) == FAILURE)
2199 if (scalar_check (y, 1) == FAILURE)
2207 gfc_check_reshape (gfc_expr *source, gfc_expr *shape,
2208 gfc_expr *pad, gfc_expr *order)
2214 if (array_check (source, 0) == FAILURE)
2217 if (rank_check (shape, 1, 1) == FAILURE)
2220 if (type_check (shape, 1, BT_INTEGER) == FAILURE)
2223 if (gfc_array_size (shape, &size) != SUCCESS)
2225 gfc_error ("'shape' argument of 'reshape' intrinsic at %L must be an "
2226 "array of constant size", &shape->where);
2230 m = mpz_cmp_ui (size, GFC_MAX_DIMENSIONS);
2235 gfc_error ("'shape' argument of 'reshape' intrinsic at %L has more "
2236 "than %d elements", &shape->where, GFC_MAX_DIMENSIONS);
2242 if (same_type_check (source, 0, pad, 2) == FAILURE)
2244 if (array_check (pad, 2) == FAILURE)
2248 if (order != NULL && array_check (order, 3) == FAILURE)
2251 if (pad == NULL && shape->expr_type == EXPR_ARRAY
2252 && gfc_is_constant_expr (shape)
2253 && !(source->expr_type == EXPR_VARIABLE && source->symtree->n.sym->as
2254 && source->symtree->n.sym->as->type == AS_ASSUMED_SIZE))
2256 /* Check the match in size between source and destination. */
2257 if (gfc_array_size (source, &nelems) == SUCCESS)
2262 c = shape->value.constructor;
2263 mpz_init_set_ui (size, 1);
2264 for (; c; c = c->next)
2265 mpz_mul (size, size, c->expr->value.integer);
2267 test = mpz_cmp (nelems, size) < 0 && mpz_cmp_ui (size, 0) > 0;
2273 gfc_error ("Without padding, there are not enough elements "
2274 "in the intrinsic RESHAPE source at %L to match "
2275 "the shape", &source->where);
2286 gfc_check_scale (gfc_expr *x, gfc_expr *i)
2288 if (type_check (x, 0, BT_REAL) == FAILURE)
2291 if (type_check (i, 1, BT_INTEGER) == FAILURE)
2299 gfc_check_scan (gfc_expr *x, gfc_expr *y, gfc_expr *z, gfc_expr *kind)
2301 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
2304 if (type_check (y, 1, BT_CHARACTER) == FAILURE)
2307 if (z != NULL && type_check (z, 2, BT_LOGICAL) == FAILURE)
2310 if (kind_check (kind, 3, BT_INTEGER) == FAILURE)
2312 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
2313 "with KIND argument at %L",
2314 gfc_current_intrinsic, &kind->where) == FAILURE)
2317 if (same_type_check (x, 0, y, 1) == FAILURE)
2325 gfc_check_secnds (gfc_expr *r)
2327 if (type_check (r, 0, BT_REAL) == FAILURE)
2330 if (kind_value_check (r, 0, 4) == FAILURE)
2333 if (scalar_check (r, 0) == FAILURE)
2341 gfc_check_selected_int_kind (gfc_expr *r)
2343 if (type_check (r, 0, BT_INTEGER) == FAILURE)
2346 if (scalar_check (r, 0) == FAILURE)
2354 gfc_check_selected_real_kind (gfc_expr *p, gfc_expr *r)
2356 if (p == NULL && r == NULL)
2358 gfc_error ("Missing arguments to %s intrinsic at %L",
2359 gfc_current_intrinsic, gfc_current_intrinsic_where);
2364 if (p != NULL && type_check (p, 0, BT_INTEGER) == FAILURE)
2367 if (r != NULL && type_check (r, 1, BT_INTEGER) == FAILURE)
2375 gfc_check_set_exponent (gfc_expr *x, gfc_expr *i)
2377 if (type_check (x, 0, BT_REAL) == FAILURE)
2380 if (type_check (i, 1, BT_INTEGER) == FAILURE)
2388 gfc_check_shape (gfc_expr *source)
2392 if (source->rank == 0 || source->expr_type != EXPR_VARIABLE)
2395 ar = gfc_find_array_ref (source);
2397 if (ar->as && ar->as->type == AS_ASSUMED_SIZE && ar->type == AR_FULL)
2399 gfc_error ("'source' argument of 'shape' intrinsic at %L must not be "
2400 "an assumed size array", &source->where);
2409 gfc_check_sign (gfc_expr *a, gfc_expr *b)
2411 if (int_or_real_check (a, 0) == FAILURE)
2414 if (same_type_check (a, 0, b, 1) == FAILURE)
2422 gfc_check_size (gfc_expr *array, gfc_expr *dim, gfc_expr *kind)
2424 if (array_check (array, 0) == FAILURE)
2429 if (dim_check (dim, 1, true) == FAILURE)
2432 if (dim_rank_check (dim, array, 0) == FAILURE)
2436 if (kind_check (kind, 2, BT_INTEGER) == FAILURE)
2438 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
2439 "with KIND argument at %L",
2440 gfc_current_intrinsic, &kind->where) == FAILURE)
2449 gfc_check_sizeof (gfc_expr *arg __attribute__((unused)))
2456 gfc_check_sleep_sub (gfc_expr *seconds)
2458 if (type_check (seconds, 0, BT_INTEGER) == FAILURE)
2461 if (scalar_check (seconds, 0) == FAILURE)
2469 gfc_check_spread (gfc_expr *source, gfc_expr *dim, gfc_expr *ncopies)
2471 if (source->rank >= GFC_MAX_DIMENSIONS)
2473 gfc_error ("'%s' argument of '%s' intrinsic at %L must be less "
2474 "than rank %d", gfc_current_intrinsic_arg[0],
2475 gfc_current_intrinsic, &source->where, GFC_MAX_DIMENSIONS);
2483 if (dim_check (dim, 1, false) == FAILURE)
2486 if (type_check (ncopies, 2, BT_INTEGER) == FAILURE)
2489 if (scalar_check (ncopies, 2) == FAILURE)
2496 /* Functions for checking FGETC, FPUTC, FGET and FPUT (subroutines and
2500 gfc_check_fgetputc_sub (gfc_expr *unit, gfc_expr *c, gfc_expr *status)
2502 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2505 if (scalar_check (unit, 0) == FAILURE)
2508 if (type_check (c, 1, BT_CHARACTER) == FAILURE)
2514 if (type_check (status, 2, BT_INTEGER) == FAILURE
2515 || kind_value_check (status, 2, gfc_default_integer_kind) == FAILURE
2516 || scalar_check (status, 2) == FAILURE)
2524 gfc_check_fgetputc (gfc_expr *unit, gfc_expr *c)
2526 return gfc_check_fgetputc_sub (unit, c, NULL);
2531 gfc_check_fgetput_sub (gfc_expr *c, gfc_expr *status)
2533 if (type_check (c, 0, BT_CHARACTER) == FAILURE)
2539 if (type_check (status, 1, BT_INTEGER) == FAILURE
2540 || kind_value_check (status, 1, gfc_default_integer_kind) == FAILURE
2541 || scalar_check (status, 1) == FAILURE)
2549 gfc_check_fgetput (gfc_expr *c)
2551 return gfc_check_fgetput_sub (c, NULL);
2556 gfc_check_fseek_sub (gfc_expr *unit, gfc_expr *offset, gfc_expr *whence, gfc_expr *status)
2558 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2561 if (scalar_check (unit, 0) == FAILURE)
2564 if (type_check (offset, 1, BT_INTEGER) == FAILURE)
2567 if (scalar_check (offset, 1) == FAILURE)
2570 if (type_check (whence, 2, BT_INTEGER) == FAILURE)
2573 if (scalar_check (whence, 2) == FAILURE)
2579 if (type_check (status, 3, BT_INTEGER) == FAILURE)
2582 if (kind_value_check (status, 3, 4) == FAILURE)
2585 if (scalar_check (status, 3) == FAILURE)
2594 gfc_check_fstat (gfc_expr *unit, gfc_expr *array)
2596 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2599 if (scalar_check (unit, 0) == FAILURE)
2602 if (type_check (array, 1, BT_INTEGER) == FAILURE
2603 || kind_value_check (unit, 0, gfc_default_integer_kind) == FAILURE)
2606 if (array_check (array, 1) == FAILURE)
2614 gfc_check_fstat_sub (gfc_expr *unit, gfc_expr *array, gfc_expr *status)
2616 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2619 if (scalar_check (unit, 0) == FAILURE)
2622 if (type_check (array, 1, BT_INTEGER) == FAILURE
2623 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
2626 if (array_check (array, 1) == FAILURE)
2632 if (type_check (status, 2, BT_INTEGER) == FAILURE
2633 || kind_value_check (status, 2, gfc_default_integer_kind) == FAILURE)
2636 if (scalar_check (status, 2) == FAILURE)
2644 gfc_check_ftell (gfc_expr *unit)
2646 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2649 if (scalar_check (unit, 0) == FAILURE)
2657 gfc_check_ftell_sub (gfc_expr *unit, gfc_expr *offset)
2659 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2662 if (scalar_check (unit, 0) == FAILURE)
2665 if (type_check (offset, 1, BT_INTEGER) == FAILURE)
2668 if (scalar_check (offset, 1) == FAILURE)
2676 gfc_check_stat (gfc_expr *name, gfc_expr *array)
2678 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
2681 if (type_check (array, 1, BT_INTEGER) == FAILURE
2682 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
2685 if (array_check (array, 1) == FAILURE)
2693 gfc_check_stat_sub (gfc_expr *name, gfc_expr *array, gfc_expr *status)
2695 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
2698 if (type_check (array, 1, BT_INTEGER) == FAILURE
2699 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
2702 if (array_check (array, 1) == FAILURE)
2708 if (type_check (status, 2, BT_INTEGER) == FAILURE
2709 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
2712 if (scalar_check (status, 2) == FAILURE)
2720 gfc_check_transfer (gfc_expr *source ATTRIBUTE_UNUSED,
2721 gfc_expr *mold ATTRIBUTE_UNUSED, gfc_expr *size)
2723 if (mold->ts.type == BT_HOLLERITH)
2725 gfc_error ("'MOLD' argument of 'TRANSFER' intrinsic at %L must not be %s",
2726 &mold->where, gfc_basic_typename (BT_HOLLERITH));
2732 if (type_check (size, 2, BT_INTEGER) == FAILURE)
2735 if (scalar_check (size, 2) == FAILURE)
2738 if (nonoptional_check (size, 2) == FAILURE)
2747 gfc_check_transpose (gfc_expr *matrix)
2749 if (rank_check (matrix, 0, 2) == FAILURE)
2757 gfc_check_ubound (gfc_expr *array, gfc_expr *dim, gfc_expr *kind)
2759 if (array_check (array, 0) == FAILURE)
2764 if (dim_check (dim, 1, false) == FAILURE)
2767 if (dim_rank_check (dim, array, 0) == FAILURE)
2771 if (kind_check (kind, 2, BT_INTEGER) == FAILURE)
2773 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
2774 "with KIND argument at %L",
2775 gfc_current_intrinsic, &kind->where) == FAILURE)
2783 gfc_check_unpack (gfc_expr *vector, gfc_expr *mask, gfc_expr *field)
2785 if (rank_check (vector, 0, 1) == FAILURE)
2788 if (array_check (mask, 1) == FAILURE)
2791 if (type_check (mask, 1, BT_LOGICAL) == FAILURE)
2794 if (same_type_check (vector, 0, field, 2) == FAILURE)
2802 gfc_check_verify (gfc_expr *x, gfc_expr *y, gfc_expr *z, gfc_expr *kind)
2804 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
2807 if (same_type_check (x, 0, y, 1) == FAILURE)
2810 if (z != NULL && type_check (z, 2, BT_LOGICAL) == FAILURE)
2813 if (kind_check (kind, 3, BT_INTEGER) == FAILURE)
2815 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
2816 "with KIND argument at %L",
2817 gfc_current_intrinsic, &kind->where) == FAILURE)
2825 gfc_check_trim (gfc_expr *x)
2827 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
2830 if (scalar_check (x, 0) == FAILURE)
2838 gfc_check_ttynam (gfc_expr *unit)
2840 if (scalar_check (unit, 0) == FAILURE)
2843 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2850 /* Common check function for the half a dozen intrinsics that have a
2851 single real argument. */
2854 gfc_check_x (gfc_expr *x)
2856 if (type_check (x, 0, BT_REAL) == FAILURE)
2863 /************* Check functions for intrinsic subroutines *************/
2866 gfc_check_cpu_time (gfc_expr *time)
2868 if (scalar_check (time, 0) == FAILURE)
2871 if (type_check (time, 0, BT_REAL) == FAILURE)
2874 if (variable_check (time, 0) == FAILURE)
2882 gfc_check_date_and_time (gfc_expr *date, gfc_expr *time,
2883 gfc_expr *zone, gfc_expr *values)
2887 if (type_check (date, 0, BT_CHARACTER) == FAILURE)
2889 if (scalar_check (date, 0) == FAILURE)
2891 if (variable_check (date, 0) == FAILURE)
2897 if (type_check (time, 1, BT_CHARACTER) == FAILURE)
2899 if (scalar_check (time, 1) == FAILURE)
2901 if (variable_check (time, 1) == FAILURE)
2907 if (type_check (zone, 2, BT_CHARACTER) == FAILURE)
2909 if (scalar_check (zone, 2) == FAILURE)
2911 if (variable_check (zone, 2) == FAILURE)
2917 if (type_check (values, 3, BT_INTEGER) == FAILURE)
2919 if (array_check (values, 3) == FAILURE)
2921 if (rank_check (values, 3, 1) == FAILURE)
2923 if (variable_check (values, 3) == FAILURE)
2932 gfc_check_mvbits (gfc_expr *from, gfc_expr *frompos, gfc_expr *len,
2933 gfc_expr *to, gfc_expr *topos)
2935 if (type_check (from, 0, BT_INTEGER) == FAILURE)
2938 if (type_check (frompos, 1, BT_INTEGER) == FAILURE)
2941 if (type_check (len, 2, BT_INTEGER) == FAILURE)
2944 if (same_type_check (from, 0, to, 3) == FAILURE)
2947 if (variable_check (to, 3) == FAILURE)
2950 if (type_check (topos, 4, BT_INTEGER) == FAILURE)
2958 gfc_check_random_number (gfc_expr *harvest)
2960 if (type_check (harvest, 0, BT_REAL) == FAILURE)
2963 if (variable_check (harvest, 0) == FAILURE)
2971 gfc_check_random_seed (gfc_expr *size, gfc_expr *put, gfc_expr *get)
2973 unsigned int nargs = 0;
2974 locus *where = NULL;
2978 if (size->expr_type != EXPR_VARIABLE
2979 || !size->symtree->n.sym->attr.optional)
2982 if (scalar_check (size, 0) == FAILURE)
2985 if (type_check (size, 0, BT_INTEGER) == FAILURE)
2988 if (variable_check (size, 0) == FAILURE)
2991 if (kind_value_check (size, 0, gfc_default_integer_kind) == FAILURE)
2997 if (put->expr_type != EXPR_VARIABLE
2998 || !put->symtree->n.sym->attr.optional)
3001 where = &put->where;
3004 if (array_check (put, 1) == FAILURE)
3007 if (rank_check (put, 1, 1) == FAILURE)
3010 if (type_check (put, 1, BT_INTEGER) == FAILURE)
3013 if (kind_value_check (put, 1, gfc_default_integer_kind) == FAILURE)
3019 if (get->expr_type != EXPR_VARIABLE
3020 || !get->symtree->n.sym->attr.optional)
3023 where = &get->where;
3026 if (array_check (get, 2) == FAILURE)
3029 if (rank_check (get, 2, 1) == FAILURE)
3032 if (type_check (get, 2, BT_INTEGER) == FAILURE)
3035 if (variable_check (get, 2) == FAILURE)
3038 if (kind_value_check (get, 2, gfc_default_integer_kind) == FAILURE)
3042 /* RANDOM_SEED may not have more than one non-optional argument. */
3044 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic, where);
3051 gfc_check_second_sub (gfc_expr *time)
3053 if (scalar_check (time, 0) == FAILURE)
3056 if (type_check (time, 0, BT_REAL) == FAILURE)
3059 if (kind_value_check(time, 0, 4) == FAILURE)
3066 /* The arguments of SYSTEM_CLOCK are scalar, integer variables. Note,
3067 count, count_rate, and count_max are all optional arguments */
3070 gfc_check_system_clock (gfc_expr *count, gfc_expr *count_rate,
3071 gfc_expr *count_max)
3075 if (scalar_check (count, 0) == FAILURE)
3078 if (type_check (count, 0, BT_INTEGER) == FAILURE)
3081 if (variable_check (count, 0) == FAILURE)
3085 if (count_rate != NULL)
3087 if (scalar_check (count_rate, 1) == FAILURE)
3090 if (type_check (count_rate, 1, BT_INTEGER) == FAILURE)
3093 if (variable_check (count_rate, 1) == FAILURE)
3097 && same_type_check (count, 0, count_rate, 1) == FAILURE)
3102 if (count_max != NULL)
3104 if (scalar_check (count_max, 2) == FAILURE)
3107 if (type_check (count_max, 2, BT_INTEGER) == FAILURE)
3110 if (variable_check (count_max, 2) == FAILURE)
3114 && same_type_check (count, 0, count_max, 2) == FAILURE)
3117 if (count_rate != NULL
3118 && same_type_check (count_rate, 1, count_max, 2) == FAILURE)
3127 gfc_check_irand (gfc_expr *x)
3132 if (scalar_check (x, 0) == FAILURE)
3135 if (type_check (x, 0, BT_INTEGER) == FAILURE)
3138 if (kind_value_check(x, 0, 4) == FAILURE)
3146 gfc_check_alarm_sub (gfc_expr *seconds, gfc_expr *handler, gfc_expr *status)
3148 if (scalar_check (seconds, 0) == FAILURE)
3151 if (type_check (seconds, 0, BT_INTEGER) == FAILURE)
3154 if (handler->ts.type != BT_INTEGER && handler->ts.type != BT_PROCEDURE)
3156 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
3157 "or PROCEDURE", gfc_current_intrinsic_arg[1],
3158 gfc_current_intrinsic, &handler->where);
3162 if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE)
3168 if (scalar_check (status, 2) == FAILURE)
3171 if (type_check (status, 2, BT_INTEGER) == FAILURE)
3174 if (kind_value_check (status, 2, gfc_default_integer_kind) == FAILURE)
3182 gfc_check_rand (gfc_expr *x)
3187 if (scalar_check (x, 0) == FAILURE)
3190 if (type_check (x, 0, BT_INTEGER) == FAILURE)
3193 if (kind_value_check(x, 0, 4) == FAILURE)
3201 gfc_check_srand (gfc_expr *x)
3203 if (scalar_check (x, 0) == FAILURE)
3206 if (type_check (x, 0, BT_INTEGER) == FAILURE)
3209 if (kind_value_check(x, 0, 4) == FAILURE)
3217 gfc_check_ctime_sub (gfc_expr *time, gfc_expr *result)
3219 if (scalar_check (time, 0) == FAILURE)
3222 if (type_check (time, 0, BT_INTEGER) == FAILURE)
3225 if (type_check (result, 1, BT_CHARACTER) == FAILURE)
3233 gfc_check_dtime_etime (gfc_expr *x)
3235 if (array_check (x, 0) == FAILURE)
3238 if (rank_check (x, 0, 1) == FAILURE)
3241 if (variable_check (x, 0) == FAILURE)
3244 if (type_check (x, 0, BT_REAL) == FAILURE)
3247 if (kind_value_check(x, 0, 4) == FAILURE)
3255 gfc_check_dtime_etime_sub (gfc_expr *values, gfc_expr *time)
3257 if (array_check (values, 0) == FAILURE)
3260 if (rank_check (values, 0, 1) == FAILURE)
3263 if (variable_check (values, 0) == FAILURE)
3266 if (type_check (values, 0, BT_REAL) == FAILURE)
3269 if (kind_value_check(values, 0, 4) == FAILURE)
3272 if (scalar_check (time, 1) == FAILURE)
3275 if (type_check (time, 1, BT_REAL) == FAILURE)
3278 if (kind_value_check(time, 1, 4) == FAILURE)
3286 gfc_check_fdate_sub (gfc_expr *date)
3288 if (type_check (date, 0, BT_CHARACTER) == FAILURE)
3296 gfc_check_gerror (gfc_expr *msg)
3298 if (type_check (msg, 0, BT_CHARACTER) == FAILURE)
3306 gfc_check_getcwd_sub (gfc_expr *cwd, gfc_expr *status)
3308 if (type_check (cwd, 0, BT_CHARACTER) == FAILURE)
3314 if (scalar_check (status, 1) == FAILURE)
3317 if (type_check (status, 1, BT_INTEGER) == FAILURE)
3325 gfc_check_getarg (gfc_expr *pos, gfc_expr *value)
3327 if (type_check (pos, 0, BT_INTEGER) == FAILURE)
3330 if (pos->ts.kind > gfc_default_integer_kind)
3332 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a kind "
3333 "not wider than the default kind (%d)",
3334 gfc_current_intrinsic_arg[0], gfc_current_intrinsic,
3335 &pos->where, gfc_default_integer_kind);
3339 if (type_check (value, 1, BT_CHARACTER) == FAILURE)
3347 gfc_check_getlog (gfc_expr *msg)
3349 if (type_check (msg, 0, BT_CHARACTER) == FAILURE)
3357 gfc_check_exit (gfc_expr *status)
3362 if (type_check (status, 0, BT_INTEGER) == FAILURE)
3365 if (scalar_check (status, 0) == FAILURE)
3373 gfc_check_flush (gfc_expr *unit)
3378 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3381 if (scalar_check (unit, 0) == FAILURE)
3389 gfc_check_free (gfc_expr *i)
3391 if (type_check (i, 0, BT_INTEGER) == FAILURE)
3394 if (scalar_check (i, 0) == FAILURE)
3402 gfc_check_hostnm (gfc_expr *name)
3404 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
3412 gfc_check_hostnm_sub (gfc_expr *name, gfc_expr *status)
3414 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
3420 if (scalar_check (status, 1) == FAILURE)
3423 if (type_check (status, 1, BT_INTEGER) == FAILURE)
3431 gfc_check_itime_idate (gfc_expr *values)
3433 if (array_check (values, 0) == FAILURE)
3436 if (rank_check (values, 0, 1) == FAILURE)
3439 if (variable_check (values, 0) == FAILURE)
3442 if (type_check (values, 0, BT_INTEGER) == FAILURE)
3445 if (kind_value_check(values, 0, gfc_default_integer_kind) == FAILURE)
3453 gfc_check_ltime_gmtime (gfc_expr *time, gfc_expr *values)
3455 if (type_check (time, 0, BT_INTEGER) == FAILURE)
3458 if (kind_value_check(time, 0, gfc_default_integer_kind) == FAILURE)
3461 if (scalar_check (time, 0) == FAILURE)
3464 if (array_check (values, 1) == FAILURE)
3467 if (rank_check (values, 1, 1) == FAILURE)
3470 if (variable_check (values, 1) == FAILURE)
3473 if (type_check (values, 1, BT_INTEGER) == FAILURE)
3476 if (kind_value_check(values, 1, gfc_default_integer_kind) == FAILURE)
3484 gfc_check_ttynam_sub (gfc_expr *unit, gfc_expr *name)
3486 if (scalar_check (unit, 0) == FAILURE)
3489 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3492 if (type_check (name, 1, BT_CHARACTER) == FAILURE)
3500 gfc_check_isatty (gfc_expr *unit)
3505 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3508 if (scalar_check (unit, 0) == FAILURE)
3516 gfc_check_isnan (gfc_expr *x)
3518 if (type_check (x, 0, BT_REAL) == FAILURE)
3526 gfc_check_perror (gfc_expr *string)
3528 if (type_check (string, 0, BT_CHARACTER) == FAILURE)
3536 gfc_check_umask (gfc_expr *mask)
3538 if (type_check (mask, 0, BT_INTEGER) == FAILURE)
3541 if (scalar_check (mask, 0) == FAILURE)
3549 gfc_check_umask_sub (gfc_expr *mask, gfc_expr *old)
3551 if (type_check (mask, 0, BT_INTEGER) == FAILURE)
3554 if (scalar_check (mask, 0) == FAILURE)
3560 if (scalar_check (old, 1) == FAILURE)
3563 if (type_check (old, 1, BT_INTEGER) == FAILURE)
3571 gfc_check_unlink (gfc_expr *name)
3573 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
3581 gfc_check_unlink_sub (gfc_expr *name, gfc_expr *status)
3583 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
3589 if (scalar_check (status, 1) == FAILURE)
3592 if (type_check (status, 1, BT_INTEGER) == FAILURE)
3600 gfc_check_signal (gfc_expr *number, gfc_expr *handler)
3602 if (scalar_check (number, 0) == FAILURE)
3605 if (type_check (number, 0, BT_INTEGER) == FAILURE)
3608 if (handler->ts.type != BT_INTEGER && handler->ts.type != BT_PROCEDURE)
3610 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
3611 "or PROCEDURE", gfc_current_intrinsic_arg[1],
3612 gfc_current_intrinsic, &handler->where);
3616 if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE)
3624 gfc_check_signal_sub (gfc_expr *number, gfc_expr *handler, gfc_expr *status)
3626 if (scalar_check (number, 0) == FAILURE)
3629 if (type_check (number, 0, BT_INTEGER) == FAILURE)
3632 if (handler->ts.type != BT_INTEGER && handler->ts.type != BT_PROCEDURE)
3634 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
3635 "or PROCEDURE", gfc_current_intrinsic_arg[1],
3636 gfc_current_intrinsic, &handler->where);
3640 if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE)
3646 if (type_check (status, 2, BT_INTEGER) == FAILURE)
3649 if (scalar_check (status, 2) == FAILURE)
3657 gfc_check_system_sub (gfc_expr *cmd, gfc_expr *status)
3659 if (type_check (cmd, 0, BT_CHARACTER) == FAILURE)
3662 if (scalar_check (status, 1) == FAILURE)
3665 if (type_check (status, 1, BT_INTEGER) == FAILURE)
3668 if (kind_value_check (status, 1, gfc_default_integer_kind) == FAILURE)
3675 /* This is used for the GNU intrinsics AND, OR and XOR. */
3677 gfc_check_and (gfc_expr *i, gfc_expr *j)
3679 if (i->ts.type != BT_INTEGER && i->ts.type != BT_LOGICAL)
3681 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
3682 "or LOGICAL", gfc_current_intrinsic_arg[0],
3683 gfc_current_intrinsic, &i->where);
3687 if (j->ts.type != BT_INTEGER && j->ts.type != BT_LOGICAL)
3689 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
3690 "or LOGICAL", gfc_current_intrinsic_arg[1],
3691 gfc_current_intrinsic, &j->where);
3695 if (i->ts.type != j->ts.type)
3697 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
3698 "have the same type", gfc_current_intrinsic_arg[0],
3699 gfc_current_intrinsic_arg[1], gfc_current_intrinsic,
3704 if (scalar_check (i, 0) == FAILURE)
3707 if (scalar_check (j, 1) == FAILURE)