invoke.texi (powerpc msdata-data): Static data doesn't go in small data sections.
[official-gcc.git] / gcc / fortran / check.c
blob7b718960397c9053cac606474c25aca9189374aa
1 /* Check functions
2 Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
3 Contributed by Andy Vaught & Katherine Holcomb
5 This file is part of GCC.
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 2, or (at your option) any later
10 version.
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
15 for more details.
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
20 02110-1301, USA. */
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. */
29 #include "config.h"
30 #include "system.h"
31 #include "flags.h"
32 #include "gfortran.h"
33 #include "intrinsic.h"
36 /* Check the type of an expression. */
38 static try
39 type_check (gfc_expr * e, int n, bt type)
41 if (e->ts.type == type)
42 return SUCCESS;
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));
48 return FAILURE;
52 /* Check that the expression is a numeric type. */
54 static try
55 numeric_check (gfc_expr * e, int n)
57 if (gfc_numeric_ts (&e->ts))
58 return SUCCESS;
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);
63 return FAILURE;
67 /* Check that an expression is integer or real. */
69 static try
70 int_or_real_check (gfc_expr * e, int n)
72 if (e->ts.type != BT_INTEGER && e->ts.type != BT_REAL)
74 gfc_error (
75 "'%s' argument of '%s' intrinsic at %L must be INTEGER or REAL",
76 gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &e->where);
77 return FAILURE;
80 return SUCCESS;
84 /* Check that an expression is real or complex. */
86 static try
87 real_or_complex_check (gfc_expr * e, int n)
89 if (e->ts.type != BT_REAL && e->ts.type != BT_COMPLEX)
91 gfc_error (
92 "'%s' argument of '%s' intrinsic at %L must be REAL or COMPLEX",
93 gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &e->where);
94 return FAILURE;
97 return SUCCESS;
101 /* Check that the expression is an optional constant integer
102 and that it specifies a valid kind for that type. */
104 static try
105 kind_check (gfc_expr * k, int n, bt type)
107 int kind;
109 if (k == NULL)
110 return SUCCESS;
112 if (type_check (k, n, BT_INTEGER) == FAILURE)
113 return FAILURE;
115 if (k->expr_type != EXPR_CONSTANT)
117 gfc_error (
118 "'%s' argument of '%s' intrinsic at %L must be a constant",
119 gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &k->where);
120 return FAILURE;
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),
127 &k->where);
128 return FAILURE;
131 return SUCCESS;
135 /* Make sure the expression is a double precision real. */
137 static try
138 double_check (gfc_expr * d, int n)
140 if (type_check (d, n, BT_REAL) == FAILURE)
141 return FAILURE;
143 if (d->ts.kind != gfc_default_double_kind)
145 gfc_error (
146 "'%s' argument of '%s' intrinsic at %L must be double precision",
147 gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &d->where);
148 return FAILURE;
151 return SUCCESS;
155 /* Make sure the expression is a logical array. */
157 static try
158 logical_array_check (gfc_expr * array, int n)
160 if (array->ts.type != BT_LOGICAL || array->rank == 0)
162 gfc_error (
163 "'%s' argument of '%s' intrinsic at %L must be a logical array",
164 gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &array->where);
165 return FAILURE;
168 return SUCCESS;
172 /* Make sure an expression is an array. */
174 static try
175 array_check (gfc_expr * e, int n)
177 if (e->rank != 0)
178 return SUCCESS;
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);
183 return FAILURE;
187 /* Make sure an expression is a scalar. */
189 static try
190 scalar_check (gfc_expr * e, int n)
192 if (e->rank == 0)
193 return SUCCESS;
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);
198 return FAILURE;
202 /* Make sure two expression have the same type. */
204 static try
205 same_type_check (gfc_expr * e, int n, gfc_expr * f, int m)
207 if (gfc_compare_types (&e->ts, &f->ts))
208 return SUCCESS;
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]);
213 return FAILURE;
217 /* Make sure that an expression has a certain (nonzero) rank. */
219 static try
220 rank_check (gfc_expr * e, int n, int rank)
222 if (e->rank == rank)
223 return SUCCESS;
225 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank %d",
226 gfc_current_intrinsic_arg[n], gfc_current_intrinsic,
227 &e->where, rank);
228 return FAILURE;
232 /* Make sure a variable expression is not an optional dummy argument. */
234 static try
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,
241 &e->where);
245 /* TODO: Recursive check on nonoptional variables? */
247 return SUCCESS;
251 /* Check that an expression has a particular kind. */
253 static try
254 kind_value_check (gfc_expr * e, int n, int k)
256 if (e->ts.kind == k)
257 return SUCCESS;
259 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of kind %d",
260 gfc_current_intrinsic_arg[n], gfc_current_intrinsic,
261 &e->where, k);
262 return FAILURE;
266 /* Make sure an expression is a variable. */
268 static try
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))
275 return SUCCESS;
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,
282 &e->where);
283 return FAILURE;
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);
289 return FAILURE;
293 /* Check the common DIM parameter for correctness. */
295 static try
296 dim_check (gfc_expr * dim, int n, int optional)
298 if (optional)
300 if (dim == NULL)
301 return SUCCESS;
303 if (nonoptional_check (dim, n) == FAILURE)
304 return FAILURE;
306 return SUCCESS;
309 if (dim == NULL)
311 gfc_error ("Missing DIM parameter in intrinsic '%s' at %L",
312 gfc_current_intrinsic, gfc_current_intrinsic_where);
313 return FAILURE;
316 if (type_check (dim, n, BT_INTEGER) == FAILURE)
317 return FAILURE;
319 if (scalar_check (dim, n) == FAILURE)
320 return FAILURE;
322 return SUCCESS;
326 /* If a DIM parameter is a constant, make sure that it is greater than
327 zero and less than or equal to the rank of the given array. If
328 allow_assumed is zero then dim must be less than the rank of the array
329 for assumed size arrays. */
331 static try
332 dim_rank_check (gfc_expr * dim, gfc_expr * array, int allow_assumed)
334 gfc_array_ref *ar;
335 int rank;
337 if (dim->expr_type != EXPR_CONSTANT || array->expr_type != EXPR_VARIABLE)
338 return SUCCESS;
340 ar = gfc_find_array_ref (array);
341 rank = array->rank;
342 if (ar->as->type == AS_ASSUMED_SIZE && !allow_assumed)
343 rank--;
345 if (mpz_cmp_ui (dim->value.integer, 1) < 0
346 || mpz_cmp_ui (dim->value.integer, rank) > 0)
348 gfc_error ("'dim' argument of '%s' intrinsic at %L is not a valid "
349 "dimension index", gfc_current_intrinsic, &dim->where);
351 return FAILURE;
354 return SUCCESS;
358 /***** Check functions *****/
360 /* Check subroutine suitable for intrinsics taking a real argument and
361 a kind argument for the result. */
363 static try
364 check_a_kind (gfc_expr * a, gfc_expr * kind, bt type)
366 if (type_check (a, 0, BT_REAL) == FAILURE)
367 return FAILURE;
368 if (kind_check (kind, 1, type) == FAILURE)
369 return FAILURE;
371 return SUCCESS;
374 /* Check subroutine suitable for ceiling, floor and nint. */
377 gfc_check_a_ikind (gfc_expr * a, gfc_expr * kind)
379 return check_a_kind (a, kind, BT_INTEGER);
382 /* Check subroutine suitable for aint, anint. */
385 gfc_check_a_xkind (gfc_expr * a, gfc_expr * kind)
387 return check_a_kind (a, kind, BT_REAL);
391 gfc_check_abs (gfc_expr * a)
393 if (numeric_check (a, 0) == FAILURE)
394 return FAILURE;
396 return SUCCESS;
400 gfc_check_achar (gfc_expr * a)
403 if (type_check (a, 0, BT_INTEGER) == FAILURE)
404 return FAILURE;
406 return SUCCESS;
411 gfc_check_all_any (gfc_expr * mask, gfc_expr * dim)
413 if (logical_array_check (mask, 0) == FAILURE)
414 return FAILURE;
416 if (dim_check (dim, 1, 1) == FAILURE)
417 return FAILURE;
419 return SUCCESS;
424 gfc_check_allocated (gfc_expr * array)
426 if (variable_check (array, 0) == FAILURE)
427 return FAILURE;
429 if (array_check (array, 0) == FAILURE)
430 return FAILURE;
432 if (!array->symtree->n.sym->attr.allocatable)
434 gfc_error ("'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE",
435 gfc_current_intrinsic_arg[0], gfc_current_intrinsic,
436 &array->where);
437 return FAILURE;
440 return SUCCESS;
444 /* Common check function where the first argument must be real or
445 integer and the second argument must be the same as the first. */
448 gfc_check_a_p (gfc_expr * a, gfc_expr * p)
450 if (int_or_real_check (a, 0) == FAILURE)
451 return FAILURE;
453 if (a->ts.type != p->ts.type)
455 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
456 "have the same type", gfc_current_intrinsic_arg[0],
457 gfc_current_intrinsic_arg[1], gfc_current_intrinsic,
458 &p->where);
459 return FAILURE;
462 if (a->ts.kind != p->ts.kind)
464 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
465 &p->where) == FAILURE)
466 return FAILURE;
469 return SUCCESS;
474 gfc_check_associated (gfc_expr * pointer, gfc_expr * target)
476 symbol_attribute attr;
477 int i;
478 try t;
480 if (variable_check (pointer, 0) == FAILURE)
481 return FAILURE;
483 attr = gfc_variable_attr (pointer, NULL);
484 if (!attr.pointer)
486 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER",
487 gfc_current_intrinsic_arg[0], gfc_current_intrinsic,
488 &pointer->where);
489 return FAILURE;
492 if (target == NULL)
493 return SUCCESS;
495 /* Target argument is optional. */
496 if (target->expr_type == EXPR_NULL)
498 gfc_error ("NULL pointer at %L is not permitted as actual argument "
499 "of '%s' intrinsic function",
500 &target->where, gfc_current_intrinsic);
501 return FAILURE;
504 attr = gfc_variable_attr (target, NULL);
505 if (!attr.pointer && !attr.target)
507 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER "
508 "or a TARGET", gfc_current_intrinsic_arg[1],
509 gfc_current_intrinsic, &target->where);
510 return FAILURE;
513 t = SUCCESS;
514 if (same_type_check (pointer, 0, target, 1) == FAILURE)
515 t = FAILURE;
516 if (rank_check (target, 0, pointer->rank) == FAILURE)
517 t = FAILURE;
518 if (target->rank > 0)
520 for (i = 0; i < target->rank; i++)
521 if (target->ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
523 gfc_error ("Array section with a vector subscript at %L shall not "
524 "be the target of a pointer",
525 &target->where);
526 t = FAILURE;
527 break;
530 return t;
535 gfc_check_atan2 (gfc_expr * y, gfc_expr * x)
537 if (type_check (y, 0, BT_REAL) == FAILURE)
538 return FAILURE;
539 if (same_type_check (y, 0, x, 1) == FAILURE)
540 return FAILURE;
542 return SUCCESS;
546 /* BESJN and BESYN functions. */
549 gfc_check_besn (gfc_expr * n, gfc_expr * x)
551 if (scalar_check (n, 0) == FAILURE)
552 return FAILURE;
554 if (type_check (n, 0, BT_INTEGER) == FAILURE)
555 return FAILURE;
557 if (scalar_check (x, 1) == FAILURE)
558 return FAILURE;
560 if (type_check (x, 1, BT_REAL) == FAILURE)
561 return FAILURE;
563 return SUCCESS;
568 gfc_check_btest (gfc_expr * i, gfc_expr * pos)
570 if (type_check (i, 0, BT_INTEGER) == FAILURE)
571 return FAILURE;
572 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
573 return FAILURE;
575 return SUCCESS;
580 gfc_check_char (gfc_expr * i, gfc_expr * kind)
582 if (type_check (i, 0, BT_INTEGER) == FAILURE)
583 return FAILURE;
584 if (kind_check (kind, 1, BT_CHARACTER) == FAILURE)
585 return FAILURE;
587 return SUCCESS;
592 gfc_check_chdir (gfc_expr * dir)
594 if (type_check (dir, 0, BT_CHARACTER) == FAILURE)
595 return FAILURE;
597 return SUCCESS;
602 gfc_check_chdir_sub (gfc_expr * dir, gfc_expr * status)
604 if (type_check (dir, 0, BT_CHARACTER) == FAILURE)
605 return FAILURE;
607 if (status == NULL)
608 return SUCCESS;
610 if (type_check (status, 1, BT_INTEGER) == FAILURE)
611 return FAILURE;
613 if (scalar_check (status, 1) == FAILURE)
614 return FAILURE;
616 return SUCCESS;
621 gfc_check_cmplx (gfc_expr * x, gfc_expr * y, gfc_expr * kind)
623 if (numeric_check (x, 0) == FAILURE)
624 return FAILURE;
626 if (y != NULL)
628 if (numeric_check (y, 1) == FAILURE)
629 return FAILURE;
631 if (x->ts.type == BT_COMPLEX)
633 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
634 "present if 'x' is COMPLEX", gfc_current_intrinsic_arg[1],
635 gfc_current_intrinsic, &y->where);
636 return FAILURE;
640 if (kind_check (kind, 2, BT_COMPLEX) == FAILURE)
641 return FAILURE;
643 return SUCCESS;
648 gfc_check_complex (gfc_expr * x, gfc_expr * y)
650 if (x->ts.type != BT_INTEGER && x->ts.type != BT_REAL)
652 gfc_error (
653 "'%s' argument of '%s' intrinsic at %L must be INTEGER or REAL",
654 gfc_current_intrinsic_arg[0], gfc_current_intrinsic, &x->where);
655 return FAILURE;
657 if (scalar_check (x, 0) == FAILURE)
658 return FAILURE;
660 if (y->ts.type != BT_INTEGER && y->ts.type != BT_REAL)
662 gfc_error (
663 "'%s' argument of '%s' intrinsic at %L must be INTEGER or REAL",
664 gfc_current_intrinsic_arg[1], gfc_current_intrinsic, &y->where);
665 return FAILURE;
667 if (scalar_check (y, 1) == FAILURE)
668 return FAILURE;
670 return SUCCESS;
675 gfc_check_count (gfc_expr * mask, gfc_expr * dim)
677 if (logical_array_check (mask, 0) == FAILURE)
678 return FAILURE;
679 if (dim_check (dim, 1, 1) == FAILURE)
680 return FAILURE;
682 return SUCCESS;
687 gfc_check_cshift (gfc_expr * array, gfc_expr * shift, gfc_expr * dim)
689 if (array_check (array, 0) == FAILURE)
690 return FAILURE;
692 if (array->rank == 1)
694 if (scalar_check (shift, 1) == FAILURE)
695 return FAILURE;
697 else
699 /* TODO: more requirements on shift parameter. */
702 if (dim_check (dim, 2, 1) == FAILURE)
703 return FAILURE;
705 return SUCCESS;
710 gfc_check_ctime (gfc_expr * time)
712 if (scalar_check (time, 0) == FAILURE)
713 return FAILURE;
715 if (type_check (time, 0, BT_INTEGER) == FAILURE)
716 return FAILURE;
718 return SUCCESS;
723 gfc_check_dcmplx (gfc_expr * x, gfc_expr * y)
725 if (numeric_check (x, 0) == FAILURE)
726 return FAILURE;
728 if (y != NULL)
730 if (numeric_check (y, 1) == FAILURE)
731 return FAILURE;
733 if (x->ts.type == BT_COMPLEX)
735 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
736 "present if 'x' is COMPLEX", gfc_current_intrinsic_arg[1],
737 gfc_current_intrinsic, &y->where);
738 return FAILURE;
742 return SUCCESS;
747 gfc_check_dble (gfc_expr * x)
749 if (numeric_check (x, 0) == FAILURE)
750 return FAILURE;
752 return SUCCESS;
757 gfc_check_digits (gfc_expr * x)
759 if (int_or_real_check (x, 0) == FAILURE)
760 return FAILURE;
762 return SUCCESS;
767 gfc_check_dot_product (gfc_expr * vector_a, gfc_expr * vector_b)
769 switch (vector_a->ts.type)
771 case BT_LOGICAL:
772 if (type_check (vector_b, 1, BT_LOGICAL) == FAILURE)
773 return FAILURE;
774 break;
776 case BT_INTEGER:
777 case BT_REAL:
778 case BT_COMPLEX:
779 if (numeric_check (vector_b, 1) == FAILURE)
780 return FAILURE;
781 break;
783 default:
784 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
785 "or LOGICAL", gfc_current_intrinsic_arg[0],
786 gfc_current_intrinsic, &vector_a->where);
787 return FAILURE;
790 if (rank_check (vector_a, 0, 1) == FAILURE)
791 return FAILURE;
793 if (rank_check (vector_b, 1, 1) == FAILURE)
794 return FAILURE;
796 return SUCCESS;
801 gfc_check_eoshift (gfc_expr * array, gfc_expr * shift, gfc_expr * boundary,
802 gfc_expr * dim)
804 if (array_check (array, 0) == FAILURE)
805 return FAILURE;
807 if (type_check (shift, 1, BT_INTEGER) == FAILURE)
808 return FAILURE;
810 if (array->rank == 1)
812 if (scalar_check (shift, 2) == FAILURE)
813 return FAILURE;
815 else
817 /* TODO: more weird restrictions on shift. */
820 if (boundary != NULL)
822 if (same_type_check (array, 0, boundary, 2) == FAILURE)
823 return FAILURE;
825 /* TODO: more restrictions on boundary. */
828 if (dim_check (dim, 1, 1) == FAILURE)
829 return FAILURE;
831 return SUCCESS;
835 /* A single complex argument. */
838 gfc_check_fn_c (gfc_expr * a)
840 if (type_check (a, 0, BT_COMPLEX) == FAILURE)
841 return FAILURE;
843 return SUCCESS;
847 /* A single real argument. */
850 gfc_check_fn_r (gfc_expr * a)
852 if (type_check (a, 0, BT_REAL) == FAILURE)
853 return FAILURE;
855 return SUCCESS;
859 /* A single real or complex argument. */
862 gfc_check_fn_rc (gfc_expr * a)
864 if (real_or_complex_check (a, 0) == FAILURE)
865 return FAILURE;
867 return SUCCESS;
872 gfc_check_fnum (gfc_expr * unit)
874 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
875 return FAILURE;
877 if (scalar_check (unit, 0) == FAILURE)
878 return FAILURE;
880 return SUCCESS;
884 /* This is used for the g77 one-argument Bessel functions, and the
885 error function. */
888 gfc_check_g77_math1 (gfc_expr * x)
890 if (scalar_check (x, 0) == FAILURE)
891 return FAILURE;
893 if (type_check (x, 0, BT_REAL) == FAILURE)
894 return FAILURE;
896 return SUCCESS;
901 gfc_check_huge (gfc_expr * x)
903 if (int_or_real_check (x, 0) == FAILURE)
904 return FAILURE;
906 return SUCCESS;
910 /* Check that the single argument is an integer. */
913 gfc_check_i (gfc_expr * i)
915 if (type_check (i, 0, BT_INTEGER) == FAILURE)
916 return FAILURE;
918 return SUCCESS;
923 gfc_check_iand (gfc_expr * i, gfc_expr * j)
925 if (type_check (i, 0, BT_INTEGER) == FAILURE)
926 return FAILURE;
928 if (type_check (j, 1, BT_INTEGER) == FAILURE)
929 return FAILURE;
931 if (i->ts.kind != j->ts.kind)
933 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
934 &i->where) == FAILURE)
935 return FAILURE;
938 return SUCCESS;
943 gfc_check_ibclr (gfc_expr * i, gfc_expr * pos)
945 if (type_check (i, 0, BT_INTEGER) == FAILURE)
946 return FAILURE;
948 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
949 return FAILURE;
951 return SUCCESS;
956 gfc_check_ibits (gfc_expr * i, gfc_expr * pos, gfc_expr * len)
958 if (type_check (i, 0, BT_INTEGER) == FAILURE)
959 return FAILURE;
961 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
962 return FAILURE;
964 if (type_check (len, 2, BT_INTEGER) == FAILURE)
965 return FAILURE;
967 return SUCCESS;
972 gfc_check_ibset (gfc_expr * i, gfc_expr * pos)
974 if (type_check (i, 0, BT_INTEGER) == FAILURE)
975 return FAILURE;
977 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
978 return FAILURE;
980 return SUCCESS;
985 gfc_check_ichar_iachar (gfc_expr * c)
987 int i;
989 if (type_check (c, 0, BT_CHARACTER) == FAILURE)
990 return FAILURE;
992 if (c->expr_type == EXPR_VARIABLE || c->expr_type == EXPR_SUBSTRING)
994 gfc_expr *start;
995 gfc_expr *end;
996 gfc_ref *ref;
998 /* Substring references don't have the charlength set. */
999 ref = c->ref;
1000 while (ref && ref->type != REF_SUBSTRING)
1001 ref = ref->next;
1003 gcc_assert (ref == NULL || ref->type == REF_SUBSTRING);
1005 if (!ref)
1007 /* Check that the argument is length one. Non-constant lengths
1008 can't be checked here, so assume thay are ok. */
1009 if (c->ts.cl && c->ts.cl->length)
1011 /* If we already have a length for this expression then use it. */
1012 if (c->ts.cl->length->expr_type != EXPR_CONSTANT)
1013 return SUCCESS;
1014 i = mpz_get_si (c->ts.cl->length->value.integer);
1016 else
1017 return SUCCESS;
1019 else
1021 start = ref->u.ss.start;
1022 end = ref->u.ss.end;
1024 gcc_assert (start);
1025 if (end == NULL || end->expr_type != EXPR_CONSTANT
1026 || start->expr_type != EXPR_CONSTANT)
1027 return SUCCESS;
1029 i = mpz_get_si (end->value.integer) + 1
1030 - mpz_get_si (start->value.integer);
1033 else
1034 return SUCCESS;
1036 if (i != 1)
1038 gfc_error ("Argument of %s at %L must be of length one",
1039 gfc_current_intrinsic, &c->where);
1040 return FAILURE;
1043 return SUCCESS;
1048 gfc_check_idnint (gfc_expr * a)
1050 if (double_check (a, 0) == FAILURE)
1051 return FAILURE;
1053 return SUCCESS;
1058 gfc_check_ieor (gfc_expr * i, gfc_expr * j)
1060 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1061 return FAILURE;
1063 if (type_check (j, 1, BT_INTEGER) == FAILURE)
1064 return FAILURE;
1066 if (i->ts.kind != j->ts.kind)
1068 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
1069 &i->where) == FAILURE)
1070 return FAILURE;
1073 return SUCCESS;
1078 gfc_check_index (gfc_expr * string, gfc_expr * substring, gfc_expr * back)
1080 if (type_check (string, 0, BT_CHARACTER) == FAILURE
1081 || type_check (substring, 1, BT_CHARACTER) == FAILURE)
1082 return FAILURE;
1085 if (back != NULL && type_check (back, 2, BT_LOGICAL) == FAILURE)
1086 return FAILURE;
1088 if (string->ts.kind != substring->ts.kind)
1090 gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same "
1091 "kind as '%s'", gfc_current_intrinsic_arg[1],
1092 gfc_current_intrinsic, &substring->where,
1093 gfc_current_intrinsic_arg[0]);
1094 return FAILURE;
1097 return SUCCESS;
1102 gfc_check_int (gfc_expr * x, gfc_expr * kind)
1104 if (numeric_check (x, 0) == FAILURE)
1105 return FAILURE;
1107 if (kind != NULL)
1109 if (type_check (kind, 1, BT_INTEGER) == FAILURE)
1110 return FAILURE;
1112 if (scalar_check (kind, 1) == FAILURE)
1113 return FAILURE;
1116 return SUCCESS;
1121 gfc_check_ior (gfc_expr * i, gfc_expr * j)
1123 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1124 return FAILURE;
1126 if (type_check (j, 1, BT_INTEGER) == FAILURE)
1127 return FAILURE;
1129 if (i->ts.kind != j->ts.kind)
1131 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
1132 &i->where) == FAILURE)
1133 return FAILURE;
1136 return SUCCESS;
1141 gfc_check_ishft (gfc_expr * i, gfc_expr * shift)
1143 if (type_check (i, 0, BT_INTEGER) == FAILURE
1144 || type_check (shift, 1, BT_INTEGER) == FAILURE)
1145 return FAILURE;
1147 return SUCCESS;
1152 gfc_check_ishftc (gfc_expr * i, gfc_expr * shift, gfc_expr * size)
1154 if (type_check (i, 0, BT_INTEGER) == FAILURE
1155 || type_check (shift, 1, BT_INTEGER) == FAILURE)
1156 return FAILURE;
1158 if (size != NULL && type_check (size, 2, BT_INTEGER) == FAILURE)
1159 return FAILURE;
1161 return SUCCESS;
1166 gfc_check_kill (gfc_expr * pid, gfc_expr * sig)
1168 if (type_check (pid, 0, BT_INTEGER) == FAILURE)
1169 return FAILURE;
1171 if (type_check (sig, 1, BT_INTEGER) == FAILURE)
1172 return FAILURE;
1174 return SUCCESS;
1179 gfc_check_kill_sub (gfc_expr * pid, gfc_expr * sig, gfc_expr * status)
1181 if (type_check (pid, 0, BT_INTEGER) == FAILURE)
1182 return FAILURE;
1184 if (type_check (sig, 1, BT_INTEGER) == FAILURE)
1185 return FAILURE;
1187 if (status == NULL)
1188 return SUCCESS;
1190 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1191 return FAILURE;
1193 if (scalar_check (status, 2) == FAILURE)
1194 return FAILURE;
1196 return SUCCESS;
1201 gfc_check_kind (gfc_expr * x)
1203 if (x->ts.type == BT_DERIVED)
1205 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a "
1206 "non-derived type", gfc_current_intrinsic_arg[0],
1207 gfc_current_intrinsic, &x->where);
1208 return FAILURE;
1211 return SUCCESS;
1216 gfc_check_lbound (gfc_expr * array, gfc_expr * dim)
1218 if (array_check (array, 0) == FAILURE)
1219 return FAILURE;
1221 if (dim != NULL)
1223 if (dim_check (dim, 1, 1) == FAILURE)
1224 return FAILURE;
1226 if (dim_rank_check (dim, array, 1) == FAILURE)
1227 return FAILURE;
1229 return SUCCESS;
1234 gfc_check_link (gfc_expr * path1, gfc_expr * path2)
1236 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1237 return FAILURE;
1239 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1240 return FAILURE;
1242 return SUCCESS;
1247 gfc_check_link_sub (gfc_expr * path1, gfc_expr * path2, gfc_expr * status)
1249 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1250 return FAILURE;
1252 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1253 return FAILURE;
1255 if (status == NULL)
1256 return SUCCESS;
1258 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1259 return FAILURE;
1261 if (scalar_check (status, 2) == FAILURE)
1262 return FAILURE;
1264 return SUCCESS;
1268 gfc_check_loc (gfc_expr *expr)
1270 return variable_check (expr, 0);
1275 gfc_check_symlnk (gfc_expr * path1, gfc_expr * path2)
1277 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1278 return FAILURE;
1280 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1281 return FAILURE;
1283 return SUCCESS;
1288 gfc_check_symlnk_sub (gfc_expr * path1, gfc_expr * path2, gfc_expr * status)
1290 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1291 return FAILURE;
1293 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1294 return FAILURE;
1296 if (status == NULL)
1297 return SUCCESS;
1299 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1300 return FAILURE;
1302 if (scalar_check (status, 2) == FAILURE)
1303 return FAILURE;
1305 return SUCCESS;
1310 gfc_check_logical (gfc_expr * a, gfc_expr * kind)
1312 if (type_check (a, 0, BT_LOGICAL) == FAILURE)
1313 return FAILURE;
1314 if (kind_check (kind, 1, BT_LOGICAL) == FAILURE)
1315 return FAILURE;
1317 return SUCCESS;
1321 /* Min/max family. */
1323 static try
1324 min_max_args (gfc_actual_arglist * arg)
1326 if (arg == NULL || arg->next == NULL)
1328 gfc_error ("Intrinsic '%s' at %L must have at least two arguments",
1329 gfc_current_intrinsic, gfc_current_intrinsic_where);
1330 return FAILURE;
1333 return SUCCESS;
1337 static try
1338 check_rest (bt type, int kind, gfc_actual_arglist * arg)
1340 gfc_expr *x;
1341 int n;
1343 if (min_max_args (arg) == FAILURE)
1344 return FAILURE;
1346 n = 1;
1348 for (; arg; arg = arg->next, n++)
1350 x = arg->expr;
1351 if (x->ts.type != type || x->ts.kind != kind)
1353 if (x->ts.type == type)
1355 if (gfc_notify_std (GFC_STD_GNU,
1356 "Extension: Different type kinds at %L", &x->where)
1357 == FAILURE)
1358 return FAILURE;
1360 else
1362 gfc_error ("'a%d' argument of '%s' intrinsic at %L must be %s(%d)",
1363 n, gfc_current_intrinsic, &x->where,
1364 gfc_basic_typename (type), kind);
1365 return FAILURE;
1370 return SUCCESS;
1375 gfc_check_min_max (gfc_actual_arglist * arg)
1377 gfc_expr *x;
1379 if (min_max_args (arg) == FAILURE)
1380 return FAILURE;
1382 x = arg->expr;
1384 if (x->ts.type != BT_INTEGER && x->ts.type != BT_REAL)
1386 gfc_error
1387 ("'a1' argument of '%s' intrinsic at %L must be INTEGER or REAL",
1388 gfc_current_intrinsic, &x->where);
1389 return FAILURE;
1392 return check_rest (x->ts.type, x->ts.kind, arg);
1397 gfc_check_min_max_integer (gfc_actual_arglist * arg)
1399 return check_rest (BT_INTEGER, gfc_default_integer_kind, arg);
1404 gfc_check_min_max_real (gfc_actual_arglist * arg)
1406 return check_rest (BT_REAL, gfc_default_real_kind, arg);
1411 gfc_check_min_max_double (gfc_actual_arglist * arg)
1413 return check_rest (BT_REAL, gfc_default_double_kind, arg);
1416 /* End of min/max family. */
1419 gfc_check_malloc (gfc_expr * size)
1421 if (type_check (size, 0, BT_INTEGER) == FAILURE)
1422 return FAILURE;
1424 if (scalar_check (size, 0) == FAILURE)
1425 return FAILURE;
1427 return SUCCESS;
1432 gfc_check_matmul (gfc_expr * matrix_a, gfc_expr * matrix_b)
1434 if ((matrix_a->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_b->ts))
1436 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1437 "or LOGICAL", gfc_current_intrinsic_arg[0],
1438 gfc_current_intrinsic, &matrix_a->where);
1439 return FAILURE;
1442 if ((matrix_b->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_a->ts))
1444 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1445 "or LOGICAL", gfc_current_intrinsic_arg[1],
1446 gfc_current_intrinsic, &matrix_b->where);
1447 return FAILURE;
1450 switch (matrix_a->rank)
1452 case 1:
1453 if (rank_check (matrix_b, 1, 2) == FAILURE)
1454 return FAILURE;
1455 break;
1457 case 2:
1458 if (matrix_b->rank == 2)
1459 break;
1460 if (rank_check (matrix_b, 1, 1) == FAILURE)
1461 return FAILURE;
1462 break;
1464 default:
1465 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank "
1466 "1 or 2", gfc_current_intrinsic_arg[0],
1467 gfc_current_intrinsic, &matrix_a->where);
1468 return FAILURE;
1471 return SUCCESS;
1475 /* Whoever came up with this interface was probably on something.
1476 The possibilities for the occupation of the second and third
1477 parameters are:
1479 Arg #2 Arg #3
1480 NULL NULL
1481 DIM NULL
1482 MASK NULL
1483 NULL MASK minloc(array, mask=m)
1484 DIM MASK
1486 I.e. in the case of minloc(array,mask), mask will be in the second
1487 position of the argument list and we'll have to fix that up. */
1490 gfc_check_minloc_maxloc (gfc_actual_arglist * ap)
1492 gfc_expr *a, *m, *d;
1494 a = ap->expr;
1495 if (int_or_real_check (a, 0) == FAILURE
1496 || array_check (a, 0) == FAILURE)
1497 return FAILURE;
1499 d = ap->next->expr;
1500 m = ap->next->next->expr;
1502 if (m == NULL && d != NULL && d->ts.type == BT_LOGICAL
1503 && ap->next->name == NULL)
1505 m = d;
1506 d = NULL;
1508 ap->next->expr = NULL;
1509 ap->next->next->expr = m;
1512 if (d != NULL
1513 && (scalar_check (d, 1) == FAILURE
1514 || type_check (d, 1, BT_INTEGER) == FAILURE))
1515 return FAILURE;
1517 if (m != NULL && type_check (m, 2, BT_LOGICAL) == FAILURE)
1518 return FAILURE;
1520 return SUCCESS;
1524 /* Similar to minloc/maxloc, the argument list might need to be
1525 reordered for the MINVAL, MAXVAL, PRODUCT, and SUM intrinsics. The
1526 difference is that MINLOC/MAXLOC take an additional KIND argument.
1527 The possibilities are:
1529 Arg #2 Arg #3
1530 NULL NULL
1531 DIM NULL
1532 MASK NULL
1533 NULL MASK minval(array, mask=m)
1534 DIM MASK
1536 I.e. in the case of minval(array,mask), mask will be in the second
1537 position of the argument list and we'll have to fix that up. */
1539 static try
1540 check_reduction (gfc_actual_arglist * ap)
1542 gfc_expr *m, *d;
1544 d = ap->next->expr;
1545 m = ap->next->next->expr;
1547 if (m == NULL && d != NULL && d->ts.type == BT_LOGICAL
1548 && ap->next->name == NULL)
1550 m = d;
1551 d = NULL;
1553 ap->next->expr = NULL;
1554 ap->next->next->expr = m;
1557 if (d != NULL
1558 && (scalar_check (d, 1) == FAILURE
1559 || type_check (d, 1, BT_INTEGER) == FAILURE))
1560 return FAILURE;
1562 if (m != NULL && type_check (m, 2, BT_LOGICAL) == FAILURE)
1563 return FAILURE;
1565 return SUCCESS;
1570 gfc_check_minval_maxval (gfc_actual_arglist * ap)
1572 if (int_or_real_check (ap->expr, 0) == FAILURE
1573 || array_check (ap->expr, 0) == FAILURE)
1574 return FAILURE;
1576 return check_reduction (ap);
1581 gfc_check_product_sum (gfc_actual_arglist * ap)
1583 if (numeric_check (ap->expr, 0) == FAILURE
1584 || array_check (ap->expr, 0) == FAILURE)
1585 return FAILURE;
1587 return check_reduction (ap);
1592 gfc_check_merge (gfc_expr * tsource, gfc_expr * fsource, gfc_expr * mask)
1594 if (same_type_check (tsource, 0, fsource, 1) == FAILURE)
1595 return FAILURE;
1597 if (type_check (mask, 2, BT_LOGICAL) == FAILURE)
1598 return FAILURE;
1600 return SUCCESS;
1605 gfc_check_nearest (gfc_expr * x, gfc_expr * s)
1607 if (type_check (x, 0, BT_REAL) == FAILURE)
1608 return FAILURE;
1610 if (type_check (s, 1, BT_REAL) == FAILURE)
1611 return FAILURE;
1613 return SUCCESS;
1618 gfc_check_null (gfc_expr * mold)
1620 symbol_attribute attr;
1622 if (mold == NULL)
1623 return SUCCESS;
1625 if (variable_check (mold, 0) == FAILURE)
1626 return FAILURE;
1628 attr = gfc_variable_attr (mold, NULL);
1630 if (!attr.pointer)
1632 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER",
1633 gfc_current_intrinsic_arg[0],
1634 gfc_current_intrinsic, &mold->where);
1635 return FAILURE;
1638 return SUCCESS;
1643 gfc_check_pack (gfc_expr * array, gfc_expr * mask, gfc_expr * vector)
1645 if (array_check (array, 0) == FAILURE)
1646 return FAILURE;
1648 if (type_check (mask, 1, BT_LOGICAL) == FAILURE)
1649 return FAILURE;
1651 if (mask->rank != 0 && mask->rank != array->rank)
1653 gfc_error ("'%s' argument of '%s' intrinsic at %L must be conformable "
1654 "with '%s' argument", gfc_current_intrinsic_arg[0],
1655 gfc_current_intrinsic, &array->where,
1656 gfc_current_intrinsic_arg[1]);
1657 return FAILURE;
1660 if (vector != NULL)
1662 if (same_type_check (array, 0, vector, 2) == FAILURE)
1663 return FAILURE;
1665 if (rank_check (vector, 2, 1) == FAILURE)
1666 return FAILURE;
1668 /* TODO: More constraints here. */
1671 return SUCCESS;
1676 gfc_check_precision (gfc_expr * x)
1678 if (x->ts.type != BT_REAL && x->ts.type != BT_COMPLEX)
1680 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of type "
1681 "REAL or COMPLEX", gfc_current_intrinsic_arg[0],
1682 gfc_current_intrinsic, &x->where);
1683 return FAILURE;
1686 return SUCCESS;
1691 gfc_check_present (gfc_expr * a)
1693 gfc_symbol *sym;
1695 if (variable_check (a, 0) == FAILURE)
1696 return FAILURE;
1698 sym = a->symtree->n.sym;
1699 if (!sym->attr.dummy)
1701 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a "
1702 "dummy variable", gfc_current_intrinsic_arg[0],
1703 gfc_current_intrinsic, &a->where);
1704 return FAILURE;
1707 if (!sym->attr.optional)
1709 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of "
1710 "an OPTIONAL dummy variable", gfc_current_intrinsic_arg[0],
1711 gfc_current_intrinsic, &a->where);
1712 return FAILURE;
1715 return SUCCESS;
1720 gfc_check_radix (gfc_expr * x)
1722 if (int_or_real_check (x, 0) == FAILURE)
1723 return FAILURE;
1725 return SUCCESS;
1730 gfc_check_range (gfc_expr * x)
1732 if (numeric_check (x, 0) == FAILURE)
1733 return FAILURE;
1735 return SUCCESS;
1739 /* real, float, sngl. */
1741 gfc_check_real (gfc_expr * a, gfc_expr * kind)
1743 if (numeric_check (a, 0) == FAILURE)
1744 return FAILURE;
1746 if (kind_check (kind, 1, BT_REAL) == FAILURE)
1747 return FAILURE;
1749 return SUCCESS;
1754 gfc_check_rename (gfc_expr * path1, gfc_expr * path2)
1756 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1757 return FAILURE;
1759 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1760 return FAILURE;
1762 return SUCCESS;
1767 gfc_check_rename_sub (gfc_expr * path1, gfc_expr * path2, gfc_expr * status)
1769 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1770 return FAILURE;
1772 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1773 return FAILURE;
1775 if (status == NULL)
1776 return SUCCESS;
1778 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1779 return FAILURE;
1781 if (scalar_check (status, 2) == FAILURE)
1782 return FAILURE;
1784 return SUCCESS;
1789 gfc_check_repeat (gfc_expr * x, gfc_expr * y)
1791 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
1792 return FAILURE;
1794 if (scalar_check (x, 0) == FAILURE)
1795 return FAILURE;
1797 if (type_check (y, 0, BT_INTEGER) == FAILURE)
1798 return FAILURE;
1800 if (scalar_check (y, 1) == FAILURE)
1801 return FAILURE;
1803 return SUCCESS;
1808 gfc_check_reshape (gfc_expr * source, gfc_expr * shape,
1809 gfc_expr * pad, gfc_expr * order)
1811 mpz_t size;
1812 int m;
1814 if (array_check (source, 0) == FAILURE)
1815 return FAILURE;
1817 if (rank_check (shape, 1, 1) == FAILURE)
1818 return FAILURE;
1820 if (type_check (shape, 1, BT_INTEGER) == FAILURE)
1821 return FAILURE;
1823 if (gfc_array_size (shape, &size) != SUCCESS)
1825 gfc_error ("'shape' argument of 'reshape' intrinsic at %L must be an "
1826 "array of constant size", &shape->where);
1827 return FAILURE;
1830 m = mpz_cmp_ui (size, GFC_MAX_DIMENSIONS);
1831 mpz_clear (size);
1833 if (m > 0)
1835 gfc_error ("'shape' argument of 'reshape' intrinsic at %L has more "
1836 "than %d elements", &shape->where, GFC_MAX_DIMENSIONS);
1837 return FAILURE;
1840 if (pad != NULL)
1842 if (same_type_check (source, 0, pad, 2) == FAILURE)
1843 return FAILURE;
1844 if (array_check (pad, 2) == FAILURE)
1845 return FAILURE;
1848 if (order != NULL && array_check (order, 3) == FAILURE)
1849 return FAILURE;
1851 return SUCCESS;
1856 gfc_check_scale (gfc_expr * x, gfc_expr * i)
1858 if (type_check (x, 0, BT_REAL) == FAILURE)
1859 return FAILURE;
1861 if (type_check (i, 1, BT_INTEGER) == FAILURE)
1862 return FAILURE;
1864 return SUCCESS;
1869 gfc_check_scan (gfc_expr * x, gfc_expr * y, gfc_expr * z)
1871 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
1872 return FAILURE;
1874 if (type_check (y, 1, BT_CHARACTER) == FAILURE)
1875 return FAILURE;
1877 if (z != NULL && type_check (z, 2, BT_LOGICAL) == FAILURE)
1878 return FAILURE;
1880 if (same_type_check (x, 0, y, 1) == FAILURE)
1881 return FAILURE;
1883 return SUCCESS;
1888 gfc_check_secnds (gfc_expr * r)
1891 if (type_check (r, 0, BT_REAL) == FAILURE)
1892 return FAILURE;
1894 if (kind_value_check (r, 0, 4) == FAILURE)
1895 return FAILURE;
1897 if (scalar_check (r, 0) == FAILURE)
1898 return FAILURE;
1900 return SUCCESS;
1905 gfc_check_selected_int_kind (gfc_expr * r)
1908 if (type_check (r, 0, BT_INTEGER) == FAILURE)
1909 return FAILURE;
1911 if (scalar_check (r, 0) == FAILURE)
1912 return FAILURE;
1914 return SUCCESS;
1919 gfc_check_selected_real_kind (gfc_expr * p, gfc_expr * r)
1921 if (p == NULL && r == NULL)
1923 gfc_error ("Missing arguments to %s intrinsic at %L",
1924 gfc_current_intrinsic, gfc_current_intrinsic_where);
1926 return FAILURE;
1929 if (p != NULL && type_check (p, 0, BT_INTEGER) == FAILURE)
1930 return FAILURE;
1932 if (r != NULL && type_check (r, 1, BT_INTEGER) == FAILURE)
1933 return FAILURE;
1935 return SUCCESS;
1940 gfc_check_set_exponent (gfc_expr * x, gfc_expr * i)
1942 if (type_check (x, 0, BT_REAL) == FAILURE)
1943 return FAILURE;
1945 if (type_check (i, 1, BT_INTEGER) == FAILURE)
1946 return FAILURE;
1948 return SUCCESS;
1953 gfc_check_shape (gfc_expr * source)
1955 gfc_array_ref *ar;
1957 if (source->rank == 0 || source->expr_type != EXPR_VARIABLE)
1958 return SUCCESS;
1960 ar = gfc_find_array_ref (source);
1962 if (ar->as && ar->as->type == AS_ASSUMED_SIZE)
1964 gfc_error ("'source' argument of 'shape' intrinsic at %L must not be "
1965 "an assumed size array", &source->where);
1966 return FAILURE;
1969 return SUCCESS;
1974 gfc_check_sign (gfc_expr * a, gfc_expr * b)
1976 if (int_or_real_check (a, 0) == FAILURE)
1977 return FAILURE;
1979 if (same_type_check (a, 0, b, 1) == FAILURE)
1980 return FAILURE;
1982 return SUCCESS;
1987 gfc_check_size (gfc_expr * array, gfc_expr * dim)
1989 if (array_check (array, 0) == FAILURE)
1990 return FAILURE;
1992 if (dim != NULL)
1994 if (type_check (dim, 1, BT_INTEGER) == FAILURE)
1995 return FAILURE;
1997 if (kind_value_check (dim, 1, gfc_default_integer_kind) == FAILURE)
1998 return FAILURE;
2000 if (dim_rank_check (dim, array, 0) == FAILURE)
2001 return FAILURE;
2004 return SUCCESS;
2009 gfc_check_sleep_sub (gfc_expr * seconds)
2011 if (type_check (seconds, 0, BT_INTEGER) == FAILURE)
2012 return FAILURE;
2014 if (scalar_check (seconds, 0) == FAILURE)
2015 return FAILURE;
2017 return SUCCESS;
2022 gfc_check_spread (gfc_expr * source, gfc_expr * dim, gfc_expr * ncopies)
2024 if (source->rank >= GFC_MAX_DIMENSIONS)
2026 gfc_error ("'%s' argument of '%s' intrinsic at %L must be less "
2027 "than rank %d", gfc_current_intrinsic_arg[0],
2028 gfc_current_intrinsic, &source->where, GFC_MAX_DIMENSIONS);
2030 return FAILURE;
2033 if (dim_check (dim, 1, 0) == FAILURE)
2034 return FAILURE;
2036 if (type_check (ncopies, 2, BT_INTEGER) == FAILURE)
2037 return FAILURE;
2039 if (scalar_check (ncopies, 2) == FAILURE)
2040 return FAILURE;
2042 return SUCCESS;
2046 /* Functions for checking FGETC, FPUTC, FGET and FPUT (subroutines and
2047 functions). */
2049 gfc_check_fgetputc_sub (gfc_expr * unit, gfc_expr * c, gfc_expr * status)
2051 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2052 return FAILURE;
2054 if (scalar_check (unit, 0) == FAILURE)
2055 return FAILURE;
2057 if (type_check (c, 1, BT_CHARACTER) == FAILURE)
2058 return FAILURE;
2060 if (status == NULL)
2061 return SUCCESS;
2063 if (type_check (status, 2, BT_INTEGER) == FAILURE
2064 || kind_value_check (status, 2, gfc_default_integer_kind) == FAILURE
2065 || scalar_check (status, 2) == FAILURE)
2066 return FAILURE;
2068 return SUCCESS;
2073 gfc_check_fgetputc (gfc_expr * unit, gfc_expr * c)
2075 return gfc_check_fgetputc_sub (unit, c, NULL);
2080 gfc_check_fgetput_sub (gfc_expr * c, gfc_expr * status)
2082 if (type_check (c, 0, BT_CHARACTER) == FAILURE)
2083 return FAILURE;
2085 if (status == NULL)
2086 return SUCCESS;
2088 if (type_check (status, 1, BT_INTEGER) == FAILURE
2089 || kind_value_check (status, 1, gfc_default_integer_kind) == FAILURE
2090 || scalar_check (status, 1) == FAILURE)
2091 return FAILURE;
2093 return SUCCESS;
2098 gfc_check_fgetput (gfc_expr * c)
2100 return gfc_check_fgetput_sub (c, NULL);
2105 gfc_check_fstat (gfc_expr * unit, gfc_expr * array)
2107 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2108 return FAILURE;
2110 if (scalar_check (unit, 0) == FAILURE)
2111 return FAILURE;
2113 if (type_check (array, 1, BT_INTEGER) == FAILURE
2114 || kind_value_check (unit, 0, gfc_default_integer_kind) == FAILURE)
2115 return FAILURE;
2117 if (array_check (array, 1) == FAILURE)
2118 return FAILURE;
2120 return SUCCESS;
2125 gfc_check_fstat_sub (gfc_expr * unit, gfc_expr * array, gfc_expr * status)
2127 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2128 return FAILURE;
2130 if (scalar_check (unit, 0) == FAILURE)
2131 return FAILURE;
2133 if (type_check (array, 1, BT_INTEGER) == FAILURE
2134 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
2135 return FAILURE;
2137 if (array_check (array, 1) == FAILURE)
2138 return FAILURE;
2140 if (status == NULL)
2141 return SUCCESS;
2143 if (type_check (status, 2, BT_INTEGER) == FAILURE
2144 || kind_value_check (status, 2, gfc_default_integer_kind) == FAILURE)
2145 return FAILURE;
2147 if (scalar_check (status, 2) == FAILURE)
2148 return FAILURE;
2150 return SUCCESS;
2155 gfc_check_ftell (gfc_expr * unit)
2157 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2158 return FAILURE;
2160 if (scalar_check (unit, 0) == FAILURE)
2161 return FAILURE;
2163 return SUCCESS;
2168 gfc_check_ftell_sub (gfc_expr * unit, gfc_expr * offset)
2170 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2171 return FAILURE;
2173 if (scalar_check (unit, 0) == FAILURE)
2174 return FAILURE;
2176 if (type_check (offset, 1, BT_INTEGER) == FAILURE)
2177 return FAILURE;
2179 if (scalar_check (offset, 1) == FAILURE)
2180 return FAILURE;
2182 return SUCCESS;
2187 gfc_check_stat (gfc_expr * name, gfc_expr * array)
2189 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
2190 return FAILURE;
2192 if (type_check (array, 1, BT_INTEGER) == FAILURE
2193 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
2194 return FAILURE;
2196 if (array_check (array, 1) == FAILURE)
2197 return FAILURE;
2199 return SUCCESS;
2204 gfc_check_stat_sub (gfc_expr * name, gfc_expr * array, gfc_expr * status)
2206 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
2207 return FAILURE;
2209 if (type_check (array, 1, BT_INTEGER) == FAILURE
2210 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
2211 return FAILURE;
2213 if (array_check (array, 1) == FAILURE)
2214 return FAILURE;
2216 if (status == NULL)
2217 return SUCCESS;
2219 if (type_check (status, 2, BT_INTEGER) == FAILURE
2220 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
2221 return FAILURE;
2223 if (scalar_check (status, 2) == FAILURE)
2224 return FAILURE;
2226 return SUCCESS;
2231 gfc_check_transfer (gfc_expr * source ATTRIBUTE_UNUSED,
2232 gfc_expr * mold ATTRIBUTE_UNUSED,
2233 gfc_expr * size)
2235 if (size != NULL)
2237 if (type_check (size, 2, BT_INTEGER) == FAILURE)
2238 return FAILURE;
2240 if (scalar_check (size, 2) == FAILURE)
2241 return FAILURE;
2243 if (nonoptional_check (size, 2) == FAILURE)
2244 return FAILURE;
2247 return SUCCESS;
2252 gfc_check_transpose (gfc_expr * matrix)
2254 if (rank_check (matrix, 0, 2) == FAILURE)
2255 return FAILURE;
2257 return SUCCESS;
2262 gfc_check_ubound (gfc_expr * array, gfc_expr * dim)
2264 if (array_check (array, 0) == FAILURE)
2265 return FAILURE;
2267 if (dim != NULL)
2269 if (dim_check (dim, 1, 1) == FAILURE)
2270 return FAILURE;
2272 if (dim_rank_check (dim, array, 0) == FAILURE)
2273 return FAILURE;
2276 return SUCCESS;
2281 gfc_check_unpack (gfc_expr * vector, gfc_expr * mask, gfc_expr * field)
2283 if (rank_check (vector, 0, 1) == FAILURE)
2284 return FAILURE;
2286 if (array_check (mask, 1) == FAILURE)
2287 return FAILURE;
2289 if (type_check (mask, 1, BT_LOGICAL) == FAILURE)
2290 return FAILURE;
2292 if (same_type_check (vector, 0, field, 2) == FAILURE)
2293 return FAILURE;
2295 return SUCCESS;
2300 gfc_check_verify (gfc_expr * x, gfc_expr * y, gfc_expr * z)
2302 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
2303 return FAILURE;
2305 if (same_type_check (x, 0, y, 1) == FAILURE)
2306 return FAILURE;
2308 if (z != NULL && type_check (z, 2, BT_LOGICAL) == FAILURE)
2309 return FAILURE;
2311 return SUCCESS;
2316 gfc_check_trim (gfc_expr * x)
2318 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
2319 return FAILURE;
2321 if (scalar_check (x, 0) == FAILURE)
2322 return FAILURE;
2324 return SUCCESS;
2329 gfc_check_ttynam (gfc_expr * unit)
2331 if (scalar_check (unit, 0) == FAILURE)
2332 return FAILURE;
2334 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2335 return FAILURE;
2337 return SUCCESS;
2341 /* Common check function for the half a dozen intrinsics that have a
2342 single real argument. */
2345 gfc_check_x (gfc_expr * x)
2347 if (type_check (x, 0, BT_REAL) == FAILURE)
2348 return FAILURE;
2350 return SUCCESS;
2354 /************* Check functions for intrinsic subroutines *************/
2357 gfc_check_cpu_time (gfc_expr * time)
2359 if (scalar_check (time, 0) == FAILURE)
2360 return FAILURE;
2362 if (type_check (time, 0, BT_REAL) == FAILURE)
2363 return FAILURE;
2365 if (variable_check (time, 0) == FAILURE)
2366 return FAILURE;
2368 return SUCCESS;
2373 gfc_check_date_and_time (gfc_expr * date, gfc_expr * time,
2374 gfc_expr * zone, gfc_expr * values)
2376 if (date != NULL)
2378 if (type_check (date, 0, BT_CHARACTER) == FAILURE)
2379 return FAILURE;
2380 if (scalar_check (date, 0) == FAILURE)
2381 return FAILURE;
2382 if (variable_check (date, 0) == FAILURE)
2383 return FAILURE;
2386 if (time != NULL)
2388 if (type_check (time, 1, BT_CHARACTER) == FAILURE)
2389 return FAILURE;
2390 if (scalar_check (time, 1) == FAILURE)
2391 return FAILURE;
2392 if (variable_check (time, 1) == FAILURE)
2393 return FAILURE;
2396 if (zone != NULL)
2398 if (type_check (zone, 2, BT_CHARACTER) == FAILURE)
2399 return FAILURE;
2400 if (scalar_check (zone, 2) == FAILURE)
2401 return FAILURE;
2402 if (variable_check (zone, 2) == FAILURE)
2403 return FAILURE;
2406 if (values != NULL)
2408 if (type_check (values, 3, BT_INTEGER) == FAILURE)
2409 return FAILURE;
2410 if (array_check (values, 3) == FAILURE)
2411 return FAILURE;
2412 if (rank_check (values, 3, 1) == FAILURE)
2413 return FAILURE;
2414 if (variable_check (values, 3) == FAILURE)
2415 return FAILURE;
2418 return SUCCESS;
2423 gfc_check_mvbits (gfc_expr * from, gfc_expr * frompos, gfc_expr * len,
2424 gfc_expr * to, gfc_expr * topos)
2426 if (type_check (from, 0, BT_INTEGER) == FAILURE)
2427 return FAILURE;
2429 if (type_check (frompos, 1, BT_INTEGER) == FAILURE)
2430 return FAILURE;
2432 if (type_check (len, 2, BT_INTEGER) == FAILURE)
2433 return FAILURE;
2435 if (same_type_check (from, 0, to, 3) == FAILURE)
2436 return FAILURE;
2438 if (variable_check (to, 3) == FAILURE)
2439 return FAILURE;
2441 if (type_check (topos, 4, BT_INTEGER) == FAILURE)
2442 return FAILURE;
2444 return SUCCESS;
2449 gfc_check_random_number (gfc_expr * harvest)
2451 if (type_check (harvest, 0, BT_REAL) == FAILURE)
2452 return FAILURE;
2454 if (variable_check (harvest, 0) == FAILURE)
2455 return FAILURE;
2457 return SUCCESS;
2462 gfc_check_random_seed (gfc_expr * size, gfc_expr * put, gfc_expr * get)
2464 if (size != NULL)
2466 if (scalar_check (size, 0) == FAILURE)
2467 return FAILURE;
2469 if (type_check (size, 0, BT_INTEGER) == FAILURE)
2470 return FAILURE;
2472 if (variable_check (size, 0) == FAILURE)
2473 return FAILURE;
2475 if (kind_value_check (size, 0, gfc_default_integer_kind) == FAILURE)
2476 return FAILURE;
2479 if (put != NULL)
2482 if (size != NULL)
2483 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic,
2484 &put->where);
2486 if (array_check (put, 1) == FAILURE)
2487 return FAILURE;
2489 if (rank_check (put, 1, 1) == FAILURE)
2490 return FAILURE;
2492 if (type_check (put, 1, BT_INTEGER) == FAILURE)
2493 return FAILURE;
2495 if (kind_value_check (put, 1, gfc_default_integer_kind) == FAILURE)
2496 return FAILURE;
2499 if (get != NULL)
2502 if (size != NULL || put != NULL)
2503 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic,
2504 &get->where);
2506 if (array_check (get, 2) == FAILURE)
2507 return FAILURE;
2509 if (rank_check (get, 2, 1) == FAILURE)
2510 return FAILURE;
2512 if (type_check (get, 2, BT_INTEGER) == FAILURE)
2513 return FAILURE;
2515 if (variable_check (get, 2) == FAILURE)
2516 return FAILURE;
2518 if (kind_value_check (get, 2, gfc_default_integer_kind) == FAILURE)
2519 return FAILURE;
2522 return SUCCESS;
2526 gfc_check_second_sub (gfc_expr * time)
2528 if (scalar_check (time, 0) == FAILURE)
2529 return FAILURE;
2531 if (type_check (time, 0, BT_REAL) == FAILURE)
2532 return FAILURE;
2534 if (kind_value_check(time, 0, 4) == FAILURE)
2535 return FAILURE;
2537 return SUCCESS;
2541 /* The arguments of SYSTEM_CLOCK are scalar, integer variables. Note,
2542 count, count_rate, and count_max are all optional arguments */
2545 gfc_check_system_clock (gfc_expr * count, gfc_expr * count_rate,
2546 gfc_expr * count_max)
2548 if (count != NULL)
2550 if (scalar_check (count, 0) == FAILURE)
2551 return FAILURE;
2553 if (type_check (count, 0, BT_INTEGER) == FAILURE)
2554 return FAILURE;
2556 if (variable_check (count, 0) == FAILURE)
2557 return FAILURE;
2560 if (count_rate != NULL)
2562 if (scalar_check (count_rate, 1) == FAILURE)
2563 return FAILURE;
2565 if (type_check (count_rate, 1, BT_INTEGER) == FAILURE)
2566 return FAILURE;
2568 if (variable_check (count_rate, 1) == FAILURE)
2569 return FAILURE;
2571 if (count != NULL
2572 && same_type_check (count, 0, count_rate, 1) == FAILURE)
2573 return FAILURE;
2577 if (count_max != NULL)
2579 if (scalar_check (count_max, 2) == FAILURE)
2580 return FAILURE;
2582 if (type_check (count_max, 2, BT_INTEGER) == FAILURE)
2583 return FAILURE;
2585 if (variable_check (count_max, 2) == FAILURE)
2586 return FAILURE;
2588 if (count != NULL
2589 && same_type_check (count, 0, count_max, 2) == FAILURE)
2590 return FAILURE;
2592 if (count_rate != NULL
2593 && same_type_check (count_rate, 1, count_max, 2) == FAILURE)
2594 return FAILURE;
2597 return SUCCESS;
2601 gfc_check_irand (gfc_expr * x)
2603 if (x == NULL)
2604 return SUCCESS;
2606 if (scalar_check (x, 0) == FAILURE)
2607 return FAILURE;
2609 if (type_check (x, 0, BT_INTEGER) == FAILURE)
2610 return FAILURE;
2612 if (kind_value_check(x, 0, 4) == FAILURE)
2613 return FAILURE;
2615 return SUCCESS;
2620 gfc_check_alarm_sub (gfc_expr * seconds, gfc_expr * handler, gfc_expr * status)
2622 if (scalar_check (seconds, 0) == FAILURE)
2623 return FAILURE;
2625 if (type_check (seconds, 0, BT_INTEGER) == FAILURE)
2626 return FAILURE;
2628 if (handler->ts.type != BT_INTEGER && handler->ts.type != BT_PROCEDURE)
2630 gfc_error (
2631 "'%s' argument of '%s' intrinsic at %L must be INTEGER or PROCEDURE",
2632 gfc_current_intrinsic_arg[1], gfc_current_intrinsic, &handler->where);
2633 return FAILURE;
2636 if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE)
2637 return FAILURE;
2639 if (status == NULL)
2640 return SUCCESS;
2642 if (scalar_check (status, 2) == FAILURE)
2643 return FAILURE;
2645 if (type_check (status, 2, BT_INTEGER) == FAILURE)
2646 return FAILURE;
2648 return SUCCESS;
2653 gfc_check_rand (gfc_expr * x)
2655 if (x == NULL)
2656 return SUCCESS;
2658 if (scalar_check (x, 0) == FAILURE)
2659 return FAILURE;
2661 if (type_check (x, 0, BT_INTEGER) == FAILURE)
2662 return FAILURE;
2664 if (kind_value_check(x, 0, 4) == FAILURE)
2665 return FAILURE;
2667 return SUCCESS;
2671 gfc_check_srand (gfc_expr * x)
2673 if (scalar_check (x, 0) == FAILURE)
2674 return FAILURE;
2676 if (type_check (x, 0, BT_INTEGER) == FAILURE)
2677 return FAILURE;
2679 if (kind_value_check(x, 0, 4) == FAILURE)
2680 return FAILURE;
2682 return SUCCESS;
2686 gfc_check_ctime_sub (gfc_expr * time, gfc_expr * result)
2688 if (scalar_check (time, 0) == FAILURE)
2689 return FAILURE;
2691 if (type_check (time, 0, BT_INTEGER) == FAILURE)
2692 return FAILURE;
2694 if (type_check (result, 1, BT_CHARACTER) == FAILURE)
2695 return FAILURE;
2697 return SUCCESS;
2701 gfc_check_etime (gfc_expr * x)
2703 if (array_check (x, 0) == FAILURE)
2704 return FAILURE;
2706 if (rank_check (x, 0, 1) == FAILURE)
2707 return FAILURE;
2709 if (variable_check (x, 0) == FAILURE)
2710 return FAILURE;
2712 if (type_check (x, 0, BT_REAL) == FAILURE)
2713 return FAILURE;
2715 if (kind_value_check(x, 0, 4) == FAILURE)
2716 return FAILURE;
2718 return SUCCESS;
2722 gfc_check_etime_sub (gfc_expr * values, gfc_expr * time)
2724 if (array_check (values, 0) == FAILURE)
2725 return FAILURE;
2727 if (rank_check (values, 0, 1) == FAILURE)
2728 return FAILURE;
2730 if (variable_check (values, 0) == FAILURE)
2731 return FAILURE;
2733 if (type_check (values, 0, BT_REAL) == FAILURE)
2734 return FAILURE;
2736 if (kind_value_check(values, 0, 4) == FAILURE)
2737 return FAILURE;
2739 if (scalar_check (time, 1) == FAILURE)
2740 return FAILURE;
2742 if (type_check (time, 1, BT_REAL) == FAILURE)
2743 return FAILURE;
2745 if (kind_value_check(time, 1, 4) == FAILURE)
2746 return FAILURE;
2748 return SUCCESS;
2753 gfc_check_fdate_sub (gfc_expr * date)
2755 if (type_check (date, 0, BT_CHARACTER) == FAILURE)
2756 return FAILURE;
2758 return SUCCESS;
2763 gfc_check_gerror (gfc_expr * msg)
2765 if (type_check (msg, 0, BT_CHARACTER) == FAILURE)
2766 return FAILURE;
2768 return SUCCESS;
2773 gfc_check_getcwd_sub (gfc_expr * cwd, gfc_expr * status)
2775 if (type_check (cwd, 0, BT_CHARACTER) == FAILURE)
2776 return FAILURE;
2778 if (status == NULL)
2779 return SUCCESS;
2781 if (scalar_check (status, 1) == FAILURE)
2782 return FAILURE;
2784 if (type_check (status, 1, BT_INTEGER) == FAILURE)
2785 return FAILURE;
2787 return SUCCESS;
2792 gfc_check_getlog (gfc_expr * msg)
2794 if (type_check (msg, 0, BT_CHARACTER) == FAILURE)
2795 return FAILURE;
2797 return SUCCESS;
2802 gfc_check_exit (gfc_expr * status)
2804 if (status == NULL)
2805 return SUCCESS;
2807 if (type_check (status, 0, BT_INTEGER) == FAILURE)
2808 return FAILURE;
2810 if (scalar_check (status, 0) == FAILURE)
2811 return FAILURE;
2813 return SUCCESS;
2818 gfc_check_flush (gfc_expr * unit)
2820 if (unit == NULL)
2821 return SUCCESS;
2823 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2824 return FAILURE;
2826 if (scalar_check (unit, 0) == FAILURE)
2827 return FAILURE;
2829 return SUCCESS;
2834 gfc_check_free (gfc_expr * i)
2836 if (type_check (i, 0, BT_INTEGER) == FAILURE)
2837 return FAILURE;
2839 if (scalar_check (i, 0) == FAILURE)
2840 return FAILURE;
2842 return SUCCESS;
2847 gfc_check_hostnm (gfc_expr * name)
2849 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
2850 return FAILURE;
2852 return SUCCESS;
2857 gfc_check_hostnm_sub (gfc_expr * name, gfc_expr * status)
2859 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
2860 return FAILURE;
2862 if (status == NULL)
2863 return SUCCESS;
2865 if (scalar_check (status, 1) == FAILURE)
2866 return FAILURE;
2868 if (type_check (status, 1, BT_INTEGER) == FAILURE)
2869 return FAILURE;
2871 return SUCCESS;
2876 gfc_check_ttynam_sub (gfc_expr * unit, gfc_expr * name)
2878 if (scalar_check (unit, 0) == FAILURE)
2879 return FAILURE;
2881 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2882 return FAILURE;
2884 if (type_check (name, 1, BT_CHARACTER) == FAILURE)
2885 return FAILURE;
2887 return SUCCESS;
2892 gfc_check_isatty (gfc_expr * unit)
2894 if (unit == NULL)
2895 return FAILURE;
2897 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2898 return FAILURE;
2900 if (scalar_check (unit, 0) == FAILURE)
2901 return FAILURE;
2903 return SUCCESS;
2908 gfc_check_perror (gfc_expr * string)
2910 if (type_check (string, 0, BT_CHARACTER) == FAILURE)
2911 return FAILURE;
2913 return SUCCESS;
2918 gfc_check_umask (gfc_expr * mask)
2920 if (type_check (mask, 0, BT_INTEGER) == FAILURE)
2921 return FAILURE;
2923 if (scalar_check (mask, 0) == FAILURE)
2924 return FAILURE;
2926 return SUCCESS;
2931 gfc_check_umask_sub (gfc_expr * mask, gfc_expr * old)
2933 if (type_check (mask, 0, BT_INTEGER) == FAILURE)
2934 return FAILURE;
2936 if (scalar_check (mask, 0) == FAILURE)
2937 return FAILURE;
2939 if (old == NULL)
2940 return SUCCESS;
2942 if (scalar_check (old, 1) == FAILURE)
2943 return FAILURE;
2945 if (type_check (old, 1, BT_INTEGER) == FAILURE)
2946 return FAILURE;
2948 return SUCCESS;
2953 gfc_check_unlink (gfc_expr * name)
2955 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
2956 return FAILURE;
2958 return SUCCESS;
2963 gfc_check_unlink_sub (gfc_expr * name, gfc_expr * status)
2965 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
2966 return FAILURE;
2968 if (status == NULL)
2969 return SUCCESS;
2971 if (scalar_check (status, 1) == FAILURE)
2972 return FAILURE;
2974 if (type_check (status, 1, BT_INTEGER) == FAILURE)
2975 return FAILURE;
2977 return SUCCESS;
2982 gfc_check_signal (gfc_expr * number, gfc_expr * handler)
2984 if (scalar_check (number, 0) == FAILURE)
2985 return FAILURE;
2987 if (type_check (number, 0, BT_INTEGER) == FAILURE)
2988 return FAILURE;
2990 if (handler->ts.type != BT_INTEGER && handler->ts.type != BT_PROCEDURE)
2992 gfc_error (
2993 "'%s' argument of '%s' intrinsic at %L must be INTEGER or PROCEDURE",
2994 gfc_current_intrinsic_arg[1], gfc_current_intrinsic, &handler->where);
2995 return FAILURE;
2998 if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE)
2999 return FAILURE;
3001 return SUCCESS;
3006 gfc_check_signal_sub (gfc_expr * number, gfc_expr * handler, gfc_expr * status)
3008 if (scalar_check (number, 0) == FAILURE)
3009 return FAILURE;
3011 if (type_check (number, 0, BT_INTEGER) == FAILURE)
3012 return FAILURE;
3014 if (handler->ts.type != BT_INTEGER && handler->ts.type != BT_PROCEDURE)
3016 gfc_error (
3017 "'%s' argument of '%s' intrinsic at %L must be INTEGER or PROCEDURE",
3018 gfc_current_intrinsic_arg[1], gfc_current_intrinsic, &handler->where);
3019 return FAILURE;
3022 if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE)
3023 return FAILURE;
3025 if (status == NULL)
3026 return SUCCESS;
3028 if (type_check (status, 2, BT_INTEGER) == FAILURE)
3029 return FAILURE;
3031 if (scalar_check (status, 2) == FAILURE)
3032 return FAILURE;
3034 return SUCCESS;
3039 gfc_check_system_sub (gfc_expr * cmd, gfc_expr * status)
3041 if (type_check (cmd, 0, BT_CHARACTER) == FAILURE)
3042 return FAILURE;
3044 if (scalar_check (status, 1) == FAILURE)
3045 return FAILURE;
3047 if (type_check (status, 1, BT_INTEGER) == FAILURE)
3048 return FAILURE;
3050 if (kind_value_check (status, 1, gfc_default_integer_kind) == FAILURE)
3051 return FAILURE;
3053 return SUCCESS;
3057 /* This is used for the GNU intrinsics AND, OR and XOR. */
3059 gfc_check_and (gfc_expr * i, gfc_expr * j)
3061 if (i->ts.type != BT_INTEGER && i->ts.type != BT_LOGICAL)
3063 gfc_error (
3064 "'%s' argument of '%s' intrinsic at %L must be INTEGER or LOGICAL",
3065 gfc_current_intrinsic_arg[0], gfc_current_intrinsic, &i->where);
3066 return FAILURE;
3069 if (j->ts.type != BT_INTEGER && j->ts.type != BT_LOGICAL)
3071 gfc_error (
3072 "'%s' argument of '%s' intrinsic at %L must be INTEGER or LOGICAL",
3073 gfc_current_intrinsic_arg[1], gfc_current_intrinsic, &j->where);
3074 return FAILURE;
3077 if (i->ts.type != j->ts.type)
3079 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
3080 "have the same type", gfc_current_intrinsic_arg[0],
3081 gfc_current_intrinsic_arg[1], gfc_current_intrinsic,
3082 &j->where);
3083 return FAILURE;
3086 if (scalar_check (i, 0) == FAILURE)
3087 return FAILURE;
3089 if (scalar_check (j, 1) == FAILURE)
3090 return FAILURE;
3092 return SUCCESS;