* function.c (expand_function_end): If current_function_calls_alloca,
[official-gcc.git] / gcc / fortran / check.c
blob7ce9da6878ff1e98bc74b1404eb02c9ebc0a94cd
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, 59 Temple Place - Suite 330, Boston, MA
20 02111-1307, 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 /* The fundamental complaint function of this source file. This
37 function can be called in all kinds of ways. */
39 static void
40 must_be (gfc_expr * e, int n, const char *thing)
42 gfc_error ("'%s' argument of '%s' intrinsic at %L must be %s",
43 gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &e->where,
44 thing);
48 /* Check the type of an expression. */
50 static try
51 type_check (gfc_expr * e, int n, bt type)
53 if (e->ts.type == type)
54 return SUCCESS;
56 must_be (e, n, gfc_basic_typename (type));
58 return FAILURE;
62 /* Check that the expression is a numeric type. */
64 static try
65 numeric_check (gfc_expr * e, int n)
67 if (gfc_numeric_ts (&e->ts))
68 return SUCCESS;
70 must_be (e, n, "a numeric type");
72 return FAILURE;
76 /* Check that an expression is integer or real. */
78 static try
79 int_or_real_check (gfc_expr * e, int n)
81 if (e->ts.type != BT_INTEGER && e->ts.type != BT_REAL)
83 must_be (e, n, "INTEGER or REAL");
84 return FAILURE;
87 return SUCCESS;
91 /* Check that the expression is an optional constant integer
92 and that it specifies a valid kind for that type. */
94 static try
95 kind_check (gfc_expr * k, int n, bt type)
97 int kind;
99 if (k == NULL)
100 return SUCCESS;
102 if (type_check (k, n, BT_INTEGER) == FAILURE)
103 return FAILURE;
105 if (k->expr_type != EXPR_CONSTANT)
107 must_be (k, n, "a constant");
108 return FAILURE;
111 if (gfc_extract_int (k, &kind) != NULL
112 || gfc_validate_kind (type, kind, true) < 0)
114 gfc_error ("Invalid kind for %s at %L", gfc_basic_typename (type),
115 &k->where);
116 return FAILURE;
119 return SUCCESS;
123 /* Make sure the expression is a double precision real. */
125 static try
126 double_check (gfc_expr * d, int n)
128 if (type_check (d, n, BT_REAL) == FAILURE)
129 return FAILURE;
131 if (d->ts.kind != gfc_default_double_kind)
133 must_be (d, n, "double precision");
134 return FAILURE;
137 return SUCCESS;
141 /* Make sure the expression is a logical array. */
143 static try
144 logical_array_check (gfc_expr * array, int n)
146 if (array->ts.type != BT_LOGICAL || array->rank == 0)
148 must_be (array, n, "a logical array");
149 return FAILURE;
152 return SUCCESS;
156 /* Make sure an expression is an array. */
158 static try
159 array_check (gfc_expr * e, int n)
161 if (e->rank != 0)
162 return SUCCESS;
164 must_be (e, n, "an array");
166 return FAILURE;
170 /* Make sure an expression is a scalar. */
172 static try
173 scalar_check (gfc_expr * e, int n)
175 if (e->rank == 0)
176 return SUCCESS;
178 must_be (e, n, "a scalar");
180 return FAILURE;
184 /* Make sure two expression have the same type. */
186 static try
187 same_type_check (gfc_expr * e, int n, gfc_expr * f, int m)
189 char message[100];
191 if (gfc_compare_types (&e->ts, &f->ts))
192 return SUCCESS;
194 sprintf (message, "the same type and kind as '%s'",
195 gfc_current_intrinsic_arg[n]);
197 must_be (f, m, message);
199 return FAILURE;
203 /* Make sure that an expression has a certain (nonzero) rank. */
205 static try
206 rank_check (gfc_expr * e, int n, int rank)
208 char message[100];
210 if (e->rank == rank)
211 return SUCCESS;
213 sprintf (message, "of rank %d", rank);
215 must_be (e, n, message);
217 return FAILURE;
221 /* Make sure a variable expression is not an optional dummy argument. */
223 static try
224 nonoptional_check (gfc_expr * e, int n)
226 if (e->expr_type == EXPR_VARIABLE && e->symtree->n.sym->attr.optional)
228 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be OPTIONAL",
229 gfc_current_intrinsic_arg[n], gfc_current_intrinsic,
230 &e->where);
234 /* TODO: Recursive check on nonoptional variables? */
236 return SUCCESS;
240 /* Check that an expression has a particular kind. */
242 static try
243 kind_value_check (gfc_expr * e, int n, int k)
245 char message[100];
247 if (e->ts.kind == k)
248 return SUCCESS;
250 sprintf (message, "of kind %d", k);
252 must_be (e, n, message);
253 return FAILURE;
257 /* Make sure an expression is a variable. */
259 static try
260 variable_check (gfc_expr * e, int n)
262 if ((e->expr_type == EXPR_VARIABLE
263 && e->symtree->n.sym->attr.flavor != FL_PARAMETER)
264 || (e->expr_type == EXPR_FUNCTION
265 && e->symtree->n.sym->result == e->symtree->n.sym))
266 return SUCCESS;
268 if (e->expr_type == EXPR_VARIABLE
269 && e->symtree->n.sym->attr.intent == INTENT_IN)
271 gfc_error ("'%s' argument of '%s' intrinsic at %L cannot be INTENT(IN)",
272 gfc_current_intrinsic_arg[n], gfc_current_intrinsic,
273 &e->where);
274 return FAILURE;
277 must_be (e, n, "a variable");
279 return FAILURE;
283 /* Check the common DIM parameter for correctness. */
285 static try
286 dim_check (gfc_expr * dim, int n, int optional)
288 if (optional)
290 if (dim == NULL)
291 return SUCCESS;
293 if (nonoptional_check (dim, n) == FAILURE)
294 return FAILURE;
296 return SUCCESS;
299 if (dim == NULL)
301 gfc_error ("Missing DIM parameter in intrinsic '%s' at %L",
302 gfc_current_intrinsic, gfc_current_intrinsic_where);
303 return FAILURE;
306 if (type_check (dim, n, BT_INTEGER) == FAILURE)
307 return FAILURE;
309 if (scalar_check (dim, n) == FAILURE)
310 return FAILURE;
312 return SUCCESS;
316 /* If a DIM parameter is a constant, make sure that it is greater than
317 zero and less than or equal to the rank of the given array. If
318 allow_assumed is zero then dim must be less than the rank of the array
319 for assumed size arrays. */
321 static try
322 dim_rank_check (gfc_expr * dim, gfc_expr * array, int allow_assumed)
324 gfc_array_ref *ar;
325 int rank;
327 if (dim->expr_type != EXPR_CONSTANT || array->expr_type != EXPR_VARIABLE)
328 return SUCCESS;
330 ar = gfc_find_array_ref (array);
331 rank = array->rank;
332 if (ar->as->type == AS_ASSUMED_SIZE && !allow_assumed)
333 rank--;
335 if (mpz_cmp_ui (dim->value.integer, 1) < 0
336 || mpz_cmp_ui (dim->value.integer, rank) > 0)
338 gfc_error ("'dim' argument of '%s' intrinsic at %L is not a valid "
339 "dimension index", gfc_current_intrinsic, &dim->where);
341 return FAILURE;
344 return SUCCESS;
348 /***** Check functions *****/
350 /* Check subroutine suitable for intrinsics taking a real argument and
351 a kind argument for the result. */
353 static try
354 check_a_kind (gfc_expr * a, gfc_expr * kind, bt type)
356 if (type_check (a, 0, BT_REAL) == FAILURE)
357 return FAILURE;
358 if (kind_check (kind, 1, type) == FAILURE)
359 return FAILURE;
361 return SUCCESS;
364 /* Check subroutine suitable for ceiling, floor and nint. */
367 gfc_check_a_ikind (gfc_expr * a, gfc_expr * kind)
369 return check_a_kind (a, kind, BT_INTEGER);
372 /* Check subroutine suitable for aint, anint. */
375 gfc_check_a_xkind (gfc_expr * a, gfc_expr * kind)
377 return check_a_kind (a, kind, BT_REAL);
381 gfc_check_abs (gfc_expr * a)
383 if (numeric_check (a, 0) == FAILURE)
384 return FAILURE;
386 return SUCCESS;
391 gfc_check_all_any (gfc_expr * mask, gfc_expr * dim)
393 if (logical_array_check (mask, 0) == FAILURE)
394 return FAILURE;
396 if (dim_check (dim, 1, 1) == FAILURE)
397 return FAILURE;
399 return SUCCESS;
404 gfc_check_allocated (gfc_expr * array)
406 if (variable_check (array, 0) == FAILURE)
407 return FAILURE;
409 if (array_check (array, 0) == FAILURE)
410 return FAILURE;
412 if (!array->symtree->n.sym->attr.allocatable)
414 must_be (array, 0, "ALLOCATABLE");
415 return FAILURE;
418 return SUCCESS;
422 /* Common check function where the first argument must be real or
423 integer and the second argument must be the same as the first. */
426 gfc_check_a_p (gfc_expr * a, gfc_expr * p)
428 if (int_or_real_check (a, 0) == FAILURE)
429 return FAILURE;
431 if (same_type_check (a, 0, p, 1) == FAILURE)
432 return FAILURE;
434 return SUCCESS;
439 gfc_check_associated (gfc_expr * pointer, gfc_expr * target)
441 symbol_attribute attr;
442 int i;
443 try t;
445 if (variable_check (pointer, 0) == FAILURE)
446 return FAILURE;
448 attr = gfc_variable_attr (pointer, NULL);
449 if (!attr.pointer)
451 must_be (pointer, 0, "a POINTER");
452 return FAILURE;
455 if (target == NULL)
456 return SUCCESS;
458 /* Target argument is optional. */
459 if (target->expr_type == EXPR_NULL)
461 gfc_error ("NULL pointer at %L is not permitted as actual argument "
462 "of '%s' intrinsic function",
463 &target->where, gfc_current_intrinsic);
464 return FAILURE;
467 attr = gfc_variable_attr (target, NULL);
468 if (!attr.pointer && !attr.target)
470 must_be (target, 1, "a POINTER or a TARGET");
471 return FAILURE;
474 t = SUCCESS;
475 if (same_type_check (pointer, 0, target, 1) == FAILURE)
476 t = FAILURE;
477 if (rank_check (target, 0, pointer->rank) == FAILURE)
478 t = FAILURE;
479 if (target->rank > 0)
481 for (i = 0; i < target->rank; i++)
482 if (target->ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
484 gfc_error ("Array section with a vector subscript at %L shall not "
485 "be the target of an pointer",
486 &target->where);
487 t = FAILURE;
488 break;
491 return t;
496 gfc_check_atan2 (gfc_expr * y, gfc_expr * x)
498 if (type_check (y, 0, BT_REAL) == FAILURE)
499 return FAILURE;
500 if (same_type_check (y, 0, x, 1) == FAILURE)
501 return FAILURE;
503 return SUCCESS;
507 /* BESJN and BESYN functions. */
510 gfc_check_besn (gfc_expr * n, gfc_expr * x)
512 if (scalar_check (n, 0) == FAILURE)
513 return FAILURE;
515 if (type_check (n, 0, BT_INTEGER) == FAILURE)
516 return FAILURE;
518 if (scalar_check (x, 1) == FAILURE)
519 return FAILURE;
521 if (type_check (x, 1, BT_REAL) == FAILURE)
522 return FAILURE;
524 return SUCCESS;
529 gfc_check_btest (gfc_expr * i, gfc_expr * pos)
531 if (type_check (i, 0, BT_INTEGER) == FAILURE)
532 return FAILURE;
533 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
534 return FAILURE;
536 return SUCCESS;
541 gfc_check_char (gfc_expr * i, gfc_expr * kind)
543 if (type_check (i, 0, BT_INTEGER) == FAILURE)
544 return FAILURE;
545 if (kind_check (kind, 1, BT_CHARACTER) == FAILURE)
546 return FAILURE;
548 return SUCCESS;
553 gfc_check_cmplx (gfc_expr * x, gfc_expr * y, gfc_expr * kind)
555 if (numeric_check (x, 0) == FAILURE)
556 return FAILURE;
558 if (y != NULL)
560 if (numeric_check (y, 1) == FAILURE)
561 return FAILURE;
563 if (x->ts.type == BT_COMPLEX)
565 must_be (y, 1, "not be present if 'x' is COMPLEX");
566 return FAILURE;
570 if (kind_check (kind, 2, BT_COMPLEX) == FAILURE)
571 return FAILURE;
573 return SUCCESS;
578 gfc_check_count (gfc_expr * mask, gfc_expr * dim)
580 if (logical_array_check (mask, 0) == FAILURE)
581 return FAILURE;
582 if (dim_check (dim, 1, 1) == FAILURE)
583 return FAILURE;
585 return SUCCESS;
590 gfc_check_cshift (gfc_expr * array, gfc_expr * shift, gfc_expr * dim)
592 if (array_check (array, 0) == FAILURE)
593 return FAILURE;
595 if (array->rank == 1)
597 if (scalar_check (shift, 1) == FAILURE)
598 return FAILURE;
600 else
602 /* TODO: more requirements on shift parameter. */
605 if (dim_check (dim, 2, 1) == FAILURE)
606 return FAILURE;
608 return SUCCESS;
613 gfc_check_dcmplx (gfc_expr * x, gfc_expr * y)
615 if (numeric_check (x, 0) == FAILURE)
616 return FAILURE;
618 if (y != NULL)
620 if (numeric_check (y, 1) == FAILURE)
621 return FAILURE;
623 if (x->ts.type == BT_COMPLEX)
625 must_be (y, 1, "not be present if 'x' is COMPLEX");
626 return FAILURE;
630 return SUCCESS;
635 gfc_check_dble (gfc_expr * x)
637 if (numeric_check (x, 0) == FAILURE)
638 return FAILURE;
640 return SUCCESS;
645 gfc_check_digits (gfc_expr * x)
647 if (int_or_real_check (x, 0) == FAILURE)
648 return FAILURE;
650 return SUCCESS;
655 gfc_check_dot_product (gfc_expr * vector_a, gfc_expr * vector_b)
657 switch (vector_a->ts.type)
659 case BT_LOGICAL:
660 if (type_check (vector_b, 1, BT_LOGICAL) == FAILURE)
661 return FAILURE;
662 break;
664 case BT_INTEGER:
665 case BT_REAL:
666 case BT_COMPLEX:
667 if (numeric_check (vector_b, 1) == FAILURE)
668 return FAILURE;
669 break;
671 default:
672 must_be (vector_a, 0, "numeric or LOGICAL");
673 return FAILURE;
676 if (rank_check (vector_a, 0, 1) == FAILURE)
677 return FAILURE;
679 if (rank_check (vector_b, 1, 1) == FAILURE)
680 return FAILURE;
682 return SUCCESS;
687 gfc_check_eoshift (gfc_expr * array, gfc_expr * shift, gfc_expr * boundary,
688 gfc_expr * dim)
690 if (array_check (array, 0) == FAILURE)
691 return FAILURE;
693 if (type_check (shift, 1, BT_INTEGER) == FAILURE)
694 return FAILURE;
696 if (array->rank == 1)
698 if (scalar_check (shift, 2) == FAILURE)
699 return FAILURE;
701 else
703 /* TODO: more weird restrictions on shift. */
706 if (boundary != NULL)
708 if (same_type_check (array, 0, boundary, 2) == FAILURE)
709 return FAILURE;
711 /* TODO: more restrictions on boundary. */
714 if (dim_check (dim, 1, 1) == FAILURE)
715 return FAILURE;
717 return SUCCESS;
722 gfc_check_fnum (gfc_expr * unit)
724 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
725 return FAILURE;
727 if (scalar_check (unit, 0) == FAILURE)
728 return FAILURE;
730 return SUCCESS;
734 /* This is used for the g77 one-argument Bessel functions, and the
735 error function. */
738 gfc_check_g77_math1 (gfc_expr * x)
740 if (scalar_check (x, 0) == FAILURE)
741 return FAILURE;
743 if (type_check (x, 0, BT_REAL) == FAILURE)
744 return FAILURE;
746 return SUCCESS;
751 gfc_check_huge (gfc_expr * x)
753 if (int_or_real_check (x, 0) == FAILURE)
754 return FAILURE;
756 return SUCCESS;
760 /* Check that the single argument is an integer. */
763 gfc_check_i (gfc_expr * i)
765 if (type_check (i, 0, BT_INTEGER) == FAILURE)
766 return FAILURE;
768 return SUCCESS;
773 gfc_check_iand (gfc_expr * i, gfc_expr * j)
775 if (type_check (i, 0, BT_INTEGER) == FAILURE)
776 return FAILURE;
778 if (type_check (j, 1, BT_INTEGER) == FAILURE)
779 return FAILURE;
781 if (i->ts.kind != j->ts.kind)
783 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
784 &i->where) == FAILURE)
785 return FAILURE;
788 return SUCCESS;
793 gfc_check_ibclr (gfc_expr * i, gfc_expr * pos)
795 if (type_check (i, 0, BT_INTEGER) == FAILURE)
796 return FAILURE;
798 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
799 return FAILURE;
801 return SUCCESS;
806 gfc_check_ibits (gfc_expr * i, gfc_expr * pos, gfc_expr * len)
808 if (type_check (i, 0, BT_INTEGER) == FAILURE)
809 return FAILURE;
811 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
812 return FAILURE;
814 if (type_check (len, 2, BT_INTEGER) == FAILURE)
815 return FAILURE;
817 return SUCCESS;
822 gfc_check_ibset (gfc_expr * i, gfc_expr * pos)
824 if (type_check (i, 0, BT_INTEGER) == FAILURE)
825 return FAILURE;
827 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
828 return FAILURE;
830 return SUCCESS;
835 gfc_check_idnint (gfc_expr * a)
837 if (double_check (a, 0) == FAILURE)
838 return FAILURE;
840 return SUCCESS;
845 gfc_check_ieor (gfc_expr * i, gfc_expr * j)
847 if (type_check (i, 0, BT_INTEGER) == FAILURE)
848 return FAILURE;
850 if (type_check (j, 1, BT_INTEGER) == FAILURE)
851 return FAILURE;
853 if (i->ts.kind != j->ts.kind)
855 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
856 &i->where) == FAILURE)
857 return FAILURE;
860 return SUCCESS;
865 gfc_check_index (gfc_expr * string, gfc_expr * substring, gfc_expr * back)
867 if (type_check (string, 0, BT_CHARACTER) == FAILURE
868 || type_check (substring, 1, BT_CHARACTER) == FAILURE)
869 return FAILURE;
872 if (back != NULL && type_check (back, 2, BT_LOGICAL) == FAILURE)
873 return FAILURE;
875 if (string->ts.kind != substring->ts.kind)
877 must_be (substring, 1, "the same kind as 'string'");
878 return FAILURE;
881 return SUCCESS;
886 gfc_check_int (gfc_expr * x, gfc_expr * kind)
888 if (numeric_check (x, 0) == FAILURE
889 || kind_check (kind, 1, BT_INTEGER) == FAILURE)
890 return FAILURE;
892 return SUCCESS;
897 gfc_check_ior (gfc_expr * i, gfc_expr * j)
899 if (type_check (i, 0, BT_INTEGER) == FAILURE)
900 return FAILURE;
902 if (type_check (j, 1, BT_INTEGER) == FAILURE)
903 return FAILURE;
905 if (i->ts.kind != j->ts.kind)
907 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
908 &i->where) == FAILURE)
909 return FAILURE;
912 return SUCCESS;
917 gfc_check_ishft (gfc_expr * i, gfc_expr * shift)
919 if (type_check (i, 0, BT_INTEGER) == FAILURE
920 || type_check (shift, 1, BT_INTEGER) == FAILURE)
921 return FAILURE;
923 return SUCCESS;
928 gfc_check_ishftc (gfc_expr * i, gfc_expr * shift, gfc_expr * size)
930 if (type_check (i, 0, BT_INTEGER) == FAILURE
931 || type_check (shift, 1, BT_INTEGER) == FAILURE)
932 return FAILURE;
934 if (size != NULL && type_check (size, 2, BT_INTEGER) == FAILURE)
935 return FAILURE;
937 return SUCCESS;
942 gfc_check_kind (gfc_expr * x)
944 if (x->ts.type == BT_DERIVED)
946 must_be (x, 0, "a non-derived type");
947 return FAILURE;
950 return SUCCESS;
955 gfc_check_lbound (gfc_expr * array, gfc_expr * dim)
957 if (array_check (array, 0) == FAILURE)
958 return FAILURE;
960 if (dim != NULL)
962 if (dim_check (dim, 1, 1) == FAILURE)
963 return FAILURE;
965 if (dim_rank_check (dim, array, 1) == FAILURE)
966 return FAILURE;
968 return SUCCESS;
973 gfc_check_logical (gfc_expr * a, gfc_expr * kind)
975 if (type_check (a, 0, BT_LOGICAL) == FAILURE)
976 return FAILURE;
977 if (kind_check (kind, 1, BT_LOGICAL) == FAILURE)
978 return FAILURE;
980 return SUCCESS;
984 /* Min/max family. */
986 static try
987 min_max_args (gfc_actual_arglist * arg)
989 if (arg == NULL || arg->next == NULL)
991 gfc_error ("Intrinsic '%s' at %L must have at least two arguments",
992 gfc_current_intrinsic, gfc_current_intrinsic_where);
993 return FAILURE;
996 return SUCCESS;
1000 static try
1001 check_rest (bt type, int kind, gfc_actual_arglist * arg)
1003 gfc_expr *x;
1004 int n;
1006 if (min_max_args (arg) == FAILURE)
1007 return FAILURE;
1009 n = 1;
1011 for (; arg; arg = arg->next, n++)
1013 x = arg->expr;
1014 if (x->ts.type != type || x->ts.kind != kind)
1016 if (x->ts.type == type)
1018 if (gfc_notify_std (GFC_STD_GNU,
1019 "Extension: Different type kinds at %L", &x->where)
1020 == FAILURE)
1021 return FAILURE;
1023 else
1025 gfc_error ("'a%d' argument of '%s' intrinsic at %L must be %s(%d)",
1026 n, gfc_current_intrinsic, &x->where,
1027 gfc_basic_typename (type), kind);
1028 return FAILURE;
1033 return SUCCESS;
1038 gfc_check_min_max (gfc_actual_arglist * arg)
1040 gfc_expr *x;
1042 if (min_max_args (arg) == FAILURE)
1043 return FAILURE;
1045 x = arg->expr;
1047 if (x->ts.type != BT_INTEGER && x->ts.type != BT_REAL)
1049 gfc_error
1050 ("'a1' argument of '%s' intrinsic at %L must be INTEGER or REAL",
1051 gfc_current_intrinsic, &x->where);
1052 return FAILURE;
1055 return check_rest (x->ts.type, x->ts.kind, arg);
1060 gfc_check_min_max_integer (gfc_actual_arglist * arg)
1062 return check_rest (BT_INTEGER, gfc_default_integer_kind, arg);
1067 gfc_check_min_max_real (gfc_actual_arglist * arg)
1069 return check_rest (BT_REAL, gfc_default_real_kind, arg);
1074 gfc_check_min_max_double (gfc_actual_arglist * arg)
1076 return check_rest (BT_REAL, gfc_default_double_kind, arg);
1079 /* End of min/max family. */
1083 gfc_check_matmul (gfc_expr * matrix_a, gfc_expr * matrix_b)
1085 if ((matrix_a->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_b->ts))
1087 must_be (matrix_a, 0, "numeric or LOGICAL");
1088 return FAILURE;
1091 if ((matrix_b->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_a->ts))
1093 must_be (matrix_b, 0, "numeric or LOGICAL");
1094 return FAILURE;
1097 switch (matrix_a->rank)
1099 case 1:
1100 if (rank_check (matrix_b, 1, 2) == FAILURE)
1101 return FAILURE;
1102 break;
1104 case 2:
1105 if (matrix_b->rank == 2)
1106 break;
1107 if (rank_check (matrix_b, 1, 1) == FAILURE)
1108 return FAILURE;
1109 break;
1111 default:
1112 must_be (matrix_a, 0, "of rank 1 or 2");
1113 return FAILURE;
1116 return SUCCESS;
1120 /* Whoever came up with this interface was probably on something.
1121 The possibilities for the occupation of the second and third
1122 parameters are:
1124 Arg #2 Arg #3
1125 NULL NULL
1126 DIM NULL
1127 MASK NULL
1128 NULL MASK minloc(array, mask=m)
1129 DIM MASK
1131 I.e. in the case of minloc(array,mask), mask will be in the second
1132 position of the argument list and we'll have to fix that up. */
1135 gfc_check_minloc_maxloc (gfc_actual_arglist * ap)
1137 gfc_expr *a, *m, *d;
1139 a = ap->expr;
1140 if (int_or_real_check (a, 0) == FAILURE
1141 || array_check (a, 0) == FAILURE)
1142 return FAILURE;
1144 d = ap->next->expr;
1145 m = ap->next->next->expr;
1147 if (m == NULL && d != NULL && d->ts.type == BT_LOGICAL
1148 && ap->next->name[0] == '\0')
1150 m = d;
1151 d = NULL;
1153 ap->next->expr = NULL;
1154 ap->next->next->expr = m;
1157 if (d != NULL
1158 && (scalar_check (d, 1) == FAILURE
1159 || type_check (d, 1, BT_INTEGER) == FAILURE))
1160 return FAILURE;
1162 if (m != NULL && type_check (m, 2, BT_LOGICAL) == FAILURE)
1163 return FAILURE;
1165 return SUCCESS;
1169 /* Similar to minloc/maxloc, the argument list might need to be
1170 reordered for the MINVAL, MAXVAL, PRODUCT, and SUM intrinsics. The
1171 difference is that MINLOC/MAXLOC take an additional KIND argument.
1172 The possibilities are:
1174 Arg #2 Arg #3
1175 NULL NULL
1176 DIM NULL
1177 MASK NULL
1178 NULL MASK minval(array, mask=m)
1179 DIM MASK
1181 I.e. in the case of minval(array,mask), mask will be in the second
1182 position of the argument list and we'll have to fix that up. */
1184 static try
1185 check_reduction (gfc_actual_arglist * ap)
1187 gfc_expr *m, *d;
1189 d = ap->next->expr;
1190 m = ap->next->next->expr;
1192 if (m == NULL && d != NULL && d->ts.type == BT_LOGICAL
1193 && ap->next->name[0] == '\0')
1195 m = d;
1196 d = NULL;
1198 ap->next->expr = NULL;
1199 ap->next->next->expr = m;
1202 if (d != NULL
1203 && (scalar_check (d, 1) == FAILURE
1204 || type_check (d, 1, BT_INTEGER) == FAILURE))
1205 return FAILURE;
1207 if (m != NULL && type_check (m, 2, BT_LOGICAL) == FAILURE)
1208 return FAILURE;
1210 return SUCCESS;
1215 gfc_check_minval_maxval (gfc_actual_arglist * ap)
1217 if (int_or_real_check (ap->expr, 0) == FAILURE
1218 || array_check (ap->expr, 0) == FAILURE)
1219 return FAILURE;
1221 return check_reduction (ap);
1226 gfc_check_product_sum (gfc_actual_arglist * ap)
1228 if (numeric_check (ap->expr, 0) == FAILURE
1229 || array_check (ap->expr, 0) == FAILURE)
1230 return FAILURE;
1232 return check_reduction (ap);
1237 gfc_check_merge (gfc_expr * tsource, gfc_expr * fsource, gfc_expr * mask)
1239 if (same_type_check (tsource, 0, fsource, 1) == FAILURE)
1240 return FAILURE;
1242 if (type_check (mask, 2, BT_LOGICAL) == FAILURE)
1243 return FAILURE;
1245 return SUCCESS;
1250 gfc_check_nearest (gfc_expr * x, gfc_expr * s)
1252 if (type_check (x, 0, BT_REAL) == FAILURE)
1253 return FAILURE;
1255 if (type_check (s, 1, BT_REAL) == FAILURE)
1256 return FAILURE;
1258 return SUCCESS;
1263 gfc_check_null (gfc_expr * mold)
1265 symbol_attribute attr;
1267 if (mold == NULL)
1268 return SUCCESS;
1270 if (variable_check (mold, 0) == FAILURE)
1271 return FAILURE;
1273 attr = gfc_variable_attr (mold, NULL);
1275 if (!attr.pointer)
1277 must_be (mold, 0, "a POINTER");
1278 return FAILURE;
1281 return SUCCESS;
1286 gfc_check_pack (gfc_expr * array, gfc_expr * mask, gfc_expr * vector)
1288 if (array_check (array, 0) == FAILURE)
1289 return FAILURE;
1291 if (type_check (mask, 1, BT_LOGICAL) == FAILURE)
1292 return FAILURE;
1294 if (mask->rank != 0 && mask->rank != array->rank)
1296 must_be (array, 0, "conformable with 'mask' argument");
1297 return FAILURE;
1300 if (vector != NULL)
1302 if (same_type_check (array, 0, vector, 2) == FAILURE)
1303 return FAILURE;
1305 if (rank_check (vector, 2, 1) == FAILURE)
1306 return FAILURE;
1308 /* TODO: More constraints here. */
1311 return SUCCESS;
1316 gfc_check_precision (gfc_expr * x)
1318 if (x->ts.type != BT_REAL && x->ts.type != BT_COMPLEX)
1320 must_be (x, 0, "of type REAL or COMPLEX");
1321 return FAILURE;
1324 return SUCCESS;
1329 gfc_check_present (gfc_expr * a)
1331 gfc_symbol *sym;
1333 if (variable_check (a, 0) == FAILURE)
1334 return FAILURE;
1336 sym = a->symtree->n.sym;
1337 if (!sym->attr.dummy)
1339 must_be (a, 0, "a dummy variable");
1340 return FAILURE;
1343 if (!sym->attr.optional)
1345 must_be (a, 0, "an OPTIONAL dummy variable");
1346 return FAILURE;
1349 return SUCCESS;
1354 gfc_check_radix (gfc_expr * x)
1356 if (int_or_real_check (x, 0) == FAILURE)
1357 return FAILURE;
1359 return SUCCESS;
1364 gfc_check_range (gfc_expr * x)
1366 if (numeric_check (x, 0) == FAILURE)
1367 return FAILURE;
1369 return SUCCESS;
1373 /* real, float, sngl. */
1375 gfc_check_real (gfc_expr * a, gfc_expr * kind)
1377 if (numeric_check (a, 0) == FAILURE)
1378 return FAILURE;
1380 if (kind_check (kind, 1, BT_REAL) == FAILURE)
1381 return FAILURE;
1383 return SUCCESS;
1388 gfc_check_repeat (gfc_expr * x, gfc_expr * y)
1390 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
1391 return FAILURE;
1393 if (scalar_check (x, 0) == FAILURE)
1394 return FAILURE;
1396 if (type_check (y, 0, BT_INTEGER) == FAILURE)
1397 return FAILURE;
1399 if (scalar_check (y, 1) == FAILURE)
1400 return FAILURE;
1402 return SUCCESS;
1407 gfc_check_reshape (gfc_expr * source, gfc_expr * shape,
1408 gfc_expr * pad, gfc_expr * order)
1410 mpz_t size;
1411 int m;
1413 if (array_check (source, 0) == FAILURE)
1414 return FAILURE;
1416 if (rank_check (shape, 1, 1) == FAILURE)
1417 return FAILURE;
1419 if (type_check (shape, 1, BT_INTEGER) == FAILURE)
1420 return FAILURE;
1422 if (gfc_array_size (shape, &size) != SUCCESS)
1424 gfc_error ("'shape' argument of 'reshape' intrinsic at %L must be an "
1425 "array of constant size", &shape->where);
1426 return FAILURE;
1429 m = mpz_cmp_ui (size, GFC_MAX_DIMENSIONS);
1430 mpz_clear (size);
1432 if (m > 0)
1434 gfc_error
1435 ("'shape' argument of 'reshape' intrinsic at %L has more than "
1436 stringize (GFC_MAX_DIMENSIONS) " elements", &shape->where);
1437 return FAILURE;
1440 if (pad != NULL)
1442 if (same_type_check (source, 0, pad, 2) == FAILURE)
1443 return FAILURE;
1444 if (array_check (pad, 2) == FAILURE)
1445 return FAILURE;
1448 if (order != NULL && array_check (order, 3) == FAILURE)
1449 return FAILURE;
1451 return SUCCESS;
1456 gfc_check_scale (gfc_expr * x, gfc_expr * i)
1458 if (type_check (x, 0, BT_REAL) == FAILURE)
1459 return FAILURE;
1461 if (type_check (i, 1, BT_INTEGER) == FAILURE)
1462 return FAILURE;
1464 return SUCCESS;
1469 gfc_check_scan (gfc_expr * x, gfc_expr * y, gfc_expr * z)
1471 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
1472 return FAILURE;
1474 if (type_check (y, 1, BT_CHARACTER) == FAILURE)
1475 return FAILURE;
1477 if (z != NULL && type_check (z, 2, BT_LOGICAL) == FAILURE)
1478 return FAILURE;
1480 if (same_type_check (x, 0, y, 1) == FAILURE)
1481 return FAILURE;
1483 return SUCCESS;
1488 gfc_check_selected_real_kind (gfc_expr * p, gfc_expr * r)
1490 if (p == NULL && r == NULL)
1492 gfc_error ("Missing arguments to %s intrinsic at %L",
1493 gfc_current_intrinsic, gfc_current_intrinsic_where);
1495 return FAILURE;
1498 if (p != NULL && type_check (p, 0, BT_INTEGER) == FAILURE)
1499 return FAILURE;
1501 if (r != NULL && type_check (r, 1, BT_INTEGER) == FAILURE)
1502 return FAILURE;
1504 return SUCCESS;
1509 gfc_check_set_exponent (gfc_expr * x, gfc_expr * i)
1511 if (type_check (x, 0, BT_REAL) == FAILURE)
1512 return FAILURE;
1514 if (type_check (i, 1, BT_INTEGER) == FAILURE)
1515 return FAILURE;
1517 return SUCCESS;
1522 gfc_check_shape (gfc_expr * source)
1524 gfc_array_ref *ar;
1526 if (source->rank == 0 || source->expr_type != EXPR_VARIABLE)
1527 return SUCCESS;
1529 ar = gfc_find_array_ref (source);
1531 if (ar->as && ar->as->type == AS_ASSUMED_SIZE)
1533 gfc_error ("'source' argument of 'shape' intrinsic at %L must not be "
1534 "an assumed size array", &source->where);
1535 return FAILURE;
1538 return SUCCESS;
1543 gfc_check_sign (gfc_expr * a, gfc_expr * b)
1545 if (int_or_real_check (a, 0) == FAILURE)
1546 return FAILURE;
1548 if (same_type_check (a, 0, b, 1) == FAILURE)
1549 return FAILURE;
1551 return SUCCESS;
1556 gfc_check_size (gfc_expr * array, gfc_expr * dim)
1558 if (array_check (array, 0) == FAILURE)
1559 return FAILURE;
1561 if (dim != NULL)
1563 if (type_check (dim, 1, BT_INTEGER) == FAILURE)
1564 return FAILURE;
1566 if (kind_value_check (dim, 1, gfc_default_integer_kind) == FAILURE)
1567 return FAILURE;
1569 if (dim_rank_check (dim, array, 0) == FAILURE)
1570 return FAILURE;
1573 return SUCCESS;
1578 gfc_check_spread (gfc_expr * source, gfc_expr * dim, gfc_expr * ncopies)
1580 if (source->rank >= GFC_MAX_DIMENSIONS)
1582 must_be (source, 0, "less than rank " stringize (GFC_MAX_DIMENSIONS));
1583 return FAILURE;
1586 if (dim_check (dim, 1, 0) == FAILURE)
1587 return FAILURE;
1589 if (type_check (ncopies, 2, BT_INTEGER) == FAILURE)
1590 return FAILURE;
1592 if (scalar_check (ncopies, 2) == FAILURE)
1593 return FAILURE;
1595 return SUCCESS;
1600 gfc_check_fstat (gfc_expr * unit, gfc_expr * array)
1602 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
1603 return FAILURE;
1605 if (scalar_check (unit, 0) == FAILURE)
1606 return FAILURE;
1608 if (type_check (array, 1, BT_INTEGER) == FAILURE
1609 || kind_value_check (unit, 0, gfc_default_integer_kind) == FAILURE)
1610 return FAILURE;
1612 if (array_check (array, 1) == FAILURE)
1613 return FAILURE;
1615 return SUCCESS;
1620 gfc_check_fstat_sub (gfc_expr * unit, gfc_expr * array, gfc_expr * status)
1622 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
1623 return FAILURE;
1625 if (scalar_check (unit, 0) == FAILURE)
1626 return FAILURE;
1628 if (type_check (array, 1, BT_INTEGER) == FAILURE
1629 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
1630 return FAILURE;
1632 if (array_check (array, 1) == FAILURE)
1633 return FAILURE;
1635 if (status == NULL)
1636 return SUCCESS;
1638 if (type_check (status, 2, BT_INTEGER) == FAILURE
1639 || kind_value_check (status, 2, gfc_default_integer_kind) == FAILURE)
1640 return FAILURE;
1642 if (scalar_check (status, 2) == FAILURE)
1643 return FAILURE;
1645 return SUCCESS;
1650 gfc_check_stat (gfc_expr * name, gfc_expr * array)
1652 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
1653 return FAILURE;
1655 if (type_check (array, 1, BT_INTEGER) == FAILURE
1656 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
1657 return FAILURE;
1659 if (array_check (array, 1) == FAILURE)
1660 return FAILURE;
1662 return SUCCESS;
1667 gfc_check_stat_sub (gfc_expr * name, gfc_expr * array, gfc_expr * status)
1669 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
1670 return FAILURE;
1672 if (type_check (array, 1, BT_INTEGER) == FAILURE
1673 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
1674 return FAILURE;
1676 if (array_check (array, 1) == FAILURE)
1677 return FAILURE;
1679 if (status == NULL)
1680 return SUCCESS;
1682 if (type_check (status, 2, BT_INTEGER) == FAILURE
1683 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
1684 return FAILURE;
1686 if (scalar_check (status, 2) == FAILURE)
1687 return FAILURE;
1689 return SUCCESS;
1694 gfc_check_transfer (gfc_expr * source ATTRIBUTE_UNUSED,
1695 gfc_expr * mold ATTRIBUTE_UNUSED,
1696 gfc_expr * size)
1698 if (size != NULL)
1700 if (type_check (size, 2, BT_INTEGER) == FAILURE)
1701 return FAILURE;
1703 if (scalar_check (size, 2) == FAILURE)
1704 return FAILURE;
1706 if (nonoptional_check (size, 2) == FAILURE)
1707 return FAILURE;
1710 return SUCCESS;
1715 gfc_check_transpose (gfc_expr * matrix)
1717 if (rank_check (matrix, 0, 2) == FAILURE)
1718 return FAILURE;
1720 return SUCCESS;
1725 gfc_check_ubound (gfc_expr * array, gfc_expr * dim)
1727 if (array_check (array, 0) == FAILURE)
1728 return FAILURE;
1730 if (dim != NULL)
1732 if (dim_check (dim, 1, 1) == FAILURE)
1733 return FAILURE;
1735 if (dim_rank_check (dim, array, 0) == FAILURE)
1736 return FAILURE;
1739 return SUCCESS;
1744 gfc_check_unpack (gfc_expr * vector, gfc_expr * mask, gfc_expr * field)
1746 if (rank_check (vector, 0, 1) == FAILURE)
1747 return FAILURE;
1749 if (array_check (mask, 1) == FAILURE)
1750 return FAILURE;
1752 if (type_check (mask, 1, BT_LOGICAL) == FAILURE)
1753 return FAILURE;
1755 if (same_type_check (vector, 0, field, 2) == FAILURE)
1756 return FAILURE;
1758 return SUCCESS;
1763 gfc_check_verify (gfc_expr * x, gfc_expr * y, gfc_expr * z)
1765 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
1766 return FAILURE;
1768 if (same_type_check (x, 0, y, 1) == FAILURE)
1769 return FAILURE;
1771 if (z != NULL && type_check (z, 2, BT_LOGICAL) == FAILURE)
1772 return FAILURE;
1774 return SUCCESS;
1779 gfc_check_trim (gfc_expr * x)
1781 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
1782 return FAILURE;
1784 if (scalar_check (x, 0) == FAILURE)
1785 return FAILURE;
1787 return SUCCESS;
1791 /* Common check function for the half a dozen intrinsics that have a
1792 single real argument. */
1795 gfc_check_x (gfc_expr * x)
1797 if (type_check (x, 0, BT_REAL) == FAILURE)
1798 return FAILURE;
1800 return SUCCESS;
1804 /************* Check functions for intrinsic subroutines *************/
1807 gfc_check_cpu_time (gfc_expr * time)
1809 if (scalar_check (time, 0) == FAILURE)
1810 return FAILURE;
1812 if (type_check (time, 0, BT_REAL) == FAILURE)
1813 return FAILURE;
1815 if (variable_check (time, 0) == FAILURE)
1816 return FAILURE;
1818 return SUCCESS;
1823 gfc_check_date_and_time (gfc_expr * date, gfc_expr * time,
1824 gfc_expr * zone, gfc_expr * values)
1826 if (date != NULL)
1828 if (type_check (date, 0, BT_CHARACTER) == FAILURE)
1829 return FAILURE;
1830 if (scalar_check (date, 0) == FAILURE)
1831 return FAILURE;
1832 if (variable_check (date, 0) == FAILURE)
1833 return FAILURE;
1836 if (time != NULL)
1838 if (type_check (time, 1, BT_CHARACTER) == FAILURE)
1839 return FAILURE;
1840 if (scalar_check (time, 1) == FAILURE)
1841 return FAILURE;
1842 if (variable_check (time, 1) == FAILURE)
1843 return FAILURE;
1846 if (zone != NULL)
1848 if (type_check (zone, 2, BT_CHARACTER) == FAILURE)
1849 return FAILURE;
1850 if (scalar_check (zone, 2) == FAILURE)
1851 return FAILURE;
1852 if (variable_check (zone, 2) == FAILURE)
1853 return FAILURE;
1856 if (values != NULL)
1858 if (type_check (values, 3, BT_INTEGER) == FAILURE)
1859 return FAILURE;
1860 if (array_check (values, 3) == FAILURE)
1861 return FAILURE;
1862 if (rank_check (values, 3, 1) == FAILURE)
1863 return FAILURE;
1864 if (variable_check (values, 3) == FAILURE)
1865 return FAILURE;
1868 return SUCCESS;
1873 gfc_check_mvbits (gfc_expr * from, gfc_expr * frompos, gfc_expr * len,
1874 gfc_expr * to, gfc_expr * topos)
1876 if (type_check (from, 0, BT_INTEGER) == FAILURE)
1877 return FAILURE;
1879 if (type_check (frompos, 1, BT_INTEGER) == FAILURE)
1880 return FAILURE;
1882 if (type_check (len, 2, BT_INTEGER) == FAILURE)
1883 return FAILURE;
1885 if (same_type_check (from, 0, to, 3) == FAILURE)
1886 return FAILURE;
1888 if (variable_check (to, 3) == FAILURE)
1889 return FAILURE;
1891 if (type_check (topos, 4, BT_INTEGER) == FAILURE)
1892 return FAILURE;
1894 return SUCCESS;
1899 gfc_check_random_number (gfc_expr * harvest)
1901 if (type_check (harvest, 0, BT_REAL) == FAILURE)
1902 return FAILURE;
1904 if (variable_check (harvest, 0) == FAILURE)
1905 return FAILURE;
1907 return SUCCESS;
1912 gfc_check_random_seed (gfc_expr * size, gfc_expr * put, gfc_expr * get)
1914 if (size != NULL)
1916 if (scalar_check (size, 0) == FAILURE)
1917 return FAILURE;
1919 if (type_check (size, 0, BT_INTEGER) == FAILURE)
1920 return FAILURE;
1922 if (variable_check (size, 0) == FAILURE)
1923 return FAILURE;
1925 if (kind_value_check (size, 0, gfc_default_integer_kind) == FAILURE)
1926 return FAILURE;
1929 if (put != NULL)
1932 if (size != NULL)
1933 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic,
1934 &put->where);
1936 if (array_check (put, 1) == FAILURE)
1937 return FAILURE;
1939 if (rank_check (put, 1, 1) == FAILURE)
1940 return FAILURE;
1942 if (type_check (put, 1, BT_INTEGER) == FAILURE)
1943 return FAILURE;
1945 if (kind_value_check (put, 1, gfc_default_integer_kind) == FAILURE)
1946 return FAILURE;
1949 if (get != NULL)
1952 if (size != NULL || put != NULL)
1953 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic,
1954 &get->where);
1956 if (array_check (get, 2) == FAILURE)
1957 return FAILURE;
1959 if (rank_check (get, 2, 1) == FAILURE)
1960 return FAILURE;
1962 if (type_check (get, 2, BT_INTEGER) == FAILURE)
1963 return FAILURE;
1965 if (variable_check (get, 2) == FAILURE)
1966 return FAILURE;
1968 if (kind_value_check (get, 2, gfc_default_integer_kind) == FAILURE)
1969 return FAILURE;
1972 return SUCCESS;
1976 gfc_check_second_sub (gfc_expr * time)
1978 if (scalar_check (time, 0) == FAILURE)
1979 return FAILURE;
1981 if (type_check (time, 0, BT_REAL) == FAILURE)
1982 return FAILURE;
1984 if (kind_value_check(time, 0, 4) == FAILURE)
1985 return FAILURE;
1987 return SUCCESS;
1991 /* The arguments of SYSTEM_CLOCK are scalar, integer variables. Note,
1992 count, count_rate, and count_max are all optional arguments */
1995 gfc_check_system_clock (gfc_expr * count, gfc_expr * count_rate,
1996 gfc_expr * count_max)
1998 if (count != NULL)
2000 if (scalar_check (count, 0) == FAILURE)
2001 return FAILURE;
2003 if (type_check (count, 0, BT_INTEGER) == FAILURE)
2004 return FAILURE;
2006 if (variable_check (count, 0) == FAILURE)
2007 return FAILURE;
2010 if (count_rate != NULL)
2012 if (scalar_check (count_rate, 1) == FAILURE)
2013 return FAILURE;
2015 if (type_check (count_rate, 1, BT_INTEGER) == FAILURE)
2016 return FAILURE;
2018 if (variable_check (count_rate, 1) == FAILURE)
2019 return FAILURE;
2021 if (count != NULL
2022 && same_type_check (count, 0, count_rate, 1) == FAILURE)
2023 return FAILURE;
2027 if (count_max != NULL)
2029 if (scalar_check (count_max, 2) == FAILURE)
2030 return FAILURE;
2032 if (type_check (count_max, 2, BT_INTEGER) == FAILURE)
2033 return FAILURE;
2035 if (variable_check (count_max, 2) == FAILURE)
2036 return FAILURE;
2038 if (count != NULL
2039 && same_type_check (count, 0, count_max, 2) == FAILURE)
2040 return FAILURE;
2042 if (count_rate != NULL
2043 && same_type_check (count_rate, 1, count_max, 2) == FAILURE)
2044 return FAILURE;
2047 return SUCCESS;
2051 gfc_check_irand (gfc_expr * x)
2053 if (x == NULL)
2054 return SUCCESS;
2056 if (scalar_check (x, 0) == FAILURE)
2057 return FAILURE;
2059 if (type_check (x, 0, BT_INTEGER) == FAILURE)
2060 return FAILURE;
2062 if (kind_value_check(x, 0, 4) == FAILURE)
2063 return FAILURE;
2065 return SUCCESS;
2069 gfc_check_rand (gfc_expr * x)
2071 if (x == NULL)
2072 return SUCCESS;
2074 if (scalar_check (x, 0) == FAILURE)
2075 return FAILURE;
2077 if (type_check (x, 0, BT_INTEGER) == FAILURE)
2078 return FAILURE;
2080 if (kind_value_check(x, 0, 4) == FAILURE)
2081 return FAILURE;
2083 return SUCCESS;
2087 gfc_check_srand (gfc_expr * x)
2089 if (scalar_check (x, 0) == FAILURE)
2090 return FAILURE;
2092 if (type_check (x, 0, BT_INTEGER) == FAILURE)
2093 return FAILURE;
2095 if (kind_value_check(x, 0, 4) == FAILURE)
2096 return FAILURE;
2098 return SUCCESS;
2102 gfc_check_etime (gfc_expr * x)
2104 if (array_check (x, 0) == FAILURE)
2105 return FAILURE;
2107 if (rank_check (x, 0, 1) == FAILURE)
2108 return FAILURE;
2110 if (variable_check (x, 0) == FAILURE)
2111 return FAILURE;
2113 if (type_check (x, 0, BT_REAL) == FAILURE)
2114 return FAILURE;
2116 if (kind_value_check(x, 0, 4) == FAILURE)
2117 return FAILURE;
2119 return SUCCESS;
2123 gfc_check_etime_sub (gfc_expr * values, gfc_expr * time)
2125 if (array_check (values, 0) == FAILURE)
2126 return FAILURE;
2128 if (rank_check (values, 0, 1) == FAILURE)
2129 return FAILURE;
2131 if (variable_check (values, 0) == FAILURE)
2132 return FAILURE;
2134 if (type_check (values, 0, BT_REAL) == FAILURE)
2135 return FAILURE;
2137 if (kind_value_check(values, 0, 4) == FAILURE)
2138 return FAILURE;
2140 if (scalar_check (time, 1) == FAILURE)
2141 return FAILURE;
2143 if (type_check (time, 1, BT_REAL) == FAILURE)
2144 return FAILURE;
2146 if (kind_value_check(time, 1, 4) == FAILURE)
2147 return FAILURE;
2149 return SUCCESS;
2154 gfc_check_getcwd_sub (gfc_expr * cwd, gfc_expr * status)
2156 if (type_check (cwd, 0, BT_CHARACTER) == FAILURE)
2157 return FAILURE;
2159 if (status == NULL)
2160 return SUCCESS;
2162 if (scalar_check (status, 1) == FAILURE)
2163 return FAILURE;
2165 if (type_check (status, 1, BT_INTEGER) == FAILURE)
2166 return FAILURE;
2168 return SUCCESS;
2173 gfc_check_exit (gfc_expr * status)
2175 if (status == NULL)
2176 return SUCCESS;
2178 if (type_check (status, 0, BT_INTEGER) == FAILURE)
2179 return FAILURE;
2181 if (scalar_check (status, 0) == FAILURE)
2182 return FAILURE;
2184 return SUCCESS;
2189 gfc_check_flush (gfc_expr * unit)
2191 if (unit == NULL)
2192 return SUCCESS;
2194 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2195 return FAILURE;
2197 if (scalar_check (unit, 0) == FAILURE)
2198 return FAILURE;
2200 return SUCCESS;
2205 gfc_check_umask (gfc_expr * mask)
2207 if (type_check (mask, 0, BT_INTEGER) == FAILURE)
2208 return FAILURE;
2210 if (scalar_check (mask, 0) == FAILURE)
2211 return FAILURE;
2213 return SUCCESS;
2218 gfc_check_umask_sub (gfc_expr * mask, gfc_expr * old)
2220 if (type_check (mask, 0, BT_INTEGER) == FAILURE)
2221 return FAILURE;
2223 if (scalar_check (mask, 0) == FAILURE)
2224 return FAILURE;
2226 if (old == NULL)
2227 return SUCCESS;
2229 if (scalar_check (old, 1) == FAILURE)
2230 return FAILURE;
2232 if (type_check (old, 1, BT_INTEGER) == FAILURE)
2233 return FAILURE;
2235 return SUCCESS;
2240 gfc_check_unlink (gfc_expr * name)
2242 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
2243 return FAILURE;
2245 return SUCCESS;
2250 gfc_check_unlink_sub (gfc_expr * name, gfc_expr * status)
2252 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
2253 return FAILURE;
2255 if (status == NULL)
2256 return SUCCESS;
2258 if (scalar_check (status, 1) == FAILURE)
2259 return FAILURE;
2261 if (type_check (status, 1, BT_INTEGER) == FAILURE)
2262 return FAILURE;
2264 return SUCCESS;
2269 gfc_check_system_sub (gfc_expr * cmd, gfc_expr * status)
2271 if (type_check (cmd, 0, BT_CHARACTER) == FAILURE)
2272 return FAILURE;
2274 if (scalar_check (status, 1) == FAILURE)
2275 return FAILURE;
2277 if (type_check (status, 1, BT_INTEGER) == FAILURE)
2278 return FAILURE;
2280 if (kind_value_check (status, 1, gfc_default_integer_kind) == FAILURE)
2281 return FAILURE;
2283 return SUCCESS;