2004-10-30 Canqun Yang <canqun@nudt.edu.cn>
[official-gcc.git] / gcc / fortran / check.c
blobb8ed5e9f5a7b2be48ae5f5fe82030c2f83b70a6d
1 /* Check functions
2 Copyright (C) 2002, 2003, 2004 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. */
30 #include <stdlib.h>
31 #include <stdarg.h>
33 #include "config.h"
34 #include "system.h"
35 #include "flags.h"
36 #include "gfortran.h"
37 #include "intrinsic.h"
40 /* The fundamental complaint function of this source file. This
41 function can be called in all kinds of ways. */
43 static void
44 must_be (gfc_expr * e, int n, const char *thing)
47 gfc_error ("'%s' argument of '%s' intrinsic at %L must be %s",
48 gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &e->where,
49 thing);
53 /* Check the type of an expression. */
55 static try
56 type_check (gfc_expr * e, int n, bt type)
59 if (e->ts.type == type)
60 return SUCCESS;
62 must_be (e, n, gfc_basic_typename (type));
64 return FAILURE;
68 /* Check that the expression is a numeric type. */
70 static try
71 numeric_check (gfc_expr * e, int n)
74 if (gfc_numeric_ts (&e->ts))
75 return SUCCESS;
77 must_be (e, n, "a numeric type");
79 return FAILURE;
83 /* Check that an expression is integer or real. */
85 static try
86 int_or_real_check (gfc_expr * e, int n)
89 if (e->ts.type != BT_INTEGER && e->ts.type != BT_REAL)
91 must_be (e, n, "INTEGER or REAL");
92 return FAILURE;
95 return SUCCESS;
99 /* Check that the expression is an optional constant integer
100 and that it specifies a valid kind for that type. */
102 static try
103 kind_check (gfc_expr * k, int n, bt type)
105 int kind;
107 if (k == NULL)
108 return SUCCESS;
110 if (type_check (k, n, BT_INTEGER) == FAILURE)
111 return FAILURE;
113 if (k->expr_type != EXPR_CONSTANT)
115 must_be (k, n, "a constant");
116 return FAILURE;
119 if (gfc_extract_int (k, &kind) != NULL
120 || gfc_validate_kind (type, kind, true) < 0)
122 gfc_error ("Invalid kind for %s at %L", gfc_basic_typename (type),
123 &k->where);
124 return FAILURE;
127 return SUCCESS;
131 /* Make sure the expression is a double precision real. */
133 static try
134 double_check (gfc_expr * d, int n)
136 if (type_check (d, n, BT_REAL) == FAILURE)
137 return FAILURE;
139 if (d->ts.kind != gfc_default_double_kind)
141 must_be (d, n, "double precision");
142 return FAILURE;
145 return SUCCESS;
149 /* Make sure the expression is a logical array. */
151 static try
152 logical_array_check (gfc_expr * array, int n)
155 if (array->ts.type != BT_LOGICAL || array->rank == 0)
157 must_be (array, n, "a logical array");
158 return FAILURE;
161 return SUCCESS;
165 /* Make sure an expression is an array. */
167 static try
168 array_check (gfc_expr * e, int n)
171 if (e->rank != 0)
172 return SUCCESS;
174 must_be (e, n, "an array");
176 return FAILURE;
180 /* Make sure an expression is a scalar. */
182 static try
183 scalar_check (gfc_expr * e, int n)
186 if (e->rank == 0)
187 return SUCCESS;
189 must_be (e, n, "a scalar");
191 return FAILURE;
195 /* Make sure two expression have the same type. */
197 static try
198 same_type_check (gfc_expr * e, int n, gfc_expr * f, int m)
200 char message[100];
202 if (gfc_compare_types (&e->ts, &f->ts))
203 return SUCCESS;
205 sprintf (message, "the same type and kind as '%s'",
206 gfc_current_intrinsic_arg[n]);
208 must_be (f, m, message);
210 return FAILURE;
214 /* Make sure that an expression has a certain (nonzero) rank. */
216 static try
217 rank_check (gfc_expr * e, int n, int rank)
219 char message[100];
221 if (e->rank == rank)
222 return SUCCESS;
224 sprintf (message, "of rank %d", rank);
226 must_be (e, n, message);
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)
238 if (e->expr_type == EXPR_VARIABLE && e->symtree->n.sym->attr.optional)
240 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be OPTIONAL",
241 gfc_current_intrinsic_arg[n], gfc_current_intrinsic,
242 &e->where);
246 /* TODO: Recursive check on nonoptional variables? */
248 return SUCCESS;
252 /* Check that an expression has a particular kind. */
254 static try
255 kind_value_check (gfc_expr * e, int n, int k)
257 char message[100];
259 if (e->ts.kind == k)
260 return SUCCESS;
262 sprintf (message, "of kind %d", k);
264 must_be (e, n, message);
265 return FAILURE;
269 /* Make sure an expression is a variable. */
271 static try
272 variable_check (gfc_expr * e, int n)
275 if ((e->expr_type == EXPR_VARIABLE
276 && e->symtree->n.sym->attr.flavor != FL_PARAMETER)
277 || (e->expr_type == EXPR_FUNCTION
278 && e->symtree->n.sym->result == e->symtree->n.sym))
279 return SUCCESS;
281 if (e->expr_type == EXPR_VARIABLE
282 && e->symtree->n.sym->attr.intent == INTENT_IN)
284 gfc_error ("'%s' argument of '%s' intrinsic at %L cannot be INTENT(IN)",
285 gfc_current_intrinsic_arg[n], gfc_current_intrinsic,
286 &e->where);
287 return FAILURE;
290 must_be (e, n, "a variable");
292 return FAILURE;
296 /* Check the common DIM parameter for correctness. */
298 static try
299 dim_check (gfc_expr * dim, int n, int optional)
302 if (optional)
304 if (dim == NULL)
305 return SUCCESS;
307 if (nonoptional_check (dim, n) == FAILURE)
308 return FAILURE;
310 return SUCCESS;
313 if (dim == NULL)
315 gfc_error ("Missing DIM parameter in intrinsic '%s' at %L",
316 gfc_current_intrinsic, gfc_current_intrinsic_where);
317 return FAILURE;
320 if (type_check (dim, n, BT_INTEGER) == FAILURE)
321 return FAILURE;
323 if (scalar_check (dim, n) == FAILURE)
324 return FAILURE;
326 return SUCCESS;
330 /* If a DIM parameter is a constant, make sure that it is greater than
331 zero and less than or equal to the rank of the given array. If
332 allow_assumed is zero then dim must be less than the rank of the array
333 for assumed size arrays. */
335 static try
336 dim_rank_check (gfc_expr * dim, gfc_expr * array, int allow_assumed)
338 gfc_array_ref *ar;
339 int rank;
341 if (dim->expr_type != EXPR_CONSTANT || array->expr_type != EXPR_VARIABLE)
342 return SUCCESS;
344 ar = gfc_find_array_ref (array);
345 rank = array->rank;
346 if (ar->as->type == AS_ASSUMED_SIZE && !allow_assumed)
347 rank--;
349 if (mpz_cmp_ui (dim->value.integer, 1) < 0
350 || mpz_cmp_ui (dim->value.integer, rank) > 0)
352 gfc_error ("'dim' argument of '%s' intrinsic at %L is not a valid "
353 "dimension index", gfc_current_intrinsic, &dim->where);
355 return FAILURE;
358 return SUCCESS;
362 /***** Check functions *****/
364 /* Check subroutine suitable for intrinsics taking a real argument and
365 a kind argument for the result. */
367 static try
368 check_a_kind (gfc_expr * a, gfc_expr * kind, bt type)
371 if (type_check (a, 0, BT_REAL) == FAILURE)
372 return FAILURE;
373 if (kind_check (kind, 1, type) == FAILURE)
374 return FAILURE;
376 return SUCCESS;
379 /* Check subroutine suitable for ceiling, floor and nint. */
382 gfc_check_a_ikind (gfc_expr * a, gfc_expr * kind)
385 return check_a_kind (a, kind, BT_INTEGER);
388 /* Check subroutine suitable for aint, anint. */
391 gfc_check_a_xkind (gfc_expr * a, gfc_expr * kind)
394 return check_a_kind (a, kind, BT_REAL);
398 gfc_check_abs (gfc_expr * a)
401 if (numeric_check (a, 0) == FAILURE)
402 return FAILURE;
404 return SUCCESS;
409 gfc_check_all_any (gfc_expr * mask, gfc_expr * dim)
412 if (logical_array_check (mask, 0) == FAILURE)
413 return FAILURE;
415 if (dim_check (dim, 1, 1) == FAILURE)
416 return FAILURE;
418 return SUCCESS;
423 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 must_be (array, 0, "ALLOCATABLE");
435 return FAILURE;
438 return SUCCESS;
442 /* Common check function where the first argument must be real or
443 integer and the second argument must be the same as the first. */
446 gfc_check_a_p (gfc_expr * a, gfc_expr * p)
449 if (int_or_real_check (a, 0) == FAILURE)
450 return FAILURE;
452 if (same_type_check (a, 0, p, 1) == FAILURE)
453 return FAILURE;
455 return SUCCESS;
460 gfc_check_associated (gfc_expr * pointer, gfc_expr * target)
462 symbol_attribute attr;
463 int i;
464 try t;
466 if (variable_check (pointer, 0) == FAILURE)
467 return FAILURE;
469 attr = gfc_variable_attr (pointer, NULL);
470 if (!attr.pointer)
472 must_be (pointer, 0, "a POINTER");
473 return FAILURE;
476 if (target == NULL)
477 return SUCCESS;
479 /* Target argument is optional. */
480 if (target->expr_type == EXPR_NULL)
482 gfc_error ("NULL pointer at %L is not permitted as actual argument "
483 "of '%s' intrinsic function",
484 &target->where, gfc_current_intrinsic);
485 return FAILURE;
488 attr = gfc_variable_attr (target, NULL);
489 if (!attr.pointer && !attr.target)
491 must_be (target, 1, "a POINTER or a TARGET");
492 return FAILURE;
495 t = SUCCESS;
496 if (same_type_check (pointer, 0, target, 1) == FAILURE)
497 t = FAILURE;
498 if (rank_check (target, 0, pointer->rank) == FAILURE)
499 t = FAILURE;
500 if (target->rank > 0)
502 for (i = 0; i < target->rank; i++)
503 if (target->ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
505 gfc_error ("Array section with a vector subscript at %L shall not "
506 "be the target of an pointer",
507 &target->where);
508 t = FAILURE;
509 break;
512 return t;
517 gfc_check_atan2 (gfc_expr * y, gfc_expr * x)
519 if (type_check (y, 0, BT_REAL) == FAILURE)
520 return FAILURE;
521 if (same_type_check (y, 0, x, 1) == FAILURE)
522 return FAILURE;
524 return SUCCESS;
528 /* BESJN and BESYN functions. */
531 gfc_check_besn (gfc_expr * n, gfc_expr * x)
534 if (scalar_check (n, 0) == FAILURE)
535 return FAILURE;
537 if (type_check (n, 0, BT_INTEGER) == FAILURE)
538 return FAILURE;
540 if (scalar_check (x, 1) == FAILURE)
541 return FAILURE;
543 if (type_check (x, 1, BT_REAL) == FAILURE)
544 return FAILURE;
546 return SUCCESS;
551 gfc_check_btest (gfc_expr * i, gfc_expr * pos)
554 if (type_check (i, 0, BT_INTEGER) == FAILURE)
555 return FAILURE;
556 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
557 return FAILURE;
559 return SUCCESS;
564 gfc_check_char (gfc_expr * i, gfc_expr * kind)
567 if (type_check (i, 0, BT_INTEGER) == FAILURE)
568 return FAILURE;
569 if (kind_check (kind, 1, BT_CHARACTER) == FAILURE)
570 return FAILURE;
572 return SUCCESS;
577 gfc_check_cmplx (gfc_expr * x, gfc_expr * y, gfc_expr * kind)
580 if (numeric_check (x, 0) == FAILURE)
581 return FAILURE;
583 if (y != NULL)
585 if (numeric_check (y, 1) == FAILURE)
586 return FAILURE;
588 if (x->ts.type == BT_COMPLEX)
590 must_be (y, 1, "not be present if 'x' is COMPLEX");
591 return FAILURE;
595 if (kind_check (kind, 2, BT_COMPLEX) == FAILURE)
596 return FAILURE;
598 return SUCCESS;
603 gfc_check_count (gfc_expr * mask, gfc_expr * dim)
606 if (logical_array_check (mask, 0) == FAILURE)
607 return FAILURE;
608 if (dim_check (dim, 1, 1) == FAILURE)
609 return FAILURE;
611 return SUCCESS;
616 gfc_check_cshift (gfc_expr * array, gfc_expr * shift, gfc_expr * dim)
619 if (array_check (array, 0) == FAILURE)
620 return FAILURE;
622 if (array->rank == 1)
624 if (scalar_check (shift, 1) == FAILURE)
625 return FAILURE;
627 else
629 /* TODO: more requirements on shift parameter. */
632 if (dim_check (dim, 2, 1) == FAILURE)
633 return FAILURE;
635 return SUCCESS;
640 gfc_check_dcmplx (gfc_expr * x, gfc_expr * y)
643 if (numeric_check (x, 0) == FAILURE)
644 return FAILURE;
646 if (y != NULL)
648 if (numeric_check (y, 1) == FAILURE)
649 return FAILURE;
651 if (x->ts.type == BT_COMPLEX)
653 must_be (y, 1, "not be present if 'x' is COMPLEX");
654 return FAILURE;
658 return SUCCESS;
663 gfc_check_dble (gfc_expr * x)
666 if (numeric_check (x, 0) == FAILURE)
667 return FAILURE;
669 return SUCCESS;
674 gfc_check_digits (gfc_expr * x)
677 if (int_or_real_check (x, 0) == FAILURE)
678 return FAILURE;
680 return SUCCESS;
685 gfc_check_dot_product (gfc_expr * vector_a, gfc_expr * vector_b)
688 switch (vector_a->ts.type)
690 case BT_LOGICAL:
691 if (type_check (vector_b, 1, BT_LOGICAL) == FAILURE)
692 return FAILURE;
693 break;
695 case BT_INTEGER:
696 case BT_REAL:
697 case BT_COMPLEX:
698 if (numeric_check (vector_b, 1) == FAILURE)
699 return FAILURE;
700 break;
702 default:
703 must_be (vector_a, 0, "numeric or LOGICAL");
704 return FAILURE;
707 if (rank_check (vector_a, 0, 1) == FAILURE)
708 return FAILURE;
710 if (rank_check (vector_b, 1, 1) == FAILURE)
711 return FAILURE;
713 return SUCCESS;
718 gfc_check_eoshift (gfc_expr * array, gfc_expr * shift, gfc_expr * boundary,
719 gfc_expr * dim)
722 if (array_check (array, 0) == FAILURE)
723 return FAILURE;
725 if (type_check (shift, 1, BT_INTEGER) == FAILURE)
726 return FAILURE;
728 if (array->rank == 1)
730 if (scalar_check (shift, 2) == FAILURE)
731 return FAILURE;
733 else
735 /* TODO: more weird restrictions on shift. */
738 if (boundary != NULL)
740 if (same_type_check (array, 0, boundary, 2) == FAILURE)
741 return FAILURE;
743 /* TODO: more restrictions on boundary. */
746 if (dim_check (dim, 1, 1) == FAILURE)
747 return FAILURE;
749 return SUCCESS;
753 /* This is used for the g77 one-argument Bessel functions, and the
754 error function. */
757 gfc_check_g77_math1 (gfc_expr * x)
760 if (scalar_check (x, 0) == FAILURE)
761 return FAILURE;
763 if (type_check (x, 0, BT_REAL) == FAILURE)
764 return FAILURE;
766 return SUCCESS;
771 gfc_check_huge (gfc_expr * x)
774 if (int_or_real_check (x, 0) == FAILURE)
775 return FAILURE;
777 return SUCCESS;
781 /* Check that the single argument is an integer. */
784 gfc_check_i (gfc_expr * i)
787 if (type_check (i, 0, BT_INTEGER) == FAILURE)
788 return FAILURE;
790 return SUCCESS;
795 gfc_check_iand (gfc_expr * i, gfc_expr * j)
798 if (type_check (i, 0, BT_INTEGER) == FAILURE
799 || type_check (j, 1, BT_INTEGER) == FAILURE)
800 return FAILURE;
802 if (same_type_check (i, 0, j, 1) == FAILURE)
803 return FAILURE;
805 return SUCCESS;
810 gfc_check_ibclr (gfc_expr * i, gfc_expr * pos)
813 if (type_check (i, 0, BT_INTEGER) == FAILURE
814 || type_check (pos, 1, BT_INTEGER) == FAILURE
815 || kind_value_check (pos, 1, gfc_default_integer_kind) == FAILURE)
816 return FAILURE;
818 return SUCCESS;
823 gfc_check_ibits (gfc_expr * i, gfc_expr * pos, gfc_expr * len)
826 if (type_check (i, 0, BT_INTEGER) == FAILURE
827 || type_check (pos, 1, BT_INTEGER) == FAILURE
828 || kind_value_check (pos, 1, gfc_default_integer_kind) == FAILURE
829 || type_check (len, 2, BT_INTEGER) == FAILURE)
830 return FAILURE;
832 return SUCCESS;
837 gfc_check_ibset (gfc_expr * i, gfc_expr * pos)
840 if (type_check (i, 0, BT_INTEGER) == FAILURE
841 || type_check (pos, 1, BT_INTEGER) == FAILURE
842 || kind_value_check (pos, 1, gfc_default_integer_kind) == FAILURE)
843 return FAILURE;
845 return SUCCESS;
850 gfc_check_idnint (gfc_expr * a)
853 if (double_check (a, 0) == FAILURE)
854 return FAILURE;
856 return SUCCESS;
861 gfc_check_ieor (gfc_expr * i, gfc_expr * j)
864 if (type_check (i, 0, BT_INTEGER) == FAILURE
865 || type_check (j, 1, BT_INTEGER) == FAILURE)
866 return FAILURE;
868 if (same_type_check (i, 0, j, 1) == FAILURE)
869 return FAILURE;
871 return SUCCESS;
876 gfc_check_index (gfc_expr * string, gfc_expr * substring, gfc_expr * back)
879 if (type_check (string, 0, BT_CHARACTER) == FAILURE
880 || type_check (substring, 1, BT_CHARACTER) == FAILURE)
881 return FAILURE;
884 if (back != NULL && type_check (back, 2, BT_LOGICAL) == FAILURE)
885 return FAILURE;
887 if (string->ts.kind != substring->ts.kind)
889 must_be (substring, 1, "the same kind as 'string'");
890 return FAILURE;
893 return SUCCESS;
898 gfc_check_int (gfc_expr * x, gfc_expr * kind)
901 if (numeric_check (x, 0) == FAILURE
902 || kind_check (kind, 1, BT_INTEGER) == FAILURE)
903 return FAILURE;
905 return SUCCESS;
910 gfc_check_ior (gfc_expr * i, gfc_expr * j)
913 if (type_check (i, 0, BT_INTEGER) == FAILURE
914 || type_check (j, 1, BT_INTEGER) == FAILURE)
915 return FAILURE;
917 if (same_type_check (i, 0, j, 1) == FAILURE)
918 return FAILURE;
920 return SUCCESS;
925 gfc_check_ishft (gfc_expr * i, gfc_expr * shift)
928 if (type_check (i, 0, BT_INTEGER) == FAILURE
929 || type_check (shift, 1, BT_INTEGER) == FAILURE)
930 return FAILURE;
932 return SUCCESS;
937 gfc_check_ishftc (gfc_expr * i, gfc_expr * shift, gfc_expr * size)
940 if (type_check (i, 0, BT_INTEGER) == FAILURE
941 || type_check (shift, 1, BT_INTEGER) == FAILURE)
942 return FAILURE;
944 if (size != NULL && type_check (size, 2, BT_INTEGER) == FAILURE)
945 return FAILURE;
947 return SUCCESS;
952 gfc_check_kind (gfc_expr * x)
955 if (x->ts.type == BT_DERIVED)
957 must_be (x, 0, "a non-derived type");
958 return FAILURE;
961 return SUCCESS;
966 gfc_check_lbound (gfc_expr * array, gfc_expr * dim)
969 if (array_check (array, 0) == FAILURE)
970 return FAILURE;
972 if (dim != NULL)
974 if (dim_check (dim, 1, 1) == FAILURE)
975 return FAILURE;
977 if (dim_rank_check (dim, array, 1) == FAILURE)
978 return FAILURE;
980 return SUCCESS;
985 gfc_check_logical (gfc_expr * a, gfc_expr * kind)
988 if (type_check (a, 0, BT_LOGICAL) == FAILURE)
989 return FAILURE;
990 if (kind_check (kind, 1, BT_LOGICAL) == FAILURE)
991 return FAILURE;
993 return SUCCESS;
997 /* Min/max family. */
999 static try
1000 min_max_args (gfc_actual_arglist * arg)
1003 if (arg == NULL || arg->next == NULL)
1005 gfc_error ("Intrinsic '%s' at %L must have at least two arguments",
1006 gfc_current_intrinsic, gfc_current_intrinsic_where);
1007 return FAILURE;
1010 return SUCCESS;
1014 static try
1015 check_rest (bt type, int kind, gfc_actual_arglist * arg)
1017 gfc_expr *x;
1018 int n;
1020 if (min_max_args (arg) == FAILURE)
1021 return FAILURE;
1023 n = 1;
1025 for (; arg; arg = arg->next, n++)
1027 x = arg->expr;
1028 if (x->ts.type != type || x->ts.kind != kind)
1030 if (x->ts.type == type)
1032 if (gfc_notify_std (GFC_STD_GNU,
1033 "Extension: Different type kinds at %L", &x->where)
1034 == FAILURE)
1035 return FAILURE;
1037 else
1039 gfc_error ("'a%d' argument of '%s' intrinsic at %L must be %s(%d)",
1040 n, gfc_current_intrinsic, &x->where,
1041 gfc_basic_typename (type), kind);
1042 return FAILURE;
1047 return SUCCESS;
1052 gfc_check_min_max (gfc_actual_arglist * arg)
1054 gfc_expr *x;
1056 if (min_max_args (arg) == FAILURE)
1057 return FAILURE;
1059 x = arg->expr;
1061 if (x->ts.type != BT_INTEGER && x->ts.type != BT_REAL)
1063 gfc_error
1064 ("'a1' argument of '%s' intrinsic at %L must be INTEGER or REAL",
1065 gfc_current_intrinsic, &x->where);
1066 return FAILURE;
1069 return check_rest (x->ts.type, x->ts.kind, arg);
1074 gfc_check_min_max_integer (gfc_actual_arglist * arg)
1077 return check_rest (BT_INTEGER, gfc_default_integer_kind, arg);
1082 gfc_check_min_max_real (gfc_actual_arglist * arg)
1085 return check_rest (BT_REAL, gfc_default_real_kind, arg);
1090 gfc_check_min_max_double (gfc_actual_arglist * arg)
1093 return check_rest (BT_REAL, gfc_default_double_kind, arg);
1096 /* End of min/max family. */
1100 gfc_check_matmul (gfc_expr * matrix_a, gfc_expr * matrix_b)
1103 if ((matrix_a->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_b->ts))
1105 must_be (matrix_a, 0, "numeric or LOGICAL");
1106 return FAILURE;
1109 if ((matrix_b->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_a->ts))
1111 must_be (matrix_b, 0, "numeric or LOGICAL");
1112 return FAILURE;
1115 switch (matrix_a->rank)
1117 case 1:
1118 if (rank_check (matrix_b, 1, 2) == FAILURE)
1119 return FAILURE;
1120 break;
1122 case 2:
1123 if (matrix_b->rank == 2)
1124 break;
1125 if (rank_check (matrix_b, 1, 1) == FAILURE)
1126 return FAILURE;
1127 break;
1129 default:
1130 must_be (matrix_a, 0, "of rank 1 or 2");
1131 return FAILURE;
1134 return SUCCESS;
1138 /* Whoever came up with this interface was probably on something.
1139 The possibilities for the occupation of the second and third
1140 parameters are:
1142 Arg #2 Arg #3
1143 NULL NULL
1144 DIM NULL
1145 MASK NULL
1146 NULL MASK minloc(array, mask=m)
1147 DIM MASK
1149 I.e. in the case of minloc(array,mask), mask will be in the second
1150 position of the argument list and we'll have to fix that up. */
1153 gfc_check_minloc_maxloc (gfc_actual_arglist * ap)
1155 gfc_expr *a, *m, *d;
1157 a = ap->expr;
1158 if (int_or_real_check (a, 0) == FAILURE
1159 || array_check (a, 0) == FAILURE)
1160 return FAILURE;
1162 d = ap->next->expr;
1163 m = ap->next->next->expr;
1165 if (m == NULL && d != NULL && d->ts.type == BT_LOGICAL
1166 && ap->next->name[0] == '\0')
1168 m = d;
1169 d = NULL;
1171 ap->next->expr = NULL;
1172 ap->next->next->expr = m;
1175 if (d != NULL
1176 && (scalar_check (d, 1) == FAILURE
1177 || type_check (d, 1, BT_INTEGER) == FAILURE))
1178 return FAILURE;
1180 if (m != NULL && type_check (m, 2, BT_LOGICAL) == FAILURE)
1181 return FAILURE;
1183 return SUCCESS;
1187 /* Similar to minloc/maxloc, the argument list might need to be
1188 reordered for the MINVAL, MAXVAL, PRODUCT, and SUM intrinsics. The
1189 difference is that MINLOC/MAXLOC take an additional KIND argument.
1190 The possibilities are:
1192 Arg #2 Arg #3
1193 NULL NULL
1194 DIM NULL
1195 MASK NULL
1196 NULL MASK minval(array, mask=m)
1197 DIM MASK
1199 I.e. in the case of minval(array,mask), mask will be in the second
1200 position of the argument list and we'll have to fix that up. */
1202 static try
1203 check_reduction (gfc_actual_arglist * ap)
1205 gfc_expr *m, *d;
1207 d = ap->next->expr;
1208 m = ap->next->next->expr;
1210 if (m == NULL && d != NULL && d->ts.type == BT_LOGICAL
1211 && ap->next->name[0] == '\0')
1213 m = d;
1214 d = NULL;
1216 ap->next->expr = NULL;
1217 ap->next->next->expr = m;
1220 if (d != NULL
1221 && (scalar_check (d, 1) == FAILURE
1222 || type_check (d, 1, BT_INTEGER) == FAILURE))
1223 return FAILURE;
1225 if (m != NULL && type_check (m, 2, BT_LOGICAL) == FAILURE)
1226 return FAILURE;
1228 return SUCCESS;
1233 gfc_check_minval_maxval (gfc_actual_arglist * ap)
1236 if (int_or_real_check (ap->expr, 0) == FAILURE
1237 || array_check (ap->expr, 0) == FAILURE)
1238 return FAILURE;
1240 return check_reduction (ap);
1245 gfc_check_product_sum (gfc_actual_arglist * ap)
1248 if (numeric_check (ap->expr, 0) == FAILURE
1249 || array_check (ap->expr, 0) == FAILURE)
1250 return FAILURE;
1252 return check_reduction (ap);
1257 gfc_check_merge (gfc_expr * tsource, gfc_expr * fsource, gfc_expr * mask)
1260 if (same_type_check (tsource, 0, fsource, 1) == FAILURE)
1261 return FAILURE;
1263 if (type_check (mask, 2, BT_LOGICAL) == FAILURE)
1264 return FAILURE;
1266 return SUCCESS;
1271 gfc_check_nearest (gfc_expr * x, gfc_expr * s)
1274 if (type_check (x, 0, BT_REAL) == FAILURE)
1275 return FAILURE;
1277 if (type_check (s, 1, BT_REAL) == FAILURE)
1278 return FAILURE;
1280 return SUCCESS;
1285 gfc_check_null (gfc_expr * mold)
1287 symbol_attribute attr;
1289 if (mold == NULL)
1290 return SUCCESS;
1292 if (variable_check (mold, 0) == FAILURE)
1293 return FAILURE;
1295 attr = gfc_variable_attr (mold, NULL);
1297 if (!attr.pointer)
1299 must_be (mold, 0, "a POINTER");
1300 return FAILURE;
1303 return SUCCESS;
1308 gfc_check_pack (gfc_expr * array, gfc_expr * mask, gfc_expr * vector)
1311 if (array_check (array, 0) == FAILURE)
1312 return FAILURE;
1314 if (type_check (mask, 1, BT_LOGICAL) == FAILURE)
1315 return FAILURE;
1317 if (mask->rank != 0 && mask->rank != array->rank)
1319 must_be (array, 0, "conformable with 'mask' argument");
1320 return FAILURE;
1323 if (vector != NULL)
1325 if (same_type_check (array, 0, vector, 2) == FAILURE)
1326 return FAILURE;
1328 if (rank_check (vector, 2, 1) == FAILURE)
1329 return FAILURE;
1331 /* TODO: More constraints here. */
1334 return SUCCESS;
1339 gfc_check_precision (gfc_expr * x)
1342 if (x->ts.type != BT_REAL && x->ts.type != BT_COMPLEX)
1344 must_be (x, 0, "of type REAL or COMPLEX");
1345 return FAILURE;
1348 return SUCCESS;
1353 gfc_check_present (gfc_expr * a)
1355 gfc_symbol *sym;
1357 if (variable_check (a, 0) == FAILURE)
1358 return FAILURE;
1360 sym = a->symtree->n.sym;
1361 if (!sym->attr.dummy)
1363 must_be (a, 0, "a dummy variable");
1364 return FAILURE;
1367 if (!sym->attr.optional)
1369 must_be (a, 0, "an OPTIONAL dummy variable");
1370 return FAILURE;
1373 return SUCCESS;
1378 gfc_check_radix (gfc_expr * x)
1381 if (int_or_real_check (x, 0) == FAILURE)
1382 return FAILURE;
1384 return SUCCESS;
1389 gfc_check_range (gfc_expr * x)
1392 if (numeric_check (x, 0) == FAILURE)
1393 return FAILURE;
1395 return SUCCESS;
1399 /* real, float, sngl. */
1401 gfc_check_real (gfc_expr * a, gfc_expr * kind)
1404 if (numeric_check (a, 0) == FAILURE)
1405 return FAILURE;
1407 if (kind_check (kind, 1, BT_REAL) == FAILURE)
1408 return FAILURE;
1410 return SUCCESS;
1415 gfc_check_repeat (gfc_expr * x, gfc_expr * y)
1418 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
1419 return FAILURE;
1421 if (scalar_check (x, 0) == FAILURE)
1422 return FAILURE;
1424 if (type_check (y, 0, BT_INTEGER) == FAILURE)
1425 return FAILURE;
1427 if (scalar_check (y, 1) == FAILURE)
1428 return FAILURE;
1430 return SUCCESS;
1435 gfc_check_reshape (gfc_expr * source, gfc_expr * shape,
1436 gfc_expr * pad, gfc_expr * order)
1438 mpz_t size;
1439 int m;
1441 if (array_check (source, 0) == FAILURE)
1442 return FAILURE;
1444 if (rank_check (shape, 1, 1) == FAILURE)
1445 return FAILURE;
1447 if (type_check (shape, 1, BT_INTEGER) == FAILURE)
1448 return FAILURE;
1450 if (gfc_array_size (shape, &size) != SUCCESS)
1452 gfc_error ("'shape' argument of 'reshape' intrinsic at %L must be an "
1453 "array of constant size", &shape->where);
1454 return FAILURE;
1457 m = mpz_cmp_ui (size, GFC_MAX_DIMENSIONS);
1458 mpz_clear (size);
1460 if (m > 0)
1462 gfc_error
1463 ("'shape' argument of 'reshape' intrinsic at %L has more than "
1464 stringize (GFC_MAX_DIMENSIONS) " elements", &shape->where);
1465 return FAILURE;
1468 if (pad != NULL)
1470 if (same_type_check (source, 0, pad, 2) == FAILURE)
1471 return FAILURE;
1472 if (array_check (pad, 2) == FAILURE)
1473 return FAILURE;
1476 if (order != NULL && array_check (order, 3) == FAILURE)
1477 return FAILURE;
1479 return SUCCESS;
1484 gfc_check_scale (gfc_expr * x, gfc_expr * i)
1487 if (type_check (x, 0, BT_REAL) == FAILURE)
1488 return FAILURE;
1490 if (type_check (i, 1, BT_INTEGER) == FAILURE)
1491 return FAILURE;
1493 return SUCCESS;
1498 gfc_check_scan (gfc_expr * x, gfc_expr * y, gfc_expr * z)
1501 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
1502 return FAILURE;
1504 if (type_check (y, 1, BT_CHARACTER) == FAILURE)
1505 return FAILURE;
1507 if (z != NULL && type_check (z, 2, BT_LOGICAL) == FAILURE)
1508 return FAILURE;
1510 if (same_type_check (x, 0, y, 1) == FAILURE)
1511 return FAILURE;
1513 return SUCCESS;
1518 gfc_check_selected_real_kind (gfc_expr * p, gfc_expr * r)
1521 if (p == NULL && r == NULL)
1523 gfc_error ("Missing arguments to %s intrinsic at %L",
1524 gfc_current_intrinsic, gfc_current_intrinsic_where);
1526 return FAILURE;
1529 if (p != NULL && type_check (p, 0, BT_INTEGER) == FAILURE)
1530 return FAILURE;
1532 if (r != NULL && type_check (r, 1, BT_INTEGER) == FAILURE)
1533 return FAILURE;
1535 return SUCCESS;
1540 gfc_check_set_exponent (gfc_expr * x, gfc_expr * i)
1543 if (type_check (x, 0, BT_REAL) == FAILURE)
1544 return FAILURE;
1546 if (type_check (i, 1, BT_INTEGER) == FAILURE)
1547 return FAILURE;
1549 return SUCCESS;
1554 gfc_check_shape (gfc_expr * source)
1556 gfc_array_ref *ar;
1558 if (source->rank == 0 || source->expr_type != EXPR_VARIABLE)
1559 return SUCCESS;
1561 ar = gfc_find_array_ref (source);
1563 if (ar->as && ar->as->type == AS_ASSUMED_SIZE)
1565 gfc_error ("'source' argument of 'shape' intrinsic at %L must not be "
1566 "an assumed size array", &source->where);
1567 return FAILURE;
1570 return SUCCESS;
1575 gfc_check_size (gfc_expr * array, gfc_expr * dim)
1578 if (array_check (array, 0) == FAILURE)
1579 return FAILURE;
1581 if (dim != NULL)
1583 if (type_check (dim, 1, BT_INTEGER) == FAILURE)
1584 return FAILURE;
1586 if (kind_value_check (dim, 1, gfc_default_integer_kind) == FAILURE)
1587 return FAILURE;
1589 if (dim_rank_check (dim, array, 0) == FAILURE)
1590 return FAILURE;
1593 return SUCCESS;
1598 gfc_check_sign (gfc_expr * a, gfc_expr * b)
1601 if (int_or_real_check (a, 0) == FAILURE)
1602 return FAILURE;
1604 if (same_type_check (a, 0, b, 1) == FAILURE)
1605 return FAILURE;
1607 return SUCCESS;
1612 gfc_check_spread (gfc_expr * source, gfc_expr * dim, gfc_expr * ncopies)
1615 if (source->rank >= GFC_MAX_DIMENSIONS)
1617 must_be (source, 0, "less than rank " stringize (GFC_MAX_DIMENSIONS));
1618 return FAILURE;
1621 if (dim_check (dim, 1, 0) == FAILURE)
1622 return FAILURE;
1624 if (type_check (ncopies, 2, BT_INTEGER) == FAILURE)
1625 return FAILURE;
1626 if (scalar_check (ncopies, 2) == FAILURE)
1627 return FAILURE;
1629 return SUCCESS;
1634 gfc_check_transfer (gfc_expr * source ATTRIBUTE_UNUSED,
1635 gfc_expr * mold ATTRIBUTE_UNUSED,
1636 gfc_expr * size)
1639 if (size != NULL)
1641 if (type_check (size, 2, BT_INTEGER) == FAILURE)
1642 return FAILURE;
1644 if (scalar_check (size, 2) == FAILURE)
1645 return FAILURE;
1647 if (nonoptional_check (size, 2) == FAILURE)
1648 return FAILURE;
1651 return SUCCESS;
1656 gfc_check_transpose (gfc_expr * matrix)
1659 if (rank_check (matrix, 0, 2) == FAILURE)
1660 return FAILURE;
1662 return SUCCESS;
1667 gfc_check_ubound (gfc_expr * array, gfc_expr * dim)
1670 if (array_check (array, 0) == FAILURE)
1671 return FAILURE;
1673 if (dim != NULL)
1675 if (dim_check (dim, 1, 1) == FAILURE)
1676 return FAILURE;
1678 if (dim_rank_check (dim, array, 0) == FAILURE)
1679 return FAILURE;
1681 return SUCCESS;
1686 gfc_check_unpack (gfc_expr * vector, gfc_expr * mask, gfc_expr * field)
1689 if (rank_check (vector, 0, 1) == FAILURE)
1690 return FAILURE;
1692 if (array_check (mask, 1) == FAILURE)
1693 return FAILURE;
1695 if (type_check (mask, 1, BT_LOGICAL) == FAILURE)
1696 return FAILURE;
1698 if (same_type_check (vector, 0, field, 2) == FAILURE)
1699 return FAILURE;
1701 return SUCCESS;
1706 gfc_check_verify (gfc_expr * x, gfc_expr * y, gfc_expr * z)
1709 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
1710 return FAILURE;
1712 if (same_type_check (x, 0, y, 1) == FAILURE)
1713 return FAILURE;
1715 if (z != NULL && type_check (z, 2, BT_LOGICAL) == FAILURE)
1716 return FAILURE;
1718 return SUCCESS;
1723 gfc_check_trim (gfc_expr * x)
1725 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
1726 return FAILURE;
1728 if (scalar_check (x, 0) == FAILURE)
1729 return FAILURE;
1731 return SUCCESS;
1735 /* Common check function for the half a dozen intrinsics that have a
1736 single real argument. */
1739 gfc_check_x (gfc_expr * x)
1742 if (type_check (x, 0, BT_REAL) == FAILURE)
1743 return FAILURE;
1745 return SUCCESS;
1749 /************* Check functions for intrinsic subroutines *************/
1752 gfc_check_cpu_time (gfc_expr * time)
1755 if (scalar_check (time, 0) == FAILURE)
1756 return FAILURE;
1758 if (type_check (time, 0, BT_REAL) == FAILURE)
1759 return FAILURE;
1761 if (variable_check (time, 0) == FAILURE)
1762 return FAILURE;
1764 return SUCCESS;
1769 gfc_check_date_and_time (gfc_expr * date, gfc_expr * time,
1770 gfc_expr * zone, gfc_expr * values)
1773 if (date != NULL)
1775 if (type_check (date, 0, BT_CHARACTER) == FAILURE)
1776 return FAILURE;
1777 if (scalar_check (date, 0) == FAILURE)
1778 return FAILURE;
1779 if (variable_check (date, 0) == FAILURE)
1780 return FAILURE;
1783 if (time != NULL)
1785 if (type_check (time, 1, BT_CHARACTER) == FAILURE)
1786 return FAILURE;
1787 if (scalar_check (time, 1) == FAILURE)
1788 return FAILURE;
1789 if (variable_check (time, 1) == FAILURE)
1790 return FAILURE;
1793 if (zone != NULL)
1795 if (type_check (zone, 2, BT_CHARACTER) == FAILURE)
1796 return FAILURE;
1797 if (scalar_check (zone, 2) == FAILURE)
1798 return FAILURE;
1799 if (variable_check (zone, 2) == FAILURE)
1800 return FAILURE;
1803 if (values != NULL)
1805 if (type_check (values, 3, BT_INTEGER) == FAILURE)
1806 return FAILURE;
1807 if (array_check (values, 3) == FAILURE)
1808 return FAILURE;
1809 if (rank_check (values, 3, 1) == FAILURE)
1810 return FAILURE;
1811 if (variable_check (values, 3) == FAILURE)
1812 return FAILURE;
1815 return SUCCESS;
1820 gfc_check_mvbits (gfc_expr * from, gfc_expr * frompos, gfc_expr * len,
1821 gfc_expr * to, gfc_expr * topos)
1824 if (type_check (from, 0, BT_INTEGER) == FAILURE)
1825 return FAILURE;
1827 if (type_check (frompos, 1, BT_INTEGER) == FAILURE)
1828 return FAILURE;
1830 if (type_check (len, 2, BT_INTEGER) == FAILURE)
1831 return FAILURE;
1833 if (same_type_check (from, 0, to, 3) == FAILURE)
1834 return FAILURE;
1836 if (variable_check (to, 3) == FAILURE)
1837 return FAILURE;
1839 if (type_check (topos, 4, BT_INTEGER) == FAILURE)
1840 return FAILURE;
1842 return SUCCESS;
1847 gfc_check_random_number (gfc_expr * harvest)
1850 if (type_check (harvest, 0, BT_REAL) == FAILURE)
1851 return FAILURE;
1853 if (variable_check (harvest, 0) == FAILURE)
1854 return FAILURE;
1856 return SUCCESS;
1861 gfc_check_random_seed (gfc_expr * size, gfc_expr * put, gfc_expr * get)
1864 if (size != NULL)
1866 if (scalar_check (size, 0) == FAILURE)
1867 return FAILURE;
1869 if (type_check (size, 0, BT_INTEGER) == FAILURE)
1870 return FAILURE;
1872 if (variable_check (size, 0) == FAILURE)
1873 return FAILURE;
1875 if (kind_value_check (size, 0, gfc_default_integer_kind) == FAILURE)
1876 return FAILURE;
1879 if (put != NULL)
1882 if (size != NULL)
1883 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic,
1884 &put->where);
1886 if (array_check (put, 1) == FAILURE)
1887 return FAILURE;
1889 if (rank_check (put, 1, 1) == FAILURE)
1890 return FAILURE;
1892 if (type_check (put, 1, BT_INTEGER) == FAILURE)
1893 return FAILURE;
1895 if (kind_value_check (put, 1, gfc_default_integer_kind) == FAILURE)
1896 return FAILURE;
1899 if (get != NULL)
1902 if (size != NULL || put != NULL)
1903 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic,
1904 &get->where);
1906 if (array_check (get, 2) == FAILURE)
1907 return FAILURE;
1909 if (rank_check (get, 2, 1) == FAILURE)
1910 return FAILURE;
1912 if (type_check (get, 2, BT_INTEGER) == FAILURE)
1913 return FAILURE;
1915 if (variable_check (get, 2) == FAILURE)
1916 return FAILURE;
1918 if (kind_value_check (get, 2, gfc_default_integer_kind) == FAILURE)
1919 return FAILURE;
1922 return SUCCESS;
1926 gfc_check_second_sub (gfc_expr * time)
1929 if (scalar_check (time, 0) == FAILURE)
1930 return FAILURE;
1932 if (type_check (time, 0, BT_REAL) == FAILURE)
1933 return FAILURE;
1935 if (kind_value_check(time, 0, 4) == FAILURE)
1936 return FAILURE;
1938 return SUCCESS;
1942 /* The arguments of SYSTEM_CLOCK are scalar, integer variables. Note,
1943 count, count_rate, and count_max are all optional arguments */
1946 gfc_check_system_clock (gfc_expr * count, gfc_expr * count_rate,
1947 gfc_expr * count_max)
1950 if (count != NULL)
1952 if (scalar_check (count, 0) == FAILURE)
1953 return FAILURE;
1955 if (type_check (count, 0, BT_INTEGER) == FAILURE)
1956 return FAILURE;
1958 if (variable_check (count, 0) == FAILURE)
1959 return FAILURE;
1962 if (count_rate != NULL)
1964 if (scalar_check (count_rate, 1) == FAILURE)
1965 return FAILURE;
1967 if (type_check (count_rate, 1, BT_INTEGER) == FAILURE)
1968 return FAILURE;
1970 if (variable_check (count_rate, 1) == FAILURE)
1971 return FAILURE;
1973 if (count != NULL && same_type_check(count, 0, count_rate, 1) == FAILURE)
1974 return FAILURE;
1978 if (count_max != NULL)
1980 if (scalar_check (count_max, 2) == FAILURE)
1981 return FAILURE;
1983 if (type_check (count_max, 2, BT_INTEGER) == FAILURE)
1984 return FAILURE;
1986 if (variable_check (count_max, 2) == FAILURE)
1987 return FAILURE;
1989 if (count != NULL && same_type_check(count, 0, count_max, 2) == FAILURE)
1990 return FAILURE;
1992 if (count_rate != NULL
1993 && same_type_check(count_rate, 1, count_max, 2) == FAILURE)
1994 return FAILURE;
1998 return SUCCESS;
2002 gfc_check_irand (gfc_expr * x)
2004 if (x == NULL)
2005 return SUCCESS;
2007 if (scalar_check (x, 0) == FAILURE)
2008 return FAILURE;
2010 if (type_check (x, 0, BT_INTEGER) == FAILURE)
2011 return FAILURE;
2013 if (kind_value_check(x, 0, 4) == FAILURE)
2014 return FAILURE;
2016 return SUCCESS;
2020 gfc_check_rand (gfc_expr * x)
2022 if (x == NULL)
2023 return SUCCESS;
2025 if (scalar_check (x, 0) == FAILURE)
2026 return FAILURE;
2028 if (type_check (x, 0, BT_INTEGER) == FAILURE)
2029 return FAILURE;
2031 if (kind_value_check(x, 0, 4) == FAILURE)
2032 return FAILURE;
2034 return SUCCESS;
2038 gfc_check_srand (gfc_expr * x)
2040 if (scalar_check (x, 0) == FAILURE)
2041 return FAILURE;
2043 if (type_check (x, 0, BT_INTEGER) == FAILURE)
2044 return FAILURE;
2046 if (kind_value_check(x, 0, 4) == FAILURE)
2047 return FAILURE;
2049 return SUCCESS;
2053 gfc_check_etime (gfc_expr * x)
2055 if (array_check (x, 0) == FAILURE)
2056 return FAILURE;
2058 if (rank_check (x, 0, 1) == FAILURE)
2059 return FAILURE;
2061 if (variable_check (x, 0) == FAILURE)
2062 return FAILURE;
2064 if (type_check (x, 0, BT_REAL) == FAILURE)
2065 return FAILURE;
2067 if (kind_value_check(x, 0, 4) == FAILURE)
2068 return FAILURE;
2070 return SUCCESS;
2074 gfc_check_etime_sub (gfc_expr * values, gfc_expr * time)
2076 if (array_check (values, 0) == FAILURE)
2077 return FAILURE;
2079 if (rank_check (values, 0, 1) == FAILURE)
2080 return FAILURE;
2082 if (variable_check (values, 0) == FAILURE)
2083 return FAILURE;
2085 if (type_check (values, 0, BT_REAL) == FAILURE)
2086 return FAILURE;
2088 if (kind_value_check(values, 0, 4) == FAILURE)
2089 return FAILURE;
2091 if (scalar_check (time, 1) == FAILURE)
2092 return FAILURE;
2094 if (type_check (time, 1, BT_REAL) == FAILURE)
2095 return FAILURE;
2097 if (kind_value_check(time, 1, 4) == FAILURE)
2098 return FAILURE;
2100 return SUCCESS;
2105 gfc_check_getcwd_sub (gfc_expr * cwd, gfc_expr * status)
2108 if (type_check (cwd, 0, BT_CHARACTER) == FAILURE)
2109 return FAILURE;
2111 if (scalar_check (status, 1) == FAILURE)
2112 return FAILURE;
2114 if (type_check (status, 1, BT_INTEGER) == FAILURE)
2115 return FAILURE;
2117 return SUCCESS;
2122 gfc_check_system_sub (gfc_expr * cmd, gfc_expr * status)
2124 if (type_check (cmd, 0, BT_CHARACTER) == FAILURE)
2125 return FAILURE;
2127 if (scalar_check (status, 1) == FAILURE)
2128 return FAILURE;
2130 if (type_check (status, 1, BT_INTEGER) == FAILURE)
2131 return FAILURE;
2133 if (kind_value_check (status, 1, gfc_default_integer_kind) == FAILURE)
2134 return FAILURE;
2136 return SUCCESS;