2005-04-05 Kelley Cook <kcook@gcc.gnu.org>
[official-gcc.git] / gcc / fortran / check.c
blob8fae4449fbffd0de1595de55c388ae490e44b29a
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 an expression is real or complex. */
93 static try
94 real_or_complex_check (gfc_expr * e, int n)
96 if (e->ts.type != BT_REAL && e->ts.type != BT_COMPLEX)
98 must_be (e, n, "REAL or COMPLEX");
99 return FAILURE;
102 return SUCCESS;
106 /* Check that the expression is an optional constant integer
107 and that it specifies a valid kind for that type. */
109 static try
110 kind_check (gfc_expr * k, int n, bt type)
112 int kind;
114 if (k == NULL)
115 return SUCCESS;
117 if (type_check (k, n, BT_INTEGER) == FAILURE)
118 return FAILURE;
120 if (k->expr_type != EXPR_CONSTANT)
122 must_be (k, n, "a constant");
123 return FAILURE;
126 if (gfc_extract_int (k, &kind) != NULL
127 || gfc_validate_kind (type, kind, true) < 0)
129 gfc_error ("Invalid kind for %s at %L", gfc_basic_typename (type),
130 &k->where);
131 return FAILURE;
134 return SUCCESS;
138 /* Make sure the expression is a double precision real. */
140 static try
141 double_check (gfc_expr * d, int n)
143 if (type_check (d, n, BT_REAL) == FAILURE)
144 return FAILURE;
146 if (d->ts.kind != gfc_default_double_kind)
148 must_be (d, n, "double precision");
149 return FAILURE;
152 return SUCCESS;
156 /* Make sure the expression is a logical array. */
158 static try
159 logical_array_check (gfc_expr * array, int n)
161 if (array->ts.type != BT_LOGICAL || array->rank == 0)
163 must_be (array, n, "a logical array");
164 return FAILURE;
167 return SUCCESS;
171 /* Make sure an expression is an array. */
173 static try
174 array_check (gfc_expr * e, int n)
176 if (e->rank != 0)
177 return SUCCESS;
179 must_be (e, n, "an array");
181 return FAILURE;
185 /* Make sure an expression is a scalar. */
187 static try
188 scalar_check (gfc_expr * e, int n)
190 if (e->rank == 0)
191 return SUCCESS;
193 must_be (e, n, "a scalar");
195 return FAILURE;
199 /* Make sure two expression have the same type. */
201 static try
202 same_type_check (gfc_expr * e, int n, gfc_expr * f, int m)
204 char message[100];
206 if (gfc_compare_types (&e->ts, &f->ts))
207 return SUCCESS;
209 sprintf (message, "the same type and kind as '%s'",
210 gfc_current_intrinsic_arg[n]);
212 must_be (f, m, message);
214 return FAILURE;
218 /* Make sure that an expression has a certain (nonzero) rank. */
220 static try
221 rank_check (gfc_expr * e, int n, int rank)
223 char message[100];
225 if (e->rank == rank)
226 return SUCCESS;
228 sprintf (message, "of rank %d", rank);
230 must_be (e, n, message);
232 return FAILURE;
236 /* Make sure a variable expression is not an optional dummy argument. */
238 static try
239 nonoptional_check (gfc_expr * e, int n)
241 if (e->expr_type == EXPR_VARIABLE && e->symtree->n.sym->attr.optional)
243 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be OPTIONAL",
244 gfc_current_intrinsic_arg[n], gfc_current_intrinsic,
245 &e->where);
249 /* TODO: Recursive check on nonoptional variables? */
251 return SUCCESS;
255 /* Check that an expression has a particular kind. */
257 static try
258 kind_value_check (gfc_expr * e, int n, int k)
260 char message[100];
262 if (e->ts.kind == k)
263 return SUCCESS;
265 sprintf (message, "of kind %d", k);
267 must_be (e, n, message);
268 return FAILURE;
272 /* Make sure an expression is a variable. */
274 static try
275 variable_check (gfc_expr * e, int n)
277 if ((e->expr_type == EXPR_VARIABLE
278 && e->symtree->n.sym->attr.flavor != FL_PARAMETER)
279 || (e->expr_type == EXPR_FUNCTION
280 && e->symtree->n.sym->result == e->symtree->n.sym))
281 return SUCCESS;
283 if (e->expr_type == EXPR_VARIABLE
284 && e->symtree->n.sym->attr.intent == INTENT_IN)
286 gfc_error ("'%s' argument of '%s' intrinsic at %L cannot be INTENT(IN)",
287 gfc_current_intrinsic_arg[n], gfc_current_intrinsic,
288 &e->where);
289 return FAILURE;
292 must_be (e, n, "a variable");
294 return FAILURE;
298 /* Check the common DIM parameter for correctness. */
300 static try
301 dim_check (gfc_expr * dim, int n, int optional)
303 if (optional)
305 if (dim == NULL)
306 return SUCCESS;
308 if (nonoptional_check (dim, n) == FAILURE)
309 return FAILURE;
311 return SUCCESS;
314 if (dim == NULL)
316 gfc_error ("Missing DIM parameter in intrinsic '%s' at %L",
317 gfc_current_intrinsic, gfc_current_intrinsic_where);
318 return FAILURE;
321 if (type_check (dim, n, BT_INTEGER) == FAILURE)
322 return FAILURE;
324 if (scalar_check (dim, n) == FAILURE)
325 return FAILURE;
327 return SUCCESS;
331 /* If a DIM parameter is a constant, make sure that it is greater than
332 zero and less than or equal to the rank of the given array. If
333 allow_assumed is zero then dim must be less than the rank of the array
334 for assumed size arrays. */
336 static try
337 dim_rank_check (gfc_expr * dim, gfc_expr * array, int allow_assumed)
339 gfc_array_ref *ar;
340 int rank;
342 if (dim->expr_type != EXPR_CONSTANT || array->expr_type != EXPR_VARIABLE)
343 return SUCCESS;
345 ar = gfc_find_array_ref (array);
346 rank = array->rank;
347 if (ar->as->type == AS_ASSUMED_SIZE && !allow_assumed)
348 rank--;
350 if (mpz_cmp_ui (dim->value.integer, 1) < 0
351 || mpz_cmp_ui (dim->value.integer, rank) > 0)
353 gfc_error ("'dim' argument of '%s' intrinsic at %L is not a valid "
354 "dimension index", gfc_current_intrinsic, &dim->where);
356 return FAILURE;
359 return SUCCESS;
363 /***** Check functions *****/
365 /* Check subroutine suitable for intrinsics taking a real argument and
366 a kind argument for the result. */
368 static try
369 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)
384 return check_a_kind (a, kind, BT_INTEGER);
387 /* Check subroutine suitable for aint, anint. */
390 gfc_check_a_xkind (gfc_expr * a, gfc_expr * kind)
392 return check_a_kind (a, kind, BT_REAL);
396 gfc_check_abs (gfc_expr * a)
398 if (numeric_check (a, 0) == FAILURE)
399 return FAILURE;
401 return SUCCESS;
405 gfc_check_achar (gfc_expr * a)
408 if (type_check (a, 0, BT_INTEGER) == FAILURE)
409 return FAILURE;
411 return SUCCESS;
416 gfc_check_all_any (gfc_expr * mask, gfc_expr * dim)
418 if (logical_array_check (mask, 0) == FAILURE)
419 return FAILURE;
421 if (dim_check (dim, 1, 1) == FAILURE)
422 return FAILURE;
424 return SUCCESS;
429 gfc_check_allocated (gfc_expr * array)
431 if (variable_check (array, 0) == FAILURE)
432 return FAILURE;
434 if (array_check (array, 0) == FAILURE)
435 return FAILURE;
437 if (!array->symtree->n.sym->attr.allocatable)
439 must_be (array, 0, "ALLOCATABLE");
440 return FAILURE;
443 return SUCCESS;
447 /* Common check function where the first argument must be real or
448 integer and the second argument must be the same as the first. */
451 gfc_check_a_p (gfc_expr * a, gfc_expr * p)
453 if (int_or_real_check (a, 0) == FAILURE)
454 return FAILURE;
456 if (same_type_check (a, 0, p, 1) == FAILURE)
457 return FAILURE;
459 return SUCCESS;
464 gfc_check_associated (gfc_expr * pointer, gfc_expr * target)
466 symbol_attribute attr;
467 int i;
468 try t;
470 if (variable_check (pointer, 0) == FAILURE)
471 return FAILURE;
473 attr = gfc_variable_attr (pointer, NULL);
474 if (!attr.pointer)
476 must_be (pointer, 0, "a POINTER");
477 return FAILURE;
480 if (target == NULL)
481 return SUCCESS;
483 /* Target argument is optional. */
484 if (target->expr_type == EXPR_NULL)
486 gfc_error ("NULL pointer at %L is not permitted as actual argument "
487 "of '%s' intrinsic function",
488 &target->where, gfc_current_intrinsic);
489 return FAILURE;
492 attr = gfc_variable_attr (target, NULL);
493 if (!attr.pointer && !attr.target)
495 must_be (target, 1, "a POINTER or a TARGET");
496 return FAILURE;
499 t = SUCCESS;
500 if (same_type_check (pointer, 0, target, 1) == FAILURE)
501 t = FAILURE;
502 if (rank_check (target, 0, pointer->rank) == FAILURE)
503 t = FAILURE;
504 if (target->rank > 0)
506 for (i = 0; i < target->rank; i++)
507 if (target->ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
509 gfc_error ("Array section with a vector subscript at %L shall not "
510 "be the target of an pointer",
511 &target->where);
512 t = FAILURE;
513 break;
516 return t;
521 gfc_check_atan2 (gfc_expr * y, gfc_expr * x)
523 if (type_check (y, 0, BT_REAL) == FAILURE)
524 return FAILURE;
525 if (same_type_check (y, 0, x, 1) == FAILURE)
526 return FAILURE;
528 return SUCCESS;
532 /* BESJN and BESYN functions. */
535 gfc_check_besn (gfc_expr * n, gfc_expr * x)
537 if (scalar_check (n, 0) == FAILURE)
538 return FAILURE;
540 if (type_check (n, 0, BT_INTEGER) == FAILURE)
541 return FAILURE;
543 if (scalar_check (x, 1) == FAILURE)
544 return FAILURE;
546 if (type_check (x, 1, BT_REAL) == FAILURE)
547 return FAILURE;
549 return SUCCESS;
554 gfc_check_btest (gfc_expr * i, gfc_expr * pos)
556 if (type_check (i, 0, BT_INTEGER) == FAILURE)
557 return FAILURE;
558 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
559 return FAILURE;
561 return SUCCESS;
566 gfc_check_char (gfc_expr * i, gfc_expr * kind)
568 if (type_check (i, 0, BT_INTEGER) == FAILURE)
569 return FAILURE;
570 if (kind_check (kind, 1, BT_CHARACTER) == FAILURE)
571 return FAILURE;
573 return SUCCESS;
578 gfc_check_chdir (gfc_expr * dir)
580 if (type_check (dir, 0, BT_CHARACTER) == FAILURE)
581 return FAILURE;
583 return SUCCESS;
588 gfc_check_chdir_sub (gfc_expr * dir, gfc_expr * status)
590 if (type_check (dir, 0, BT_CHARACTER) == FAILURE)
591 return FAILURE;
593 if (status == NULL)
594 return SUCCESS;
596 if (type_check (status, 1, BT_INTEGER) == FAILURE)
597 return FAILURE;
599 if (scalar_check (status, 1) == FAILURE)
600 return FAILURE;
602 return SUCCESS;
607 gfc_check_cmplx (gfc_expr * x, gfc_expr * y, gfc_expr * kind)
609 if (numeric_check (x, 0) == FAILURE)
610 return FAILURE;
612 if (y != NULL)
614 if (numeric_check (y, 1) == FAILURE)
615 return FAILURE;
617 if (x->ts.type == BT_COMPLEX)
619 must_be (y, 1, "not be present if 'x' is COMPLEX");
620 return FAILURE;
624 if (kind_check (kind, 2, BT_COMPLEX) == FAILURE)
625 return FAILURE;
627 return SUCCESS;
632 gfc_check_count (gfc_expr * mask, gfc_expr * dim)
634 if (logical_array_check (mask, 0) == FAILURE)
635 return FAILURE;
636 if (dim_check (dim, 1, 1) == FAILURE)
637 return FAILURE;
639 return SUCCESS;
644 gfc_check_cshift (gfc_expr * array, gfc_expr * shift, gfc_expr * dim)
646 if (array_check (array, 0) == FAILURE)
647 return FAILURE;
649 if (array->rank == 1)
651 if (scalar_check (shift, 1) == FAILURE)
652 return FAILURE;
654 else
656 /* TODO: more requirements on shift parameter. */
659 if (dim_check (dim, 2, 1) == FAILURE)
660 return FAILURE;
662 return SUCCESS;
667 gfc_check_dcmplx (gfc_expr * x, gfc_expr * y)
669 if (numeric_check (x, 0) == FAILURE)
670 return FAILURE;
672 if (y != NULL)
674 if (numeric_check (y, 1) == FAILURE)
675 return FAILURE;
677 if (x->ts.type == BT_COMPLEX)
679 must_be (y, 1, "not be present if 'x' is COMPLEX");
680 return FAILURE;
684 return SUCCESS;
689 gfc_check_dble (gfc_expr * x)
691 if (numeric_check (x, 0) == FAILURE)
692 return FAILURE;
694 return SUCCESS;
699 gfc_check_digits (gfc_expr * x)
701 if (int_or_real_check (x, 0) == FAILURE)
702 return FAILURE;
704 return SUCCESS;
709 gfc_check_dot_product (gfc_expr * vector_a, gfc_expr * vector_b)
711 switch (vector_a->ts.type)
713 case BT_LOGICAL:
714 if (type_check (vector_b, 1, BT_LOGICAL) == FAILURE)
715 return FAILURE;
716 break;
718 case BT_INTEGER:
719 case BT_REAL:
720 case BT_COMPLEX:
721 if (numeric_check (vector_b, 1) == FAILURE)
722 return FAILURE;
723 break;
725 default:
726 must_be (vector_a, 0, "numeric or LOGICAL");
727 return FAILURE;
730 if (rank_check (vector_a, 0, 1) == FAILURE)
731 return FAILURE;
733 if (rank_check (vector_b, 1, 1) == FAILURE)
734 return FAILURE;
736 return SUCCESS;
741 gfc_check_eoshift (gfc_expr * array, gfc_expr * shift, gfc_expr * boundary,
742 gfc_expr * dim)
744 if (array_check (array, 0) == FAILURE)
745 return FAILURE;
747 if (type_check (shift, 1, BT_INTEGER) == FAILURE)
748 return FAILURE;
750 if (array->rank == 1)
752 if (scalar_check (shift, 2) == FAILURE)
753 return FAILURE;
755 else
757 /* TODO: more weird restrictions on shift. */
760 if (boundary != NULL)
762 if (same_type_check (array, 0, boundary, 2) == FAILURE)
763 return FAILURE;
765 /* TODO: more restrictions on boundary. */
768 if (dim_check (dim, 1, 1) == FAILURE)
769 return FAILURE;
771 return SUCCESS;
775 /* A single complex argument. */
778 gfc_check_fn_c (gfc_expr * a)
780 if (type_check (a, 0, BT_COMPLEX) == FAILURE)
781 return FAILURE;
783 return SUCCESS;
787 /* A single real argument. */
790 gfc_check_fn_r (gfc_expr * a)
792 if (type_check (a, 0, BT_REAL) == FAILURE)
793 return FAILURE;
795 return SUCCESS;
799 /* A single real or complex argument. */
802 gfc_check_fn_rc (gfc_expr * a)
804 if (real_or_complex_check (a, 0) == FAILURE)
805 return FAILURE;
807 return SUCCESS;
812 gfc_check_fnum (gfc_expr * unit)
814 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
815 return FAILURE;
817 if (scalar_check (unit, 0) == FAILURE)
818 return FAILURE;
820 return SUCCESS;
824 /* This is used for the g77 one-argument Bessel functions, and the
825 error function. */
828 gfc_check_g77_math1 (gfc_expr * x)
830 if (scalar_check (x, 0) == FAILURE)
831 return FAILURE;
833 if (type_check (x, 0, BT_REAL) == FAILURE)
834 return FAILURE;
836 return SUCCESS;
841 gfc_check_huge (gfc_expr * x)
843 if (int_or_real_check (x, 0) == FAILURE)
844 return FAILURE;
846 return SUCCESS;
850 /* Check that the single argument is an integer. */
853 gfc_check_i (gfc_expr * i)
855 if (type_check (i, 0, BT_INTEGER) == FAILURE)
856 return FAILURE;
858 return SUCCESS;
863 gfc_check_iand (gfc_expr * i, gfc_expr * j)
865 if (type_check (i, 0, BT_INTEGER) == FAILURE)
866 return FAILURE;
868 if (type_check (j, 1, BT_INTEGER) == FAILURE)
869 return FAILURE;
871 if (i->ts.kind != j->ts.kind)
873 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
874 &i->where) == FAILURE)
875 return FAILURE;
878 return SUCCESS;
883 gfc_check_ibclr (gfc_expr * i, gfc_expr * pos)
885 if (type_check (i, 0, BT_INTEGER) == FAILURE)
886 return FAILURE;
888 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
889 return FAILURE;
891 return SUCCESS;
896 gfc_check_ibits (gfc_expr * i, gfc_expr * pos, gfc_expr * len)
898 if (type_check (i, 0, BT_INTEGER) == FAILURE)
899 return FAILURE;
901 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
902 return FAILURE;
904 if (type_check (len, 2, BT_INTEGER) == FAILURE)
905 return FAILURE;
907 return SUCCESS;
912 gfc_check_ibset (gfc_expr * i, gfc_expr * pos)
914 if (type_check (i, 0, BT_INTEGER) == FAILURE)
915 return FAILURE;
917 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
918 return FAILURE;
920 return SUCCESS;
925 gfc_check_idnint (gfc_expr * a)
927 if (double_check (a, 0) == FAILURE)
928 return FAILURE;
930 return SUCCESS;
935 gfc_check_ieor (gfc_expr * i, gfc_expr * j)
937 if (type_check (i, 0, BT_INTEGER) == FAILURE)
938 return FAILURE;
940 if (type_check (j, 1, BT_INTEGER) == FAILURE)
941 return FAILURE;
943 if (i->ts.kind != j->ts.kind)
945 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
946 &i->where) == FAILURE)
947 return FAILURE;
950 return SUCCESS;
955 gfc_check_index (gfc_expr * string, gfc_expr * substring, gfc_expr * back)
957 if (type_check (string, 0, BT_CHARACTER) == FAILURE
958 || type_check (substring, 1, BT_CHARACTER) == FAILURE)
959 return FAILURE;
962 if (back != NULL && type_check (back, 2, BT_LOGICAL) == FAILURE)
963 return FAILURE;
965 if (string->ts.kind != substring->ts.kind)
967 must_be (substring, 1, "the same kind as 'string'");
968 return FAILURE;
971 return SUCCESS;
976 gfc_check_int (gfc_expr * x, gfc_expr * kind)
978 if (numeric_check (x, 0) == FAILURE)
979 return FAILURE;
981 if (kind != NULL)
983 if (type_check (kind, 1, BT_INTEGER) == FAILURE)
984 return FAILURE;
986 if (scalar_check (kind, 1) == FAILURE)
987 return FAILURE;
990 return SUCCESS;
995 gfc_check_ior (gfc_expr * i, gfc_expr * j)
997 if (type_check (i, 0, BT_INTEGER) == FAILURE)
998 return FAILURE;
1000 if (type_check (j, 1, BT_INTEGER) == FAILURE)
1001 return FAILURE;
1003 if (i->ts.kind != j->ts.kind)
1005 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
1006 &i->where) == FAILURE)
1007 return FAILURE;
1010 return SUCCESS;
1015 gfc_check_ishft (gfc_expr * i, gfc_expr * shift)
1017 if (type_check (i, 0, BT_INTEGER) == FAILURE
1018 || type_check (shift, 1, BT_INTEGER) == FAILURE)
1019 return FAILURE;
1021 return SUCCESS;
1026 gfc_check_ishftc (gfc_expr * i, gfc_expr * shift, gfc_expr * size)
1028 if (type_check (i, 0, BT_INTEGER) == FAILURE
1029 || type_check (shift, 1, BT_INTEGER) == FAILURE)
1030 return FAILURE;
1032 if (size != NULL && type_check (size, 2, BT_INTEGER) == FAILURE)
1033 return FAILURE;
1035 return SUCCESS;
1040 gfc_check_kill (gfc_expr * pid, gfc_expr * sig)
1042 if (type_check (pid, 0, BT_INTEGER) == FAILURE)
1043 return FAILURE;
1045 if (type_check (sig, 1, BT_INTEGER) == FAILURE)
1046 return FAILURE;
1048 return SUCCESS;
1053 gfc_check_kill_sub (gfc_expr * pid, gfc_expr * sig, gfc_expr * status)
1055 if (type_check (pid, 0, BT_INTEGER) == FAILURE)
1056 return FAILURE;
1058 if (type_check (sig, 1, BT_INTEGER) == FAILURE)
1059 return FAILURE;
1061 if (status == NULL)
1062 return SUCCESS;
1064 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1065 return FAILURE;
1067 if (scalar_check (status, 2) == FAILURE)
1068 return FAILURE;
1070 return SUCCESS;
1075 gfc_check_kind (gfc_expr * x)
1077 if (x->ts.type == BT_DERIVED)
1079 must_be (x, 0, "a non-derived type");
1080 return FAILURE;
1083 return SUCCESS;
1088 gfc_check_lbound (gfc_expr * array, gfc_expr * dim)
1090 if (array_check (array, 0) == FAILURE)
1091 return FAILURE;
1093 if (dim != NULL)
1095 if (dim_check (dim, 1, 1) == FAILURE)
1096 return FAILURE;
1098 if (dim_rank_check (dim, array, 1) == FAILURE)
1099 return FAILURE;
1101 return SUCCESS;
1106 gfc_check_link (gfc_expr * path1, gfc_expr * path2)
1108 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1109 return FAILURE;
1111 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1112 return FAILURE;
1114 return SUCCESS;
1119 gfc_check_link_sub (gfc_expr * path1, gfc_expr * path2, gfc_expr * status)
1121 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1122 return FAILURE;
1124 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1125 return FAILURE;
1127 if (status == NULL)
1128 return SUCCESS;
1130 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1131 return FAILURE;
1133 if (scalar_check (status, 2) == FAILURE)
1134 return FAILURE;
1136 return SUCCESS;
1141 gfc_check_symlnk (gfc_expr * path1, gfc_expr * path2)
1143 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1144 return FAILURE;
1146 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1147 return FAILURE;
1149 return SUCCESS;
1154 gfc_check_symlnk_sub (gfc_expr * path1, gfc_expr * path2, gfc_expr * status)
1156 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1157 return FAILURE;
1159 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1160 return FAILURE;
1162 if (status == NULL)
1163 return SUCCESS;
1165 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1166 return FAILURE;
1168 if (scalar_check (status, 2) == FAILURE)
1169 return FAILURE;
1171 return SUCCESS;
1176 gfc_check_logical (gfc_expr * a, gfc_expr * kind)
1178 if (type_check (a, 0, BT_LOGICAL) == FAILURE)
1179 return FAILURE;
1180 if (kind_check (kind, 1, BT_LOGICAL) == FAILURE)
1181 return FAILURE;
1183 return SUCCESS;
1187 /* Min/max family. */
1189 static try
1190 min_max_args (gfc_actual_arglist * arg)
1192 if (arg == NULL || arg->next == NULL)
1194 gfc_error ("Intrinsic '%s' at %L must have at least two arguments",
1195 gfc_current_intrinsic, gfc_current_intrinsic_where);
1196 return FAILURE;
1199 return SUCCESS;
1203 static try
1204 check_rest (bt type, int kind, gfc_actual_arglist * arg)
1206 gfc_expr *x;
1207 int n;
1209 if (min_max_args (arg) == FAILURE)
1210 return FAILURE;
1212 n = 1;
1214 for (; arg; arg = arg->next, n++)
1216 x = arg->expr;
1217 if (x->ts.type != type || x->ts.kind != kind)
1219 if (x->ts.type == type)
1221 if (gfc_notify_std (GFC_STD_GNU,
1222 "Extension: Different type kinds at %L", &x->where)
1223 == FAILURE)
1224 return FAILURE;
1226 else
1228 gfc_error ("'a%d' argument of '%s' intrinsic at %L must be %s(%d)",
1229 n, gfc_current_intrinsic, &x->where,
1230 gfc_basic_typename (type), kind);
1231 return FAILURE;
1236 return SUCCESS;
1241 gfc_check_min_max (gfc_actual_arglist * arg)
1243 gfc_expr *x;
1245 if (min_max_args (arg) == FAILURE)
1246 return FAILURE;
1248 x = arg->expr;
1250 if (x->ts.type != BT_INTEGER && x->ts.type != BT_REAL)
1252 gfc_error
1253 ("'a1' argument of '%s' intrinsic at %L must be INTEGER or REAL",
1254 gfc_current_intrinsic, &x->where);
1255 return FAILURE;
1258 return check_rest (x->ts.type, x->ts.kind, arg);
1263 gfc_check_min_max_integer (gfc_actual_arglist * arg)
1265 return check_rest (BT_INTEGER, gfc_default_integer_kind, arg);
1270 gfc_check_min_max_real (gfc_actual_arglist * arg)
1272 return check_rest (BT_REAL, gfc_default_real_kind, arg);
1277 gfc_check_min_max_double (gfc_actual_arglist * arg)
1279 return check_rest (BT_REAL, gfc_default_double_kind, arg);
1282 /* End of min/max family. */
1286 gfc_check_matmul (gfc_expr * matrix_a, gfc_expr * matrix_b)
1288 if ((matrix_a->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_b->ts))
1290 must_be (matrix_a, 0, "numeric or LOGICAL");
1291 return FAILURE;
1294 if ((matrix_b->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_a->ts))
1296 must_be (matrix_b, 0, "numeric or LOGICAL");
1297 return FAILURE;
1300 switch (matrix_a->rank)
1302 case 1:
1303 if (rank_check (matrix_b, 1, 2) == FAILURE)
1304 return FAILURE;
1305 break;
1307 case 2:
1308 if (matrix_b->rank == 2)
1309 break;
1310 if (rank_check (matrix_b, 1, 1) == FAILURE)
1311 return FAILURE;
1312 break;
1314 default:
1315 must_be (matrix_a, 0, "of rank 1 or 2");
1316 return FAILURE;
1319 return SUCCESS;
1323 /* Whoever came up with this interface was probably on something.
1324 The possibilities for the occupation of the second and third
1325 parameters are:
1327 Arg #2 Arg #3
1328 NULL NULL
1329 DIM NULL
1330 MASK NULL
1331 NULL MASK minloc(array, mask=m)
1332 DIM MASK
1334 I.e. in the case of minloc(array,mask), mask will be in the second
1335 position of the argument list and we'll have to fix that up. */
1338 gfc_check_minloc_maxloc (gfc_actual_arglist * ap)
1340 gfc_expr *a, *m, *d;
1342 a = ap->expr;
1343 if (int_or_real_check (a, 0) == FAILURE
1344 || array_check (a, 0) == FAILURE)
1345 return FAILURE;
1347 d = ap->next->expr;
1348 m = ap->next->next->expr;
1350 if (m == NULL && d != NULL && d->ts.type == BT_LOGICAL
1351 && ap->next->name == NULL)
1353 m = d;
1354 d = NULL;
1356 ap->next->expr = NULL;
1357 ap->next->next->expr = m;
1360 if (d != NULL
1361 && (scalar_check (d, 1) == FAILURE
1362 || type_check (d, 1, BT_INTEGER) == FAILURE))
1363 return FAILURE;
1365 if (m != NULL && type_check (m, 2, BT_LOGICAL) == FAILURE)
1366 return FAILURE;
1368 return SUCCESS;
1372 /* Similar to minloc/maxloc, the argument list might need to be
1373 reordered for the MINVAL, MAXVAL, PRODUCT, and SUM intrinsics. The
1374 difference is that MINLOC/MAXLOC take an additional KIND argument.
1375 The possibilities are:
1377 Arg #2 Arg #3
1378 NULL NULL
1379 DIM NULL
1380 MASK NULL
1381 NULL MASK minval(array, mask=m)
1382 DIM MASK
1384 I.e. in the case of minval(array,mask), mask will be in the second
1385 position of the argument list and we'll have to fix that up. */
1387 static try
1388 check_reduction (gfc_actual_arglist * ap)
1390 gfc_expr *m, *d;
1392 d = ap->next->expr;
1393 m = ap->next->next->expr;
1395 if (m == NULL && d != NULL && d->ts.type == BT_LOGICAL
1396 && ap->next->name == NULL)
1398 m = d;
1399 d = NULL;
1401 ap->next->expr = NULL;
1402 ap->next->next->expr = m;
1405 if (d != NULL
1406 && (scalar_check (d, 1) == FAILURE
1407 || type_check (d, 1, BT_INTEGER) == FAILURE))
1408 return FAILURE;
1410 if (m != NULL && type_check (m, 2, BT_LOGICAL) == FAILURE)
1411 return FAILURE;
1413 return SUCCESS;
1418 gfc_check_minval_maxval (gfc_actual_arglist * ap)
1420 if (int_or_real_check (ap->expr, 0) == FAILURE
1421 || array_check (ap->expr, 0) == FAILURE)
1422 return FAILURE;
1424 return check_reduction (ap);
1429 gfc_check_product_sum (gfc_actual_arglist * ap)
1431 if (numeric_check (ap->expr, 0) == FAILURE
1432 || array_check (ap->expr, 0) == FAILURE)
1433 return FAILURE;
1435 return check_reduction (ap);
1440 gfc_check_merge (gfc_expr * tsource, gfc_expr * fsource, gfc_expr * mask)
1442 if (same_type_check (tsource, 0, fsource, 1) == FAILURE)
1443 return FAILURE;
1445 if (type_check (mask, 2, BT_LOGICAL) == FAILURE)
1446 return FAILURE;
1448 return SUCCESS;
1453 gfc_check_nearest (gfc_expr * x, gfc_expr * s)
1455 if (type_check (x, 0, BT_REAL) == FAILURE)
1456 return FAILURE;
1458 if (type_check (s, 1, BT_REAL) == FAILURE)
1459 return FAILURE;
1461 return SUCCESS;
1466 gfc_check_null (gfc_expr * mold)
1468 symbol_attribute attr;
1470 if (mold == NULL)
1471 return SUCCESS;
1473 if (variable_check (mold, 0) == FAILURE)
1474 return FAILURE;
1476 attr = gfc_variable_attr (mold, NULL);
1478 if (!attr.pointer)
1480 must_be (mold, 0, "a POINTER");
1481 return FAILURE;
1484 return SUCCESS;
1489 gfc_check_pack (gfc_expr * array, gfc_expr * mask, gfc_expr * vector)
1491 if (array_check (array, 0) == FAILURE)
1492 return FAILURE;
1494 if (type_check (mask, 1, BT_LOGICAL) == FAILURE)
1495 return FAILURE;
1497 if (mask->rank != 0 && mask->rank != array->rank)
1499 must_be (array, 0, "conformable with 'mask' argument");
1500 return FAILURE;
1503 if (vector != NULL)
1505 if (same_type_check (array, 0, vector, 2) == FAILURE)
1506 return FAILURE;
1508 if (rank_check (vector, 2, 1) == FAILURE)
1509 return FAILURE;
1511 /* TODO: More constraints here. */
1514 return SUCCESS;
1519 gfc_check_precision (gfc_expr * x)
1521 if (x->ts.type != BT_REAL && x->ts.type != BT_COMPLEX)
1523 must_be (x, 0, "of type REAL or COMPLEX");
1524 return FAILURE;
1527 return SUCCESS;
1532 gfc_check_present (gfc_expr * a)
1534 gfc_symbol *sym;
1536 if (variable_check (a, 0) == FAILURE)
1537 return FAILURE;
1539 sym = a->symtree->n.sym;
1540 if (!sym->attr.dummy)
1542 must_be (a, 0, "a dummy variable");
1543 return FAILURE;
1546 if (!sym->attr.optional)
1548 must_be (a, 0, "an OPTIONAL dummy variable");
1549 return FAILURE;
1552 return SUCCESS;
1557 gfc_check_radix (gfc_expr * x)
1559 if (int_or_real_check (x, 0) == FAILURE)
1560 return FAILURE;
1562 return SUCCESS;
1567 gfc_check_range (gfc_expr * x)
1569 if (numeric_check (x, 0) == FAILURE)
1570 return FAILURE;
1572 return SUCCESS;
1576 /* real, float, sngl. */
1578 gfc_check_real (gfc_expr * a, gfc_expr * kind)
1580 if (numeric_check (a, 0) == FAILURE)
1581 return FAILURE;
1583 if (kind_check (kind, 1, BT_REAL) == FAILURE)
1584 return FAILURE;
1586 return SUCCESS;
1591 gfc_check_rename (gfc_expr * path1, gfc_expr * path2)
1593 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1594 return FAILURE;
1596 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1597 return FAILURE;
1599 return SUCCESS;
1604 gfc_check_rename_sub (gfc_expr * path1, gfc_expr * path2, gfc_expr * status)
1606 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1607 return FAILURE;
1609 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1610 return FAILURE;
1612 if (status == NULL)
1613 return SUCCESS;
1615 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1616 return FAILURE;
1618 if (scalar_check (status, 2) == FAILURE)
1619 return FAILURE;
1621 return SUCCESS;
1626 gfc_check_repeat (gfc_expr * x, gfc_expr * y)
1628 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
1629 return FAILURE;
1631 if (scalar_check (x, 0) == FAILURE)
1632 return FAILURE;
1634 if (type_check (y, 0, BT_INTEGER) == FAILURE)
1635 return FAILURE;
1637 if (scalar_check (y, 1) == FAILURE)
1638 return FAILURE;
1640 return SUCCESS;
1645 gfc_check_reshape (gfc_expr * source, gfc_expr * shape,
1646 gfc_expr * pad, gfc_expr * order)
1648 mpz_t size;
1649 int m;
1651 if (array_check (source, 0) == FAILURE)
1652 return FAILURE;
1654 if (rank_check (shape, 1, 1) == FAILURE)
1655 return FAILURE;
1657 if (type_check (shape, 1, BT_INTEGER) == FAILURE)
1658 return FAILURE;
1660 if (gfc_array_size (shape, &size) != SUCCESS)
1662 gfc_error ("'shape' argument of 'reshape' intrinsic at %L must be an "
1663 "array of constant size", &shape->where);
1664 return FAILURE;
1667 m = mpz_cmp_ui (size, GFC_MAX_DIMENSIONS);
1668 mpz_clear (size);
1670 if (m > 0)
1672 gfc_error
1673 ("'shape' argument of 'reshape' intrinsic at %L has more than "
1674 stringize (GFC_MAX_DIMENSIONS) " elements", &shape->where);
1675 return FAILURE;
1678 if (pad != NULL)
1680 if (same_type_check (source, 0, pad, 2) == FAILURE)
1681 return FAILURE;
1682 if (array_check (pad, 2) == FAILURE)
1683 return FAILURE;
1686 if (order != NULL && array_check (order, 3) == FAILURE)
1687 return FAILURE;
1689 return SUCCESS;
1694 gfc_check_scale (gfc_expr * x, gfc_expr * i)
1696 if (type_check (x, 0, BT_REAL) == FAILURE)
1697 return FAILURE;
1699 if (type_check (i, 1, BT_INTEGER) == FAILURE)
1700 return FAILURE;
1702 return SUCCESS;
1707 gfc_check_scan (gfc_expr * x, gfc_expr * y, gfc_expr * z)
1709 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
1710 return FAILURE;
1712 if (type_check (y, 1, BT_CHARACTER) == FAILURE)
1713 return FAILURE;
1715 if (z != NULL && type_check (z, 2, BT_LOGICAL) == FAILURE)
1716 return FAILURE;
1718 if (same_type_check (x, 0, y, 1) == FAILURE)
1719 return FAILURE;
1721 return SUCCESS;
1726 gfc_check_selected_int_kind (gfc_expr * r)
1729 if (type_check (r, 0, BT_INTEGER) == FAILURE)
1730 return FAILURE;
1732 if (scalar_check (r, 0) == FAILURE)
1733 return FAILURE;
1735 return SUCCESS;
1740 gfc_check_selected_real_kind (gfc_expr * p, gfc_expr * r)
1742 if (p == NULL && r == NULL)
1744 gfc_error ("Missing arguments to %s intrinsic at %L",
1745 gfc_current_intrinsic, gfc_current_intrinsic_where);
1747 return FAILURE;
1750 if (p != NULL && type_check (p, 0, BT_INTEGER) == FAILURE)
1751 return FAILURE;
1753 if (r != NULL && type_check (r, 1, BT_INTEGER) == FAILURE)
1754 return FAILURE;
1756 return SUCCESS;
1761 gfc_check_set_exponent (gfc_expr * x, gfc_expr * i)
1763 if (type_check (x, 0, BT_REAL) == FAILURE)
1764 return FAILURE;
1766 if (type_check (i, 1, BT_INTEGER) == FAILURE)
1767 return FAILURE;
1769 return SUCCESS;
1774 gfc_check_shape (gfc_expr * source)
1776 gfc_array_ref *ar;
1778 if (source->rank == 0 || source->expr_type != EXPR_VARIABLE)
1779 return SUCCESS;
1781 ar = gfc_find_array_ref (source);
1783 if (ar->as && ar->as->type == AS_ASSUMED_SIZE)
1785 gfc_error ("'source' argument of 'shape' intrinsic at %L must not be "
1786 "an assumed size array", &source->where);
1787 return FAILURE;
1790 return SUCCESS;
1795 gfc_check_sign (gfc_expr * a, gfc_expr * b)
1797 if (int_or_real_check (a, 0) == FAILURE)
1798 return FAILURE;
1800 if (same_type_check (a, 0, b, 1) == FAILURE)
1801 return FAILURE;
1803 return SUCCESS;
1808 gfc_check_size (gfc_expr * array, gfc_expr * dim)
1810 if (array_check (array, 0) == FAILURE)
1811 return FAILURE;
1813 if (dim != NULL)
1815 if (type_check (dim, 1, BT_INTEGER) == FAILURE)
1816 return FAILURE;
1818 if (kind_value_check (dim, 1, gfc_default_integer_kind) == FAILURE)
1819 return FAILURE;
1821 if (dim_rank_check (dim, array, 0) == FAILURE)
1822 return FAILURE;
1825 return SUCCESS;
1830 gfc_check_sleep_sub (gfc_expr * seconds)
1832 if (type_check (seconds, 0, BT_INTEGER) == FAILURE)
1833 return FAILURE;
1835 if (scalar_check (seconds, 0) == FAILURE)
1836 return FAILURE;
1838 return SUCCESS;
1843 gfc_check_spread (gfc_expr * source, gfc_expr * dim, gfc_expr * ncopies)
1845 if (source->rank >= GFC_MAX_DIMENSIONS)
1847 must_be (source, 0, "less than rank " stringize (GFC_MAX_DIMENSIONS));
1848 return FAILURE;
1851 if (dim_check (dim, 1, 0) == FAILURE)
1852 return FAILURE;
1854 if (type_check (ncopies, 2, BT_INTEGER) == FAILURE)
1855 return FAILURE;
1857 if (scalar_check (ncopies, 2) == FAILURE)
1858 return FAILURE;
1860 return SUCCESS;
1865 gfc_check_fstat (gfc_expr * unit, gfc_expr * array)
1867 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
1868 return FAILURE;
1870 if (scalar_check (unit, 0) == FAILURE)
1871 return FAILURE;
1873 if (type_check (array, 1, BT_INTEGER) == FAILURE
1874 || kind_value_check (unit, 0, gfc_default_integer_kind) == FAILURE)
1875 return FAILURE;
1877 if (array_check (array, 1) == FAILURE)
1878 return FAILURE;
1880 return SUCCESS;
1885 gfc_check_fstat_sub (gfc_expr * unit, gfc_expr * array, gfc_expr * status)
1887 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
1888 return FAILURE;
1890 if (scalar_check (unit, 0) == FAILURE)
1891 return FAILURE;
1893 if (type_check (array, 1, BT_INTEGER) == FAILURE
1894 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
1895 return FAILURE;
1897 if (array_check (array, 1) == FAILURE)
1898 return FAILURE;
1900 if (status == NULL)
1901 return SUCCESS;
1903 if (type_check (status, 2, BT_INTEGER) == FAILURE
1904 || kind_value_check (status, 2, gfc_default_integer_kind) == FAILURE)
1905 return FAILURE;
1907 if (scalar_check (status, 2) == FAILURE)
1908 return FAILURE;
1910 return SUCCESS;
1915 gfc_check_stat (gfc_expr * name, gfc_expr * array)
1917 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
1918 return FAILURE;
1920 if (type_check (array, 1, BT_INTEGER) == FAILURE
1921 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
1922 return FAILURE;
1924 if (array_check (array, 1) == FAILURE)
1925 return FAILURE;
1927 return SUCCESS;
1932 gfc_check_stat_sub (gfc_expr * name, gfc_expr * array, gfc_expr * status)
1934 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
1935 return FAILURE;
1937 if (type_check (array, 1, BT_INTEGER) == FAILURE
1938 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
1939 return FAILURE;
1941 if (array_check (array, 1) == FAILURE)
1942 return FAILURE;
1944 if (status == NULL)
1945 return SUCCESS;
1947 if (type_check (status, 2, BT_INTEGER) == FAILURE
1948 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
1949 return FAILURE;
1951 if (scalar_check (status, 2) == FAILURE)
1952 return FAILURE;
1954 return SUCCESS;
1959 gfc_check_transfer (gfc_expr * source ATTRIBUTE_UNUSED,
1960 gfc_expr * mold ATTRIBUTE_UNUSED,
1961 gfc_expr * size)
1963 if (size != NULL)
1965 if (type_check (size, 2, BT_INTEGER) == FAILURE)
1966 return FAILURE;
1968 if (scalar_check (size, 2) == FAILURE)
1969 return FAILURE;
1971 if (nonoptional_check (size, 2) == FAILURE)
1972 return FAILURE;
1975 return SUCCESS;
1980 gfc_check_transpose (gfc_expr * matrix)
1982 if (rank_check (matrix, 0, 2) == FAILURE)
1983 return FAILURE;
1985 return SUCCESS;
1990 gfc_check_ubound (gfc_expr * array, gfc_expr * dim)
1992 if (array_check (array, 0) == FAILURE)
1993 return FAILURE;
1995 if (dim != NULL)
1997 if (dim_check (dim, 1, 1) == FAILURE)
1998 return FAILURE;
2000 if (dim_rank_check (dim, array, 0) == FAILURE)
2001 return FAILURE;
2004 return SUCCESS;
2009 gfc_check_unpack (gfc_expr * vector, gfc_expr * mask, gfc_expr * field)
2011 if (rank_check (vector, 0, 1) == FAILURE)
2012 return FAILURE;
2014 if (array_check (mask, 1) == FAILURE)
2015 return FAILURE;
2017 if (type_check (mask, 1, BT_LOGICAL) == FAILURE)
2018 return FAILURE;
2020 if (same_type_check (vector, 0, field, 2) == FAILURE)
2021 return FAILURE;
2023 return SUCCESS;
2028 gfc_check_verify (gfc_expr * x, gfc_expr * y, gfc_expr * z)
2030 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
2031 return FAILURE;
2033 if (same_type_check (x, 0, y, 1) == FAILURE)
2034 return FAILURE;
2036 if (z != NULL && type_check (z, 2, BT_LOGICAL) == FAILURE)
2037 return FAILURE;
2039 return SUCCESS;
2044 gfc_check_trim (gfc_expr * x)
2046 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
2047 return FAILURE;
2049 if (scalar_check (x, 0) == FAILURE)
2050 return FAILURE;
2052 return SUCCESS;
2056 /* Common check function for the half a dozen intrinsics that have a
2057 single real argument. */
2060 gfc_check_x (gfc_expr * x)
2062 if (type_check (x, 0, BT_REAL) == FAILURE)
2063 return FAILURE;
2065 return SUCCESS;
2069 /************* Check functions for intrinsic subroutines *************/
2072 gfc_check_cpu_time (gfc_expr * time)
2074 if (scalar_check (time, 0) == FAILURE)
2075 return FAILURE;
2077 if (type_check (time, 0, BT_REAL) == FAILURE)
2078 return FAILURE;
2080 if (variable_check (time, 0) == FAILURE)
2081 return FAILURE;
2083 return SUCCESS;
2088 gfc_check_date_and_time (gfc_expr * date, gfc_expr * time,
2089 gfc_expr * zone, gfc_expr * values)
2091 if (date != NULL)
2093 if (type_check (date, 0, BT_CHARACTER) == FAILURE)
2094 return FAILURE;
2095 if (scalar_check (date, 0) == FAILURE)
2096 return FAILURE;
2097 if (variable_check (date, 0) == FAILURE)
2098 return FAILURE;
2101 if (time != NULL)
2103 if (type_check (time, 1, BT_CHARACTER) == FAILURE)
2104 return FAILURE;
2105 if (scalar_check (time, 1) == FAILURE)
2106 return FAILURE;
2107 if (variable_check (time, 1) == FAILURE)
2108 return FAILURE;
2111 if (zone != NULL)
2113 if (type_check (zone, 2, BT_CHARACTER) == FAILURE)
2114 return FAILURE;
2115 if (scalar_check (zone, 2) == FAILURE)
2116 return FAILURE;
2117 if (variable_check (zone, 2) == FAILURE)
2118 return FAILURE;
2121 if (values != NULL)
2123 if (type_check (values, 3, BT_INTEGER) == FAILURE)
2124 return FAILURE;
2125 if (array_check (values, 3) == FAILURE)
2126 return FAILURE;
2127 if (rank_check (values, 3, 1) == FAILURE)
2128 return FAILURE;
2129 if (variable_check (values, 3) == FAILURE)
2130 return FAILURE;
2133 return SUCCESS;
2138 gfc_check_mvbits (gfc_expr * from, gfc_expr * frompos, gfc_expr * len,
2139 gfc_expr * to, gfc_expr * topos)
2141 if (type_check (from, 0, BT_INTEGER) == FAILURE)
2142 return FAILURE;
2144 if (type_check (frompos, 1, BT_INTEGER) == FAILURE)
2145 return FAILURE;
2147 if (type_check (len, 2, BT_INTEGER) == FAILURE)
2148 return FAILURE;
2150 if (same_type_check (from, 0, to, 3) == FAILURE)
2151 return FAILURE;
2153 if (variable_check (to, 3) == FAILURE)
2154 return FAILURE;
2156 if (type_check (topos, 4, BT_INTEGER) == FAILURE)
2157 return FAILURE;
2159 return SUCCESS;
2164 gfc_check_random_number (gfc_expr * harvest)
2166 if (type_check (harvest, 0, BT_REAL) == FAILURE)
2167 return FAILURE;
2169 if (variable_check (harvest, 0) == FAILURE)
2170 return FAILURE;
2172 return SUCCESS;
2177 gfc_check_random_seed (gfc_expr * size, gfc_expr * put, gfc_expr * get)
2179 if (size != NULL)
2181 if (scalar_check (size, 0) == FAILURE)
2182 return FAILURE;
2184 if (type_check (size, 0, BT_INTEGER) == FAILURE)
2185 return FAILURE;
2187 if (variable_check (size, 0) == FAILURE)
2188 return FAILURE;
2190 if (kind_value_check (size, 0, gfc_default_integer_kind) == FAILURE)
2191 return FAILURE;
2194 if (put != NULL)
2197 if (size != NULL)
2198 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic,
2199 &put->where);
2201 if (array_check (put, 1) == FAILURE)
2202 return FAILURE;
2204 if (rank_check (put, 1, 1) == FAILURE)
2205 return FAILURE;
2207 if (type_check (put, 1, BT_INTEGER) == FAILURE)
2208 return FAILURE;
2210 if (kind_value_check (put, 1, gfc_default_integer_kind) == FAILURE)
2211 return FAILURE;
2214 if (get != NULL)
2217 if (size != NULL || put != NULL)
2218 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic,
2219 &get->where);
2221 if (array_check (get, 2) == FAILURE)
2222 return FAILURE;
2224 if (rank_check (get, 2, 1) == FAILURE)
2225 return FAILURE;
2227 if (type_check (get, 2, BT_INTEGER) == FAILURE)
2228 return FAILURE;
2230 if (variable_check (get, 2) == FAILURE)
2231 return FAILURE;
2233 if (kind_value_check (get, 2, gfc_default_integer_kind) == FAILURE)
2234 return FAILURE;
2237 return SUCCESS;
2241 gfc_check_second_sub (gfc_expr * time)
2243 if (scalar_check (time, 0) == FAILURE)
2244 return FAILURE;
2246 if (type_check (time, 0, BT_REAL) == FAILURE)
2247 return FAILURE;
2249 if (kind_value_check(time, 0, 4) == FAILURE)
2250 return FAILURE;
2252 return SUCCESS;
2256 /* The arguments of SYSTEM_CLOCK are scalar, integer variables. Note,
2257 count, count_rate, and count_max are all optional arguments */
2260 gfc_check_system_clock (gfc_expr * count, gfc_expr * count_rate,
2261 gfc_expr * count_max)
2263 if (count != NULL)
2265 if (scalar_check (count, 0) == FAILURE)
2266 return FAILURE;
2268 if (type_check (count, 0, BT_INTEGER) == FAILURE)
2269 return FAILURE;
2271 if (variable_check (count, 0) == FAILURE)
2272 return FAILURE;
2275 if (count_rate != NULL)
2277 if (scalar_check (count_rate, 1) == FAILURE)
2278 return FAILURE;
2280 if (type_check (count_rate, 1, BT_INTEGER) == FAILURE)
2281 return FAILURE;
2283 if (variable_check (count_rate, 1) == FAILURE)
2284 return FAILURE;
2286 if (count != NULL
2287 && same_type_check (count, 0, count_rate, 1) == FAILURE)
2288 return FAILURE;
2292 if (count_max != NULL)
2294 if (scalar_check (count_max, 2) == FAILURE)
2295 return FAILURE;
2297 if (type_check (count_max, 2, BT_INTEGER) == FAILURE)
2298 return FAILURE;
2300 if (variable_check (count_max, 2) == FAILURE)
2301 return FAILURE;
2303 if (count != NULL
2304 && same_type_check (count, 0, count_max, 2) == FAILURE)
2305 return FAILURE;
2307 if (count_rate != NULL
2308 && same_type_check (count_rate, 1, count_max, 2) == FAILURE)
2309 return FAILURE;
2312 return SUCCESS;
2316 gfc_check_irand (gfc_expr * x)
2318 if (x == NULL)
2319 return SUCCESS;
2321 if (scalar_check (x, 0) == FAILURE)
2322 return FAILURE;
2324 if (type_check (x, 0, BT_INTEGER) == FAILURE)
2325 return FAILURE;
2327 if (kind_value_check(x, 0, 4) == FAILURE)
2328 return FAILURE;
2330 return SUCCESS;
2334 gfc_check_rand (gfc_expr * x)
2336 if (x == NULL)
2337 return SUCCESS;
2339 if (scalar_check (x, 0) == FAILURE)
2340 return FAILURE;
2342 if (type_check (x, 0, BT_INTEGER) == FAILURE)
2343 return FAILURE;
2345 if (kind_value_check(x, 0, 4) == FAILURE)
2346 return FAILURE;
2348 return SUCCESS;
2352 gfc_check_srand (gfc_expr * x)
2354 if (scalar_check (x, 0) == FAILURE)
2355 return FAILURE;
2357 if (type_check (x, 0, BT_INTEGER) == FAILURE)
2358 return FAILURE;
2360 if (kind_value_check(x, 0, 4) == FAILURE)
2361 return FAILURE;
2363 return SUCCESS;
2367 gfc_check_etime (gfc_expr * x)
2369 if (array_check (x, 0) == FAILURE)
2370 return FAILURE;
2372 if (rank_check (x, 0, 1) == FAILURE)
2373 return FAILURE;
2375 if (variable_check (x, 0) == FAILURE)
2376 return FAILURE;
2378 if (type_check (x, 0, BT_REAL) == FAILURE)
2379 return FAILURE;
2381 if (kind_value_check(x, 0, 4) == FAILURE)
2382 return FAILURE;
2384 return SUCCESS;
2388 gfc_check_etime_sub (gfc_expr * values, gfc_expr * time)
2390 if (array_check (values, 0) == FAILURE)
2391 return FAILURE;
2393 if (rank_check (values, 0, 1) == FAILURE)
2394 return FAILURE;
2396 if (variable_check (values, 0) == FAILURE)
2397 return FAILURE;
2399 if (type_check (values, 0, BT_REAL) == FAILURE)
2400 return FAILURE;
2402 if (kind_value_check(values, 0, 4) == FAILURE)
2403 return FAILURE;
2405 if (scalar_check (time, 1) == FAILURE)
2406 return FAILURE;
2408 if (type_check (time, 1, BT_REAL) == FAILURE)
2409 return FAILURE;
2411 if (kind_value_check(time, 1, 4) == FAILURE)
2412 return FAILURE;
2414 return SUCCESS;
2419 gfc_check_gerror (gfc_expr * msg)
2421 if (type_check (msg, 0, BT_CHARACTER) == FAILURE)
2422 return FAILURE;
2424 return SUCCESS;
2429 gfc_check_getcwd_sub (gfc_expr * cwd, gfc_expr * status)
2431 if (type_check (cwd, 0, BT_CHARACTER) == FAILURE)
2432 return FAILURE;
2434 if (status == NULL)
2435 return SUCCESS;
2437 if (scalar_check (status, 1) == FAILURE)
2438 return FAILURE;
2440 if (type_check (status, 1, BT_INTEGER) == FAILURE)
2441 return FAILURE;
2443 return SUCCESS;
2448 gfc_check_getlog (gfc_expr * msg)
2450 if (type_check (msg, 0, BT_CHARACTER) == FAILURE)
2451 return FAILURE;
2453 return SUCCESS;
2458 gfc_check_exit (gfc_expr * status)
2460 if (status == NULL)
2461 return SUCCESS;
2463 if (type_check (status, 0, BT_INTEGER) == FAILURE)
2464 return FAILURE;
2466 if (scalar_check (status, 0) == FAILURE)
2467 return FAILURE;
2469 return SUCCESS;
2474 gfc_check_flush (gfc_expr * unit)
2476 if (unit == NULL)
2477 return SUCCESS;
2479 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2480 return FAILURE;
2482 if (scalar_check (unit, 0) == FAILURE)
2483 return FAILURE;
2485 return SUCCESS;
2490 gfc_check_hostnm (gfc_expr * name)
2492 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
2493 return FAILURE;
2495 return SUCCESS;
2500 gfc_check_hostnm_sub (gfc_expr * name, gfc_expr * status)
2502 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
2503 return FAILURE;
2505 if (status == NULL)
2506 return SUCCESS;
2508 if (scalar_check (status, 1) == FAILURE)
2509 return FAILURE;
2511 if (type_check (status, 1, BT_INTEGER) == FAILURE)
2512 return FAILURE;
2514 return SUCCESS;
2519 gfc_check_perror (gfc_expr * string)
2521 if (type_check (string, 0, BT_CHARACTER) == FAILURE)
2522 return FAILURE;
2524 return SUCCESS;
2529 gfc_check_umask (gfc_expr * mask)
2531 if (type_check (mask, 0, BT_INTEGER) == FAILURE)
2532 return FAILURE;
2534 if (scalar_check (mask, 0) == FAILURE)
2535 return FAILURE;
2537 return SUCCESS;
2542 gfc_check_umask_sub (gfc_expr * mask, gfc_expr * old)
2544 if (type_check (mask, 0, BT_INTEGER) == FAILURE)
2545 return FAILURE;
2547 if (scalar_check (mask, 0) == FAILURE)
2548 return FAILURE;
2550 if (old == NULL)
2551 return SUCCESS;
2553 if (scalar_check (old, 1) == FAILURE)
2554 return FAILURE;
2556 if (type_check (old, 1, BT_INTEGER) == FAILURE)
2557 return FAILURE;
2559 return SUCCESS;
2564 gfc_check_unlink (gfc_expr * name)
2566 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
2567 return FAILURE;
2569 return SUCCESS;
2574 gfc_check_unlink_sub (gfc_expr * name, gfc_expr * status)
2576 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
2577 return FAILURE;
2579 if (status == NULL)
2580 return SUCCESS;
2582 if (scalar_check (status, 1) == FAILURE)
2583 return FAILURE;
2585 if (type_check (status, 1, BT_INTEGER) == FAILURE)
2586 return FAILURE;
2588 return SUCCESS;
2593 gfc_check_system_sub (gfc_expr * cmd, gfc_expr * status)
2595 if (type_check (cmd, 0, BT_CHARACTER) == FAILURE)
2596 return FAILURE;
2598 if (scalar_check (status, 1) == FAILURE)
2599 return FAILURE;
2601 if (type_check (status, 1, BT_INTEGER) == FAILURE)
2602 return FAILURE;
2604 if (kind_value_check (status, 1, gfc_default_integer_kind) == FAILURE)
2605 return FAILURE;
2607 return SUCCESS;